From 4621cd674d0a95b08e2f9bf8a7b69f6990cf5f2b Mon Sep 17 00:00:00 2001 From: uuuvn Date: Thu, 4 May 2023 15:58:05 +0400 Subject: [PATCH] Fix kernel DoS via sigreturn from non-signal context --- src/syscall/process.rs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/syscall/process.rs b/src/syscall/process.rs index fb572096e8..f7b1186dc4 100644 --- a/src/syscall/process.rs +++ b/src/syscall/process.rs @@ -381,8 +381,12 @@ pub fn sigreturn() -> Result { let contexts = context::contexts(); let context_lock = contexts.current().ok_or(Error::new(ESRCH))?; let mut context = context_lock.write(); - context.ksig_restore = true; - context.block("sigreturn"); + if context.ksig.is_some() { + context.ksig_restore = true; + context.block("sigreturn"); + } else { + return Err(Error::new(EINVAL)); + } } let _ = unsafe { context::switch() };