[RFC Patch 2/2][Bugfix][x86][hw-breakpoint] Fix return-code tonotifier chain in hw_breakpoint_handler

From: K.Prasad
Date: Sat Dec 26 2009 - 13:28:46 EST


The hw-breakpoint handler will return NOTIFY_DONE for user-space breakpoints
to generate SIGTRAP signal (and not for kernel-space addresses).

Signed-off-by: K.Prasad <prasad@xxxxxxxxxxxxxxxxxx>
---
arch/x86/kernel/hw_breakpoint.c | 9 +++++++--
1 file changed, 7 insertions(+), 2 deletions(-)

Index: linux-2.6-tip/arch/x86/kernel/hw_breakpoint.c
===================================================================
--- linux-2.6-tip.orig/arch/x86/kernel/hw_breakpoint.c
+++ linux-2.6-tip/arch/x86/kernel/hw_breakpoint.c
@@ -502,8 +502,6 @@ static int __kprobes hw_breakpoint_handl
rcu_read_lock();

bp = per_cpu(bp_per_reg[i], cpu);
- if (bp)
- rc = NOTIFY_DONE;
/*
* Reset the 'i'th TRAP bit in dr6 to denote completion of
* exception handling
@@ -517,6 +515,13 @@ static int __kprobes hw_breakpoint_handl
rcu_read_unlock();
break;
}
+ /*
+ * Further processing in do_debug() is needed for a) user-space
+ * breakpoints (to generate signals) and b) when the system has
+ * taken exception due to multiple causes
+ */
+ if (bp->attr.bp_addr < TASK_SIZE)
+ rc = NOTIFY_DONE;

perf_bp_event(bp, args->regs);


--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/