[prev in list] [next in list] [prev in thread] [next in thread] 

List:       wine-devel
Subject:    [PATCH 1/2] server: Clear dr7 before setting other registers.
From:       Rémi Bernon <rbernon () codeweavers ! com>
Date:       2021-10-29 16:35:13
Message-ID: 20211029163514.2753152-1-rbernon () codeweavers ! com
[Download RAW message or body]

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@codeweavers.com>
---
 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;
-- 
2.33.0


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic