powerpc/hw_brk: Fix off by one error when validating DAWR region end
authorMichael Neuling <mikey@neuling.org>
Mon, 1 Jul 2013 04:19:50 +0000 (14:19 +1000)
committerBenjamin Herrenschmidt <benh@kernel.crashing.org>
Mon, 1 Jul 2013 22:20:49 +0000 (08:20 +1000)
The Data Address Watchpoint Register (DAWR) on POWER8 can take a 512
byte range but this range must not cross a 512 byte boundary.

Unfortunately we were off by one when calculating the end of the region,
hence we were not allowing some breakpoint regions which were actually
valid.  This fixes this error.

Signed-off-by: Michael Neuling <mikey@neuling.org>
Reported-by: Edjunior Barbosa Machado <emachado@linux.vnet.ibm.com>
Cc: stable@vger.kernel.org # 3.9+
Signed-off-by: Benjamin Herrenschmidt <benh@kernel.crashing.org>
arch/powerpc/kernel/hw_breakpoint.c

index 1150ae7c22c310f9307ba5867775e37e9560092e..f0b47d1a6b0ebd92dddd3ed49275e40a361c72ea 100644 (file)
@@ -176,7 +176,7 @@ int arch_validate_hwbkpt_settings(struct perf_event *bp)
                length_max = 512 ; /* 64 doublewords */
                /* DAWR region can't cross 512 boundary */
                if ((bp->attr.bp_addr >> 10) != 
-                   ((bp->attr.bp_addr + bp->attr.bp_len) >> 10))
+                   ((bp->attr.bp_addr + bp->attr.bp_len - 1) >> 10))
                        return -EINVAL;
        }
        if (info->len >