[S390] kprobes: Align probe address.
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. Cc: Martin Schwidefsky <schwidefsky@de.ibm.com> Signed-off-by: David Wilder <dwilder@us.ibm.com> Signed-off-by: Heiko Carstens <heiko.carstens@de.ibm.com>
This commit is contained in:
parent
afbc1e994d
commit
b70842df77
|
@ -167,7 +167,7 @@ static int __kprobes swap_instruction(void *aref)
|
|||
* 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
|
||||
|
|
Loading…
Reference in New Issue