ChangeSet 1.2271, 2005/03/31 08:39:59-08:00, [EMAIL PROTECTED]
[PATCH] kprobe_handler should check pre_handler function
The kprobe_handler() code currently does not check if a pre_handler is
registered for the kprobe under process. This leads to a NULL pointer
dereference in cases when a module does not define a pre_handler.
The patch corrects the issue by explicitly checking that the
pre_handler is
not NULL before it is invoked.
Signed-off-by: Ananth N Mavinakayanahalli <[EMAIL PROTECTED]>
Signed-off-by: Andrew Morton <[EMAIL PROTECTED]>
Signed-off-by: Linus Torvalds <[EMAIL PROTECTED]>
i386/kernel/kprobes.c | 7 +++----
ppc64/kernel/kprobes.c | 3 +--
sparc64/kernel/kprobes.c | 2 +-
x86_64/kernel/kprobes.c | 7 +++----
4 files changed, 8 insertions(+), 11 deletions(-)
diff -Nru a/arch/i386/kernel/kprobes.c b/arch/i386/kernel/kprobes.c
--- a/arch/i386/kernel/kprobes.c 2005-03-31 10:20:30 -08:00
+++ b/arch/i386/kernel/kprobes.c 2005-03-31 10:20:30 -08:00
@@ -159,17 +159,16 @@
if (is_IF_modifier(p->opcode))
kprobe_saved_eflags &= ~IF_MASK;
- if (p->pre_handler(p, regs)) {
+ if (p->pre_handler && p->pre_handler(p, regs))
/* handler has already set things up, so skip ss setup */
return 1;
- }
- ss_probe:
+ss_probe:
prepare_singlestep(p, regs);
kprobe_status = KPROBE_HIT_SS;
return 1;
- no_kprobe:
+no_kprobe:
preempt_enable_no_resched();
return ret;
}
diff -Nru a/arch/ppc64/kernel/kprobes.c b/arch/ppc64/kernel/kprobes.c
--- a/arch/ppc64/kernel/kprobes.c 2005-03-31 10:20:30 -08:00
+++ b/arch/ppc64/kernel/kprobes.c 2005-03-31 10:20:30 -08:00
@@ -128,10 +128,9 @@
kprobe_status = KPROBE_HIT_ACTIVE;
current_kprobe = p;
kprobe_saved_msr = regs->msr;
- if (p->pre_handler(p, regs)) {
+ if (p->pre_handler && p->pre_handler(p, regs))
/* handler has already set things up, so skip ss setup */
return 1;
- }
ss_probe:
prepare_singlestep(p, regs);
diff -Nru a/arch/sparc64/kernel/kprobes.c b/arch/sparc64/kernel/kprobes.c
--- a/arch/sparc64/kernel/kprobes.c 2005-03-31 10:20:30 -08:00
+++ b/arch/sparc64/kernel/kprobes.c 2005-03-31 10:20:30 -08:00
@@ -128,7 +128,7 @@
kprobe_status = KPROBE_HIT_ACTIVE;
current_kprobe = p;
- if (p->pre_handler(p, regs))
+ if (p->pre_handler && p->pre_handler(p, regs))
return 1;
ss_probe:
diff -Nru a/arch/x86_64/kernel/kprobes.c b/arch/x86_64/kernel/kprobes.c
--- a/arch/x86_64/kernel/kprobes.c 2005-03-31 10:20:30 -08:00
+++ b/arch/x86_64/kernel/kprobes.c 2005-03-31 10:20:30 -08:00
@@ -293,17 +293,16 @@
if (is_IF_modifier(p->ainsn.insn))
kprobe_saved_rflags &= ~IF_MASK;
- if (p->pre_handler(p, regs)) {
+ if (p->pre_handler && p->pre_handler(p, regs))
/* handler has already set things up, so skip ss setup */
return 1;
- }
- ss_probe:
+ss_probe:
prepare_singlestep(p, regs);
kprobe_status = KPROBE_HIT_SS;
return 1;
- no_kprobe:
+no_kprobe:
preempt_enable_no_resched();
return ret;
}
-
To unsubscribe from this list: send the line "unsubscribe bk-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at http://vger.kernel.org/majordomo-info.html