All of lore.kernel.org
 help / color / mirror / Atom feed
* [patch] s390 kprobes: Align probe address
@ 2007-03-22  1:09 David Wilder
  0 siblings, 0 replies; only message in thread
From: David Wilder @ 2007-03-22  1:09 UTC (permalink / raw)
  To: linux-kernel, akpm, schwidefsky

[-- Attachment #1: Type: text/plain, Size: 89 bytes --]

[This patch applies to both linux and mm trees.  Please send comments 
off list, thanks]

[-- Attachment #2: s390_swap_instruction_align.patch --]
[-- Type: text/x-patch, Size: 1121 bytes --]

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 <dwilder@us.ibm.com>
------------------------
diff --git a/arch/s390/kernel/kprobes.c b/arch/s390/kernel/kprobes.c
index 8af549e..993f353 100644
--- a/arch/s390/kernel/kprobes.c
+++ b/arch/s390/kernel/kprobes.c
@@ -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

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2007-03-22  0:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-03-22  1:09 [patch] s390 kprobes: Align probe address David Wilder

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.