Update and re-enable ntdll-Syscall_Emulation patchset.

Thanks DodoGTA from LGD discord for spotting related upstream
ABI change and suggesting a part of the fix.
This commit is contained in:
Paul Gofman 2023-08-18 20:19:25 -06:00
parent cc31308c32
commit 0b96046f15
2 changed files with 18 additions and 12 deletions

View File

@ -1,18 +1,18 @@
From a20d7bb78dc0d2d134cfe6461c117fea1a5753ed Mon Sep 17 00:00:00 2001
From 45df10c65cee279caac2184919c81e6b473bd3f8 Mon Sep 17 00:00:00 2001
From: Paul Gofman <pgofman@codeweavers.com>
Date: Tue, 14 Jul 2020 15:00:34 +0300
Subject: [PATCH] ntdll: Support x86_64 syscall emulation.
---
configure.ac | 1 +
dlls/ntdll/unix/signal_x86_64.c | 185 ++++++++++++++++++++++++++++++++
2 files changed, 186 insertions(+)
dlls/ntdll/unix/signal_x86_64.c | 192 ++++++++++++++++++++++++++++++++
2 files changed, 193 insertions(+)
diff --git a/configure.ac b/configure.ac
index a8c1d1522fe..2fd9f7a497d 100644
index b759c57f4a0..b72e5c59274 100644
--- a/configure.ac
+++ b/configure.ac
@@ -427,6 +427,7 @@ AC_CHECK_HEADERS(\
@@ -420,6 +420,7 @@ AC_CHECK_HEADERS(\
linux/ioctl.h \
linux/major.h \
linux/param.h \
@ -21,7 +21,7 @@ index a8c1d1522fe..2fd9f7a497d 100644
linux/types.h \
linux/ucdrom.h \
diff --git a/dlls/ntdll/unix/signal_x86_64.c b/dlls/ntdll/unix/signal_x86_64.c
index bf528226462..a5cd26b7ea0 100644
index 0204139631f..117c238cf44 100644
--- a/dlls/ntdll/unix/signal_x86_64.c
+++ b/dlls/ntdll/unix/signal_x86_64.c
@@ -27,6 +27,7 @@
@ -56,7 +56,7 @@ index bf528226462..a5cd26b7ea0 100644
#include "ntstatus.h"
#define WIN32_NO_STATUS
#include "windef.h"
@@ -1821,6 +1832,179 @@ static inline DWORD is_privileged_instr( CONTEXT *context )
@@ -1773,6 +1784,186 @@ static inline DWORD is_privileged_instr( CONTEXT *context )
return 0;
}
@ -70,6 +70,13 @@ index bf528226462..a5cd26b7ea0 100644
+ TRACE_(seh)("SIGSYS, rax %#llx, rip %#llx.\n", ctx->uc_mcontext.gregs[REG_RAX],
+ ctx->uc_mcontext.gregs[REG_RIP]);
+
+ if (ctx->uc_mcontext.gregs[REG_RAX] == 0xffff)
+ {
+ /* Test syscall from the Unix side (install_bpf). */
+ ctx->uc_mcontext.gregs[REG_RAX] = STATUS_INVALID_PARAMETER;
+ return;
+ }
+
+ frame->rip = ctx->uc_mcontext.gregs[REG_RIP] + 0xb;
+ frame->rcx = ctx->uc_mcontext.gregs[REG_RIP];
+ frame->eflags = ctx->uc_mcontext.gregs[REG_EFL];
@ -129,7 +136,7 @@ index bf528226462..a5cd26b7ea0 100644
+# endif
+ static const BYTE syscall_trap_test[] =
+ {
+ 0x48, 0x89, 0xc8, /* mov %rcx, %rax */
+ 0x48, 0x89, 0xf8, /* mov %rdi, %rax */
+ 0x0f, 0x05, /* syscall */
+ 0xc3, /* retq */
+ };
@ -155,7 +162,7 @@ index bf528226462..a5cd26b7ea0 100644
+ BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_TRAP),
+ BPF_STMT(BPF_RET | BPF_K, SECCOMP_RET_ALLOW),
+ };
+ long (WINAPI *test_syscall)(long sc_number);
+ long (*test_syscall)(long sc_number);
+ struct syscall_frame *frame = amd64_thread_data()->syscall_frame;
+ struct sock_fprog prog;
+ NTSTATUS status;
@ -236,7 +243,7 @@ index bf528226462..a5cd26b7ea0 100644
/***********************************************************************
* handle_interrupt
@@ -2520,6 +2704,7 @@ void signal_init_process(void)
@@ -2448,6 +2639,7 @@ void signal_init_process(void)
if (sigaction( SIGSEGV, &sig_act, NULL ) == -1) goto error;
if (sigaction( SIGILL, &sig_act, NULL ) == -1) goto error;
if (sigaction( SIGBUS, &sig_act, NULL ) == -1) goto error;
@ -245,5 +252,5 @@ index bf528226462..a5cd26b7ea0 100644
error:
--
2.40.1
2.41.0

View File

@ -1,2 +1 @@
Fixes: [48291] Detroit: Become Human crashes on launch
Disabled: True