From d9b9a94c4f431a8e74b7dc357c282bceabfbda96 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?J=C3=A9r=C3=B4me=20Duval?= Date: Tue, 1 Jun 2021 21:10:37 +0200 Subject: [PATCH] kernel/x86: disable trap and direction flag on signal handler entry https://github.com/freebsd/freebsd-src/commit/846ac2266b625d13ce6d1fc9370c3c3cc2a960bb https://github.com/freebsd/freebsd-src/commit/22eca0bf45fa506e27a58007cfc70f08ce4f3538 Change-Id: I19620d15372572ce4498d9145fd6b0df50f91bb9 Reviewed-on: https://review.haiku-os.org/c/haiku/+/4043 Reviewed-by: X512 Reviewed-by: Adrien Destugues Tested-by: Commit checker robot --- src/system/kernel/arch/x86/32/thread.cpp | 1 + src/system/kernel/arch/x86/64/thread.cpp | 1 + 2 files changed, 2 insertions(+) diff --git a/src/system/kernel/arch/x86/32/thread.cpp b/src/system/kernel/arch/x86/32/thread.cpp index aa9ce0d42c..0a5e05b3fe 100644 --- a/src/system/kernel/arch/x86/32/thread.cpp +++ b/src/system/kernel/arch/x86/32/thread.cpp @@ -360,6 +360,7 @@ arch_setup_signal_frame(Thread* thread, struct sigaction* action, frame->ip = x86_get_user_signal_handler_wrapper( (action->sa_flags & SA_BEOS_COMPATIBLE_HANDLER) != 0, thread->team->commpage_address); + frame->flags &= ~(X86_EFLAGS_TRAP | X86_EFLAGS_DIRECTION); return B_OK; } diff --git a/src/system/kernel/arch/x86/64/thread.cpp b/src/system/kernel/arch/x86/64/thread.cpp index 3cf8ee6e32..b1c94c813b 100644 --- a/src/system/kernel/arch/x86/64/thread.cpp +++ b/src/system/kernel/arch/x86/64/thread.cpp @@ -376,6 +376,7 @@ arch_setup_signal_frame(Thread* thread, struct sigaction* action, + (addr_t)commPageAddress; clear_ac(); frame->di = (addr_t)userSignalFrameData; + frame->flags &= ~(uint64)(X86_EFLAGS_TRAP | X86_EFLAGS_DIRECTION); return B_OK; }