From 4c1f6a4e321eb9b7ed86a18424fdea2f98a60439 Mon Sep 17 00:00:00 2001 From: Marsman1996 Date: Fri, 16 Aug 2024 14:24:15 +0800 Subject: [PATCH] Fix panic in futex and rt_sigprocmask --- kernel/aster-nix/src/syscall/futex.rs | 14 +++++++------- kernel/aster-nix/src/syscall/rt_sigprocmask.rs | 2 +- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/kernel/aster-nix/src/syscall/futex.rs b/kernel/aster-nix/src/syscall/futex.rs index 71d10a0ec..904ddd500 100644 --- a/kernel/aster-nix/src/syscall/futex.rs +++ b/kernel/aster-nix/src/syscall/futex.rs @@ -19,7 +19,7 @@ pub fn sys_futex( ctx: &Context, ) -> Result { // FIXME: we current ignore futex flags - let (futex_op, futex_flags) = futex_op_and_flags_from_u32(futex_op as _).unwrap(); + let (futex_op, futex_flags) = futex_op_and_flags_from_u32(futex_op as _)?; debug!( "futex_op = {:?}, futex_flags = {:?}, futex_addr = 0x{:x}", futex_op, futex_flags, futex_addr @@ -42,24 +42,24 @@ pub fn sys_futex( let res = match futex_op { FutexOp::FUTEX_WAIT => { - let timeout = get_futex_timeout(utime_addr).expect("Invalid time addr"); + let timeout = get_futex_timeout(utime_addr)?; futex_wait(futex_addr as _, futex_val as _, &timeout).map(|_| 0) } FutexOp::FUTEX_WAIT_BITSET => { - let timeout = get_futex_timeout(utime_addr).expect("Invalid time addr"); + let timeout = get_futex_timeout(utime_addr)?; futex_wait_bitset(futex_addr as _, futex_val as _, &timeout, bitset as _).map(|_| 0) } FutexOp::FUTEX_WAKE => { - let max_count = get_futex_val(futex_val as i32).expect("Invalid futex val"); + let max_count = get_futex_val(futex_val as i32)?; futex_wake(futex_addr as _, max_count).map(|count| count as isize) } FutexOp::FUTEX_WAKE_BITSET => { - let max_count = get_futex_val(futex_val as i32).expect("Invalid futex val"); + let max_count = get_futex_val(futex_val as i32)?; futex_wake_bitset(futex_addr as _, max_count, bitset as _).map(|count| count as isize) } FutexOp::FUTEX_REQUEUE => { - let max_nwakes = get_futex_val(futex_val as i32).expect("Invalid futex val"); - let max_nrequeues = get_futex_val(utime_addr as i32).expect("Invalid utime addr"); + let max_nwakes = get_futex_val(futex_val as i32)?; + let max_nrequeues = get_futex_val(utime_addr as i32)?; futex_requeue( futex_addr as _, max_nwakes, diff --git a/kernel/aster-nix/src/syscall/rt_sigprocmask.rs b/kernel/aster-nix/src/syscall/rt_sigprocmask.rs index 720df286c..f7399edb1 100644 --- a/kernel/aster-nix/src/syscall/rt_sigprocmask.rs +++ b/kernel/aster-nix/src/syscall/rt_sigprocmask.rs @@ -26,7 +26,7 @@ pub fn sys_rt_sigprocmask( if sigset_size != 8 { error!("sigset size is not equal to 8"); } - do_rt_sigprocmask(mask_op, set_ptr, oldset_ptr, ctx).unwrap(); + do_rt_sigprocmask(mask_op, set_ptr, oldset_ptr, ctx)?; Ok(SyscallReturn::Return(0)) }