Messages in this thread Patch in this message | | | From | Srinivasa Ds <> | Subject | [RFC] [patch 1/2] add non_init_kernel_text_address | Date | Mon, 17 Dec 2007 15:45:36 +0530 |
| |
Changing regular_kernel_text_address() to persistent_kernel_text_address().
Since __init functions are discarded and its memory freed once initialization completes, It would be better if we enable kprobes to refuse probing __init functions. The attached patchset will do that.
This patch creates persistent_kernel_text_address() to identify "non_init" text area.
Signed-off-by: Srinivasa DS <srinivasa@in.ibm.com> Signed-off-by: Ananth N Mavinakayanahalli <ananth@in.ibm.com>
--- include/linux/kernel.h | 2 ++ kernel/extable.c | 16 +++++++++++++++- 2 files changed, 17 insertions(+), 1 deletion(-)
Index: linux-2.6.24-rc5-mm1/include/linux/kernel.h =================================================================== --- linux-2.6.24-rc5-mm1.orig/include/linux/kernel.h +++ linux-2.6.24-rc5-mm1/include/linux/kernel.h @@ -169,6 +169,8 @@ extern unsigned long long memparse(char extern int core_kernel_text(unsigned long addr); extern int __kernel_text_address(unsigned long addr); extern int kernel_text_address(unsigned long addr); +extern int persistent_kernel_text_address(unsigned long addr); +extern int persistent_core_kernel_text(unsigned long addr); struct pid; extern struct pid *session_of_pgrp(struct pid *pgrp); Index: linux-2.6.24-rc5-mm1/kernel/extable.c =================================================================== --- linux-2.6.24-rc5-mm1.orig/kernel/extable.c +++ linux-2.6.24-rc5-mm1/kernel/extable.c @@ -40,11 +40,18 @@ const struct exception_table_entry *sear return e; } -int core_kernel_text(unsigned long addr) +int persistent_core_kernel_text(unsigned long addr) { if (addr >= (unsigned long)_stext && addr <= (unsigned long)_etext) return 1; + return 0; +} + +int core_kernel_text(unsigned long addr) +{ + if (persistent_core_kernel_text(addr)) + return 1; if (addr >= (unsigned long)_sinittext && addr <= (unsigned long)_einittext) @@ -65,3 +72,10 @@ int kernel_text_address(unsigned long ad return 1; return module_text_address(addr) != NULL; } + +int persistent_kernel_text_address(unsigned long addr) +{ + if (persistent_core_kernel_text(addr)) + return 1; + return module_text_address(addr) != NULL; +}
| |