From 4c7f8c636938ef5aba07956a8a8dcc1975727ac5 Mon Sep 17 00:00:00 2001 From: Xavier L'Heureux Date: Sun, 11 Aug 2019 14:30:00 -0400 Subject: [PATCH 1/5] test signals --- tests/Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tests/Makefile b/tests/Makefile index 388720a458..4f5e83f67b 100644 --- a/tests/Makefile +++ b/tests/Makefile @@ -96,11 +96,11 @@ EXPECT_NAMES=\ wchar/wcsrchr \ wchar/wcstod \ wchar/wcstok \ - wchar/wcstol + wchar/wcstol \ + signal # TODO: Fix these # netdb/getaddrinfo \ # netdb/netdb \ - # signal # Binaries that may generate varied output NAMES=\ From 225583230f1d73982092048e2dd8686a4bd2cb74 Mon Sep 17 00:00:00 2001 From: Xavier L'Heureux Date: Sun, 11 Aug 2019 18:08:11 -0400 Subject: [PATCH 2/5] Test --- a.out | Bin 0 -> 16896 bytes src/header/signal/mod.rs | 19 ++++++++++++------- src/platform/linux/signal.rs | 1 + src/platform/redox/signal.rs | 8 +++++++- tests/expected/signal.stderr | 0 tests/expected/signal.stdout | 3 +++ tests/signal.c | 6 +++++- 7 files changed, 28 insertions(+), 9 deletions(-) create mode 100755 a.out create mode 100644 tests/expected/signal.stderr create mode 100644 tests/expected/signal.stdout diff --git a/a.out b/a.out new file mode 100755 index 0000000000000000000000000000000000000000..adf85459c012415c6c41c9a396dc7059afc6598f GIT binary patch literal 16896 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, pub sa_mask: sigset_t, + pub sa_flags: c_ulong, + pub sa_restorer: Option, } #[repr(C)] @@ -93,7 +93,11 @@ pub unsafe extern "C" fn sigaction( } else { None }; - Sys::sigaction(sig, act_opt.map_or(ptr::null_mut(), |x| &x), oact) + println!("sig => {:?}", act_opt); + println!("osig => {:?}", (*oact)); + let out = Sys::sigaction(sig, act_opt.map_or(ptr::null_mut(), |x| &x), oact); + println!("aosig => {:?}", (*oact).sa_handler); + out } #[no_mangle] @@ -194,11 +198,12 @@ extern "C" { } #[no_mangle] -pub extern "C" fn signal(sig: c_int, func: extern "C" fn(c_int)) -> extern "C" fn(c_int) { +pub extern "C" fn signal(sig: c_int, func: Option) -> Option { + println!("{:?}", func); let sa = sigaction { sa_handler: func, sa_flags: SA_RESTART as c_ulong, - sa_restorer: __restore_rt, + sa_restorer: Some(__restore_rt), sa_mask: sigset_t::default(), }; let mut old_sa = unsafe { mem::uninitialized() }; diff --git a/src/platform/linux/signal.rs b/src/platform/linux/signal.rs index 6980dedcc0..469b881d66 100644 --- a/src/platform/linux/signal.rs +++ b/src/platform/linux/signal.rs @@ -36,6 +36,7 @@ impl PalSignal for Sys { } unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int { + println!("in: {:?}", (*act)); e(syscall!( RT_SIGACTION, sig, diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 8a275af3b8..893f38c45d 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -110,8 +110,10 @@ impl PalSignal for Sys { None } else { let m = (*act).sa_mask; + let sa_handler = mem::transmute((*act).sa_handler); + println!("signal called with {:x}", unsafe { mem::transmute::<_, usize>(sa_handler) }); Some(syscall::SigAction { - sa_handler: mem::transmute((*act).sa_handler), + sa_handler, sa_mask: [m as u64, 0], sa_flags: syscall::SigActionFlags::from_bits((*act).sa_flags as usize) .expect("sigaction: invalid bit pattern"), @@ -122,17 +124,21 @@ impl PalSignal for Sys { } else { Some(syscall::SigAction::default()) }; + println!("before : {:?}", new_opt); + println!("before old : {:?}", old_opt); let ret = e(syscall::sigaction( sig as usize, new_opt.as_ref(), old_opt.as_mut(), )) as c_int; + println!("after : {:?}", old_opt); if let Some(old) = old_opt { (*oact).sa_handler = mem::transmute(old.sa_handler); let m = old.sa_mask; (*oact).sa_mask = m[0] as c_ulong; (*oact).sa_flags = old.sa_flags.bits() as c_ulong; } + println!("after : {:?}", oact); ret } diff --git a/tests/expected/signal.stderr b/tests/expected/signal.stderr new file mode 100644 index 0000000000..e69de29bb2 diff --git a/tests/expected/signal.stdout b/tests/expected/signal.stdout new file mode 100644 index 0000000000..7d184e34c8 --- /dev/null +++ b/tests/expected/signal.stdout @@ -0,0 +1,3 @@ +Raising... +Signal handler called! +Raised. diff --git a/tests/signal.c b/tests/signal.c index b192ad397d..1176679e23 100644 --- a/tests/signal.c +++ b/tests/signal.c @@ -11,8 +11,12 @@ void handler(int sig) { } int main(void) { - void (*signal_status)(int) = signal(SIGUSR1, &handler); + printf("handler: %x\n", handler); + void (*signal_status)(int) = signal(SIGUSR1, handler); ERROR_IF(signal, signal_status, == SIG_ERR); + signal_status = signal(SIGUSR1, handler); + ERROR_IF(signal, signal_status, == SIG_ERR); + printf("out: %x\n", signal_status); puts("Raising..."); From 0a558de76c7de3efa7b969723bdfea06221f42d9 Mon Sep 17 00:00:00 2001 From: Xavier L'Heureux Date: Sun, 11 Aug 2019 20:47:18 -0400 Subject: [PATCH 3/5] Fix reference getting moved The sigaction handler called map on an option, creating a pointer to a move value. This in turned caused UB for signal handlers. Avoid using pointers directly, and instead prefer references. --- src/header/signal/mod.rs | 30 +++++++++++++----------------- src/platform/linux/signal.rs | 19 ++++++++++--------- src/platform/pal/signal.rs | 2 +- src/platform/redox/signal.rs | 6 ++++-- tests/signal.c | 4 +--- 5 files changed, 29 insertions(+), 32 deletions(-) diff --git a/src/header/signal/mod.rs b/src/header/signal/mod.rs index 26bd0dbfd3..53a5b46014 100644 --- a/src/header/signal/mod.rs +++ b/src/header/signal/mod.rs @@ -1,6 +1,6 @@ //! signal implementation for Redox, following http://pubs.opengroup.org/onlinepubs/7908799/xsh/signal.h.html -use core::{mem, ptr}; +use core::mem; use cbitset::BitSet; @@ -21,9 +21,9 @@ pub mod sys; type SigSet = BitSet<[c_ulong; 1]>; -pub (crate) const SIG_DFL: usize = 0; -pub (crate) const SIG_IGN: usize = 1; -pub (crate) const SIG_ERR: isize = -1; +pub(crate) const SIG_DFL: usize = 0; +pub(crate) const SIG_IGN: usize = 1; +pub(crate) const SIG_ERR: isize = -1; pub const SIG_BLOCK: c_int = 0; pub const SIG_UNBLOCK: c_int = 1; @@ -86,18 +86,12 @@ pub unsafe extern "C" fn sigaction( act: *const sigaction, oact: *mut sigaction, ) -> c_int { - let act_opt = if !act.is_null() { - let mut act_clone = (*act).clone(); + let act_opt = act.as_ref().map(|act| { + let mut act_clone = act.clone(); act_clone.sa_flags |= SA_RESTORER as c_ulong; - Some(act_clone) - } else { - None - }; - println!("sig => {:?}", act_opt); - println!("osig => {:?}", (*oact)); - let out = Sys::sigaction(sig, act_opt.map_or(ptr::null_mut(), |x| &x), oact); - println!("aosig => {:?}", (*oact).sa_handler); - out + act_clone + }); + Sys::sigaction(sig, act_opt.as_ref(), oact.as_mut()) } #[no_mangle] @@ -198,8 +192,10 @@ extern "C" { } #[no_mangle] -pub extern "C" fn signal(sig: c_int, func: Option) -> Option { - println!("{:?}", func); +pub extern "C" fn signal( + sig: c_int, + func: Option, +) -> Option { let sa = sigaction { sa_handler: func, sa_flags: SA_RESTART as c_ulong, diff --git a/src/platform/linux/signal.rs b/src/platform/linux/signal.rs index 469b881d66..d8bf311c62 100644 --- a/src/platform/linux/signal.rs +++ b/src/platform/linux/signal.rs @@ -35,15 +35,16 @@ impl PalSignal for Sys { e(unsafe { syscall!(SETITIMER, which, new, old) }) as c_int } - unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int { - println!("in: {:?}", (*act)); - e(syscall!( - RT_SIGACTION, - sig, - act, - oact, - mem::size_of::() - )) as c_int + fn sigaction(sig: c_int, act: Option<&sigaction>, oact: Option<&mut sigaction>) -> c_int { + e(unsafe { + syscall!( + RT_SIGACTION, + sig, + act.map_or_else(core::ptr::null, |x| x as *const _), + oact.map_or_else(core::ptr::null_mut, |x| x as *mut _), + mem::size_of::() + ) + }) as c_int } fn sigaltstack(ss: *const stack_t, old_ss: *mut stack_t) -> c_int { diff --git a/src/platform/pal/signal.rs b/src/platform/pal/signal.rs index b2ebf71aca..b432f57922 100644 --- a/src/platform/pal/signal.rs +++ b/src/platform/pal/signal.rs @@ -15,7 +15,7 @@ pub trait PalSignal: Pal { fn setitimer(which: c_int, new: *const itimerval, old: *mut itimerval) -> c_int; - unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int; + fn sigaction(sig: c_int, act: Option<&sigaction>, oact: Option<&mut sigaction>) -> c_int; fn sigaltstack(ss: *const stack_t, old_ss: *mut stack_t) -> c_int; diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 893f38c45d..1b945762cd 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -111,7 +111,9 @@ impl PalSignal for Sys { } else { let m = (*act).sa_mask; let sa_handler = mem::transmute((*act).sa_handler); - println!("signal called with {:x}", unsafe { mem::transmute::<_, usize>(sa_handler) }); + println!("signal called with {:x}", unsafe { + mem::transmute::<_, usize>(sa_handler) + }); Some(syscall::SigAction { sa_handler, sa_mask: [m as u64, 0], @@ -138,7 +140,7 @@ impl PalSignal for Sys { (*oact).sa_mask = m[0] as c_ulong; (*oact).sa_flags = old.sa_flags.bits() as c_ulong; } - println!("after : {:?}", oact); + println!("after : {:?}", (*oact)); ret } diff --git a/tests/signal.c b/tests/signal.c index 1176679e23..b322201b8c 100644 --- a/tests/signal.c +++ b/tests/signal.c @@ -11,12 +11,10 @@ void handler(int sig) { } int main(void) { - printf("handler: %x\n", handler); void (*signal_status)(int) = signal(SIGUSR1, handler); ERROR_IF(signal, signal_status, == SIG_ERR); signal_status = signal(SIGUSR1, handler); - ERROR_IF(signal, signal_status, == SIG_ERR); - printf("out: %x\n", signal_status); + ERROR_IF(signal, signal_status, != handler); puts("Raising..."); From f2357390e9b028ce1497bd28656d15cff4534fc4 Mon Sep 17 00:00:00 2001 From: Xavier L'Heureux Date: Sun, 11 Aug 2019 21:06:47 -0400 Subject: [PATCH 4/5] Fix redox's implementation --- src/platform/redox/signal.rs | 34 ++++++++++++++-------------------- 1 file changed, 14 insertions(+), 20 deletions(-) diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 1b945762cd..6e1a22deaa 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -105,27 +105,21 @@ impl PalSignal for Sys { 0 } - unsafe fn sigaction(sig: c_int, act: *const sigaction, oact: *mut sigaction) -> c_int { - let new_opt = if act.is_null() { - None - } else { - let m = (*act).sa_mask; - let sa_handler = mem::transmute((*act).sa_handler); + fn sigaction(sig: c_int, act: Option<&sigaction>, oact: Option<&mut sigaction>) -> c_int { + let new_opt = act.map(|act| { + let m = act.sa_mask; + let sa_handler = unsafe { mem::transmute(act.sa_handler) }; println!("signal called with {:x}", unsafe { mem::transmute::<_, usize>(sa_handler) }); - Some(syscall::SigAction { + syscall::SigAction { sa_handler, sa_mask: [m as u64, 0], - sa_flags: syscall::SigActionFlags::from_bits((*act).sa_flags as usize) + sa_flags: syscall::SigActionFlags::from_bits(act.sa_flags as usize) .expect("sigaction: invalid bit pattern"), - }) - }; - let mut old_opt = if oact.is_null() { - None - } else { - Some(syscall::SigAction::default()) - }; + } + }); + let mut old_opt = oact.as_ref().map(|_| syscall::SigAction::default()); println!("before : {:?}", new_opt); println!("before old : {:?}", old_opt); let ret = e(syscall::sigaction( @@ -134,13 +128,13 @@ impl PalSignal for Sys { old_opt.as_mut(), )) as c_int; println!("after : {:?}", old_opt); - if let Some(old) = old_opt { - (*oact).sa_handler = mem::transmute(old.sa_handler); + if let (Some(old), Some(oact)) = (old_opt, oact) { + println!("after : {:?}", oact); + oact.sa_handler = unsafe { mem::transmute(old.sa_handler) }; let m = old.sa_mask; - (*oact).sa_mask = m[0] as c_ulong; - (*oact).sa_flags = old.sa_flags.bits() as c_ulong; + oact.sa_mask = m[0] as c_ulong; + oact.sa_flags = old.sa_flags.bits() as c_ulong; } - println!("after : {:?}", (*oact)); ret } From 579955556625d6b2d1fd3406518a447049941cdf Mon Sep 17 00:00:00 2001 From: Xavier L'Heureux Date: Sun, 11 Aug 2019 21:15:58 -0400 Subject: [PATCH 5/5] Remove print statements --- a.out | Bin 16896 -> 0 bytes src/header/signal/mod.rs | 2 +- src/platform/redox/signal.rs | 7 ------- 3 files changed, 1 insertion(+), 8 deletions(-) delete mode 100755 a.out diff --git a/a.out b/a.out deleted file mode 100755 index adf85459c012415c6c41c9a396dc7059afc6598f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16896 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, - pub sa_mask: sigset_t, pub sa_flags: c_ulong, pub sa_restorer: Option, + pub sa_mask: sigset_t, } #[repr(C)] diff --git a/src/platform/redox/signal.rs b/src/platform/redox/signal.rs index 6e1a22deaa..6032a37fcf 100644 --- a/src/platform/redox/signal.rs +++ b/src/platform/redox/signal.rs @@ -109,9 +109,6 @@ impl PalSignal for Sys { let new_opt = act.map(|act| { let m = act.sa_mask; let sa_handler = unsafe { mem::transmute(act.sa_handler) }; - println!("signal called with {:x}", unsafe { - mem::transmute::<_, usize>(sa_handler) - }); syscall::SigAction { sa_handler, sa_mask: [m as u64, 0], @@ -120,16 +117,12 @@ impl PalSignal for Sys { } }); let mut old_opt = oact.as_ref().map(|_| syscall::SigAction::default()); - println!("before : {:?}", new_opt); - println!("before old : {:?}", old_opt); let ret = e(syscall::sigaction( sig as usize, new_opt.as_ref(), old_opt.as_mut(), )) as c_int; - println!("after : {:?}", old_opt); if let (Some(old), Some(oact)) = (old_opt, oact) { - println!("after : {:?}", oact); oact.sa_handler = unsafe { mem::transmute(old.sa_handler) }; let m = old.sa_mask; oact.sa_mask = m[0] as c_ulong;