UE: Properly align stack for signal handlers

This issue was also present in the kernel, the description of which is
provided in an identically titled commit.

Note that this couldn't have affected any programs running in
UserspaceEmulator as we don't support SSE instructions, and don't seem
to raise faults under any conditions.
This commit is contained in:
Daniel Bertalan 2021-10-24 18:11:36 +02:00 committed by Andreas Kling
parent db71c36657
commit 0a748de1a0
Notes: sideshowbarker 2024-07-18 01:56:16 +09:00

View File

@ -602,7 +602,7 @@ void Emulator::dispatch_one_pending_signal()
auto old_esp = m_cpu.esp();
u32 stack_alignment = (m_cpu.esp().value() - 56) % 16;
u32 stack_alignment = (m_cpu.esp().value() - 52) % 16;
m_cpu.set_esp(shadow_wrap_as_initialized(m_cpu.esp().value() - stack_alignment));
m_cpu.push32(shadow_wrap_as_initialized(m_cpu.eflags()));
@ -621,10 +621,11 @@ void Emulator::dispatch_one_pending_signal()
m_cpu.push32(shadow_wrap_as_initialized((u32)signum));
m_cpu.push32(shadow_wrap_as_initialized(handler.handler));
m_cpu.push32(shadow_wrap_as_initialized(0u));
VERIFY((m_cpu.esp().value() % 16) == 0);
m_cpu.push32(shadow_wrap_as_initialized(0u));
m_cpu.set_eip(m_signal_trampoline);
}