bugfix: 修复无法sleep的问题以及进程处于block(true)状态时无法被信号唤醒&唤醒后不处理信号的问题 (#470)

This commit is contained in:
LoGin
2023-12-19 11:56:14 +08:00
committed by GitHub
parent 24ff1faffb
commit 8612b6ce7a
8 changed files with 64 additions and 36 deletions

View File

@ -374,6 +374,10 @@ ENTRY(syscall_64)
callq *%rdx //
// do_signal
movq %rsp, %rdi
callq do_signal
cli
// === ===

View File

@ -495,7 +495,7 @@ impl SignalArch for X86_64SignalArch {
}
fn sys_rt_sigreturn(trap_frame: &mut TrapFrame) -> u64 {
let frame = (trap_frame.rsp as usize) as *mut SigFrame;
let frame = (trap_frame.rsp as usize - size_of::<u64>()) as *mut SigFrame;
// 如果当前的rsp不来自用户态则认为产生了错误或被SROP攻击
if UserBufferWriter::new(frame, size_of::<SigFrame>(), true).is_err() {