• Frederic Weisbecker's avatar
    hw-breakpoint: Keep track of dr7 local enable bits · 326264a0
    Frederic Weisbecker authored
    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: default avatarMichael Stefaniuc <mstefani@redhat.com>
    Signed-off-by: default avatarFrederic Weisbecker <fweisbec@gmail.com>
    Acked-by: default avatarK.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>
    326264a0
ptrace.c 42.7 KB