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

Reply via email to