]> git.baikalelectronics.ru Git - kernel.git/commit
hw-breakpoint: Keep track of dr7 local enable bits
authorFrederic Weisbecker <fweisbec@gmail.com>
Thu, 18 Feb 2010 17:24:18 +0000 (18:24 +0100)
committerFrederic Weisbecker <fweisbec@gmail.com>
Fri, 19 Feb 2010 18:06:48 +0000 (19:06 +0100)
commiteeb160c38bd20206993f0c50bed52575d537c4a3
treef2162ce368a6cd15cc4e54149cd25c0e974a8adf
parent3d15e11678a4792a8c6f1f1cb64a5e90d79b5bcd
hw-breakpoint: Keep track of dr7 local enable bits

When the user enables breakpoints through dr7, he can choose
between "local" or "global" enable bits but given how linux is
implemented, both have the same effect.

That said we don't keep track how the user enabled the breakpoints
so when the user requests the dr7 value, we only translate the
"enabled" status using the global enabled bits. It means that if
the user enabled a breakpoint using the local enabled bit, reading
back dr7 will set the global bit and clear the local one.

Apps like Wine expect a full dr7 POKEUSER/PEEKUSER match for emulated
softwares that implement old reverse engineering protection schemes.

We fix that by keeping track of the whole dr7 value given by the user
in the thread structure to drop this bug. We'll think about
something more proper later.

This fixes a 2.6.32 - 2.6.33-x ptrace regression.

Reported-and-tested-by: Michael Stefaniuc <mstefani@redhat.com>
Signed-off-by: Frederic Weisbecker <fweisbec@gmail.com>
Acked-by: K.Prasad <prasad@linux.vnet.ibm.com>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: Maneesh Soni <maneesh@linux.vnet.ibm.com>
Cc: Alexandre Julliard <julliard@winehq.org>
Cc: Rafael J. Wysocki <rjw@sisk.pl>
Cc: Maciej Rutecki <maciej.rutecki@gmail.com>
arch/x86/include/asm/processor.h
arch/x86/kernel/ptrace.c