diff options
author | Keshavamurthy Anil S <anil.s.keshavamurthy@intel.com> | 2005-11-22 17:15:49 -0500 |
---|---|---|
committer | Tony Luck <tony.luck@intel.com> | 2005-11-29 12:24:39 -0500 |
commit | 5a94bcfd2a18edcf368b3128c7df07b58e529932 (patch) | |
tree | 12e6240717e2dbdce0e157a097629b76d07afdae /arch/ia64/kernel/kprobes.c | |
parent | b77dae5293efba42ea1ff04d410ee68e66d5b0cf (diff) |
[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.c | 2 |
1 files changed, 1 insertions, 1 deletions
diff --git a/arch/ia64/kernel/kprobes.c b/arch/ia64/kernel/kprobes.c index 801eeaeaf3de..2895d6e6062f 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, | |||
740 | switch(val) { | 740 | switch(val) { |
741 | case DIE_BREAK: | 741 | case DIE_BREAK: |
742 | /* err is break number from ia64_bad_break() */ | 742 | /* err is break number from ia64_bad_break() */ |
743 | if (args->err == 0x80200 || args->err == 0x80300) | 743 | if (args->err == 0x80200 || args->err == 0x80300 || args->err == 0) |
744 | if (pre_kprobes_handler(args)) | 744 | if (pre_kprobes_handler(args)) |
745 | ret = NOTIFY_STOP; | 745 | ret = NOTIFY_STOP; |
746 | break; | 746 | break; |