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