Patch "um: Fix PTRACE_POKEUSER on x86_64" has been added to the 4.4-stable tree
Subsystems (4)
This is a note to let you know that I've just added the patch titled
um: Fix PTRACE_POKEUSER on x86_64
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
um-fix-ptrace_pokeuser-on-x86_64.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
9abc74a22d85ab29cef9896a2582a530da7e79bfMon Sep 17 00:00:00 2001
From: Richard Weinberger <[email protected]>
Date: Sat, 1 Apr 2017 00:41:57 +0200
Subject: um: Fix PTRACE_POKEUSER on x86_64
From: Richard Weinberger <[email protected]>
commit 9abc74a22d85ab29cef9896a2582a530da7e79bf upstream.
This is broken since ever but sadly nobody noticed. Recent versions of GDB set DR_CONTROL unconditionally and UML dies due to a heap corruption. It turns out that the PTRACE_POKEUSER was copy&pasted from i386 and assumes that addresses are 4 bytes long.
Fix that by using 8 as address size in the calculation.
--- arch/x86/um/ptrace_64.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)
arch/x86/um/ptrace_64.c +1 -1
@@ -121,7 +121,7 @@ int poke_user(struct task_struct *child, else if ((addr >= offsetof(struct user, u_debugreg[0])) && (addr <= offsetof(struct user, u_debugreg[7]))) { addr -= offsetof(struct user, u_debugreg[0]); - addr = addr >>2 ; + addr = addr >>3 ;if ((addr ==4 ) || (addr ==5 ))return -EIO ; child->thread.arch.debugregs[addr] = data;
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/um-fix-ptrace_pokeuser-on-x86_64.patch