aboutsummaryrefslogtreecommitdiffstats
path: root/arch/ia64/kernel/kprobes.c
diff options
context:
space:
mode:
authorKeshavamurthy Anil S <anil.s.keshavamurthy@intel.com>2005-11-22 14:15:49 -0800
committerTony Luck <tony.luck@intel.com>2005-11-29 09:24:39 -0800
commit5a94bcfd2a18edcf368b3128c7df07b58e529932 (patch)
tree12e6240717e2dbdce0e157a097629b76d07afdae /arch/ia64/kernel/kprobes.c
parentb77dae5293efba42ea1ff04d410ee68e66d5b0cf (diff)
downloadkernel_samsung_smdk4412-5a94bcfd2a18edcf368b3128c7df07b58e529932.zip
kernel_samsung_smdk4412-5a94bcfd2a18edcf368b3128c7df07b58e529932.tar.gz
kernel_samsung_smdk4412-5a94bcfd2a18edcf368b3128c7df07b58e529932.tar.bz2
[IA64] Remove getting break_num by decoding instruction
break.b always sets cr.iim to 0 and the current code tries to get the break_num by decoding instruction. However, their seems to be a race condition while reading the regs->cr_iip, as on other cpu the break.b at regs->cr_iip might have been replaced with the original instruction as a result of unregister_kprobe() and hence decoding instruction to obtain break_num will result in wrong value in this case. Also includes changes to kprobes.c which now has to handle break number zero. Signed-off-by: Anil S Keshavamurthy <anil.s.keshavamurthy@intel.com> Signed-off-by: Tony Luck <tony.luck@intel.com>
Diffstat (limited to 'arch/ia64/kernel/kprobes.c')
-rw-r--r--arch/ia64/kernel/kprobes.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c
index 801eeae..2895d6e 100644
--- a/arch/ia64/kernel/kprobes.c
+++ b/arch/ia64/kernel/kprobes.c
@@ -740,7 +740,7 @@ int __kprobes kprobe_exceptions_notify(struct notifier_block *self,
switch(val) {
case DIE_BREAK:
/* err is break number from ia64_bad_break() */
- if (args->err == 0x80200 || args->err == 0x80300)
+ if (args->err == 0x80200 || args->err == 0x80300 || args->err == 0)
if (pre_kprobes_handler(args))
ret = NOTIFY_STOP;
break;