s390 kprobes: Align probe address
PATCH 1/1 s390 kprobes: Align probe address
[This patch applies to both linux and mm trees. Please send comments off list, thanks]
Running a probe on s390 with a probe address that is not 4 byte aligned results in a Kernel BUG. The problem is that the stura instruction used by swap_instruction requires the destination address to be 4 byte aligned. As stura only writes 4 bytes, aligning to the next 4 byte aligned address results in the breakpoint instruction being stored past the probe address. The fix is to align the address backward (to the previous 4 byte aligned address) and writing the two byte breakpoint instruction in the appropriate bytes.
Signed-off-by David Wilder <[email protected]>
------------------------
arch/s390/kernel/kprobes.c +1 -1
@@ -167,7 +167,7 @@ static int __kprobes swap_instruction(vo* shall not cross any page boundaries (vmalloc area!) when writing * the new instruction. */ - addr = (u32 *)ALIGN ((unsigned long )args->ptr,4 ); + addr = (u32 *)((unsigned long )args->ptr &-4UL );if ((unsigned long )args->ptr &2 ) instr = ((*addr) &0xffff0000 ) | args->new;else