Rémi Bernon : server: Clear dr7 before setting other registers.

Alexandre Julliard julliard at winehq.org
Fri Oct 29 16:29:08 CDT 2021


Module: wine
Branch: master
Commit: 4db8cdc267efd62fc7349912fe352cf214c012f7
URL:    https://source.winehq.org/git/wine.git/?a=commit;h=4db8cdc267efd62fc7349912fe352cf214c012f7

Author: Rémi Bernon <rbernon at codeweavers.com>
Date:   Fri Oct 29 18:35:13 2021 +0200

server: Clear dr7 before setting other registers.

Resetting their length to make sure we pass alignment checks both for
their current values and for the new values we'll write.

Wine-Bug: https://bugs.winehq.org/show_bug.cgi?id=46472
Signed-off-by: Rémi Bernon <rbernon at codeweavers.com>
Signed-off-by: Alexandre Julliard <julliard at winehq.org>

---

 server/ptrace.c | 5 ++---
 1 file changed, 2 insertions(+), 3 deletions(-)

diff --git a/server/ptrace.c b/server/ptrace.c
index bcd0fe48f16..b9dd9e9539a 100644
--- a/server/ptrace.c
+++ b/server/ptrace.c
@@ -633,8 +633,7 @@ void set_thread_context( struct thread *thread, const context_t *context, unsign
     switch (context->machine)
     {
     case IMAGE_FILE_MACHINE_I386:
-        /* Linux 2.6.33+ does DR0-DR3 alignment validation, so it has to know LEN bits first */
-        if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(7), context->debug.i386_regs.dr7 & 0xffff0000 ) == -1) goto error;
+        if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(7), 0 ) == -1) goto error;
         if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(0), context->debug.i386_regs.dr0 ) == -1) goto error;
         if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(1), context->debug.i386_regs.dr1 ) == -1) goto error;
         if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(2), context->debug.i386_regs.dr2 ) == -1) goto error;
@@ -646,7 +645,7 @@ void set_thread_context( struct thread *thread, const context_t *context, unsign
         thread->system_regs |= SERVER_CTX_DEBUG_REGISTERS;
         break;
     case IMAGE_FILE_MACHINE_AMD64:
-        if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(7), context->debug.x86_64_regs.dr7 & 0xffff0000 ) == -1) goto error;
+        if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(7), 0 ) == -1) goto error;
         if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(0), context->debug.x86_64_regs.dr0 ) == -1) goto error;
         if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(1), context->debug.x86_64_regs.dr1 ) == -1) goto error;
         if (ptrace( PTRACE_POKEUSER, pid, DR_OFFSET(2), context->debug.x86_64_regs.dr2 ) == -1) goto error;




More information about the wine-cvs mailing list