mirror of
https://github.com/DragonOS-Community/DragonOS.git
synced 2025-06-19 00:46:31 +00:00
bugfix: 修复无法sleep的问题以及进程处于block(true)状态时无法被信号唤醒&唤醒后不处理信号的问题 (#470)
This commit is contained in:
@ -374,6 +374,10 @@ ENTRY(syscall_64)
|
||||
|
||||
callq *%rdx //调用服务程序
|
||||
|
||||
// 将原本要返回的栈帧的栈指针传入do_signal的第一个参数
|
||||
movq %rsp, %rdi
|
||||
callq do_signal
|
||||
|
||||
cli
|
||||
|
||||
// === 恢复调用现场 ===
|
||||
|
@ -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() {
|
||||
|
Reference in New Issue
Block a user