diff options
author | Michael Neuling <mikey@neuling.org> | 2013-06-24 01:47:22 -0400 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2013-07-25 17:07:19 -0400 |
commit | b101957a5871ec616e18a8a6f0330d0e06a05754 (patch) | |
tree | 699aafaf6df6ae038ce24e97071dc36cd9faa935 /arch | |
parent | 0f4a56e16d5fc9028b62ba529177a3109513e111 (diff) |
powerpc/hw_brk: Fix setting of length for exact mode breakpoints
commit b0b0aa9c7faf94e92320eabd8a1786c7747e40a8 upstream.
The smallest match region for both the DABR and DAWR is 8 bytes, so the
kernel needs to filter matches when users want to look at regions smaller than
this.
Currently we set the length of PPC_BREAKPOINT_MODE_EXACT breakpoints to 8.
This is wrong as in exact mode we should only match on 1 address, hence the
length should be 1.
This ensures that the kernel will filter out any exact mode hardware breakpoint
matches on any addresses other than the requested one.
Signed-off-by: Michael Neuling <mikey@neuling.org>
Reported-by: Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/powerpc/kernel/ptrace.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/arch/powerpc/kernel/ptrace.c b/arch/powerpc/kernel/ptrace.c index 98c2fc198712..64f7bd5b1b0f 100644 --- a/arch/powerpc/kernel/ptrace.c +++ b/arch/powerpc/kernel/ptrace.c | |||
@@ -1449,7 +1449,9 @@ static long ppc_set_hwdebug(struct task_struct *child, | |||
1449 | */ | 1449 | */ |
1450 | if (bp_info->addr_mode == PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE) { | 1450 | if (bp_info->addr_mode == PPC_BREAKPOINT_MODE_RANGE_INCLUSIVE) { |
1451 | len = bp_info->addr2 - bp_info->addr; | 1451 | len = bp_info->addr2 - bp_info->addr; |
1452 | } else if (bp_info->addr_mode != PPC_BREAKPOINT_MODE_EXACT) { | 1452 | } else if (bp_info->addr_mode == PPC_BREAKPOINT_MODE_EXACT) |
1453 | len = 1; | ||
1454 | else { | ||
1453 | ptrace_put_breakpoints(child); | 1455 | ptrace_put_breakpoints(child); |
1454 | return -EINVAL; | 1456 | return -EINVAL; |
1455 | } | 1457 | } |