summaryrefslogtreecommitdiff
path: root/src/signal
AgeCommit message (Collapse)AuthorLines
2011-03-24overhaul cancellation to fix resource leaks and dangerous behavior with signalsRich Felker-0/+2
this commit addresses two issues: 1. a race condition, whereby a cancellation request occurring after a syscall returned from kernelspace but before the subsequent CANCELPT_END would cause cancellable resource-allocating syscalls (like open) to leak resources. 2. signal handlers invoked while the thread was blocked at a cancellation point behaved as if asynchronous cancellation mode wer in effect, resulting in potentially dangerous state corruption if a cancellation request occurs. the glibc/nptl implementation of threads shares both of these issues. with this commit, both are fixed. however, cancellation points encountered in a signal handler will not be acted upon if the signal was received while the thread was already at a cancellation point. they will of course be acted upon after the signal handler returns, so in real-world usage where signal handlers quickly return, it should not be a problem. it's possible to solve this problem too by having sigaction() wrap all signal handlers with a function that uses a pthread_cleanup handler to catch cancellation, patch up the saved context, and return into the cancellable function that will catch and act upon the cancellation. however that would be a lot of complexity for minimal if any benefit...
2011-03-20global cleanup to use the new syscall interfaceRich Felker-23/+10
2011-03-19syscall overhaul part two - unify public and internal syscall interfaceRich Felker-3/+3
with this patch, the syscallN() functions are no longer needed; a variadic syscall() macro allows syscalls with anywhere from 0 to 6 arguments to be made with a single macro name. also, manually casting each non-integer argument with (long) is no longer necessary; the casts are hidden in the macros. some source files which depended on being able to define the old macro SYSCALL_RETURNS_ERRNO have been modified to directly use __syscall() instead of syscall(). references to SYSCALL_SIGSET_SIZE and SYSCALL_LL have also been changed. x86_64 has not been tested, and may need a follow-up commit to fix any minor bugs/oversights.
2011-03-10fix errors in sigqueue (potential information leak, wrong behavior)Rich Felker-5/+7
1. any padding in the siginfo struct was not necessarily zero-filled, so it might have contained private data off the caller's stack. 2. the uid and pid must be filled in from userspace. the previous rsyscall fix broke rsyscalls because the values were always incorrect.
2011-03-10remove useless return value checks for functions that cannot failRich Felker-3/+2
2011-03-10make sigsuspend a cancellation pointRich Felker-1/+6
2011-03-10make sigtimedwait a cancellation pointRich Felker-0/+3
2011-03-10don't fail with EINTR in sigtimedwaitRich Felker-6/+6
POSIX allows either behavior, but sigwait is not allowed to fail with EINTR, so the retry loop would have to be in one or the other anyway.
2011-03-10fix sigsuspend syscallRich Felker-1/+1
2011-03-10make sigaltstack work (missing macros in signal.h, error conditions)Rich Felker-1/+11
2011-03-09fix error handling for pthread_sigmaskRich Felker-1/+5
it must return errno, not -1, and should reject invalud values for how.
2011-03-09fix race condition in raise - just mask signalsRich Felker-9/+9
a signal handler could fork after the pid/tid were read, causing the wrong process to be signalled. i'm not sure if this is supposed to have UB or not, but raise is async-signal-safe, so it probably is allowed. the current solution is slightly expensive so this implementation is likely to be changed in the future.
2011-03-09fix raise semantics with threads.Rich Felker-1/+12
2011-02-20fix null pointer dereference introduced in last sigprocmask commitRich Felker-1/+1
2011-02-19prevent sigprocmask/pthread_sigmask from blocking implementation signalsRich Felker-3/+5
this code was wrongly disabled because the old version was trying to be too clever and didn't work. replaced it with a simple version for now.
2011-02-15Port musl to x86-64. One giant commit!Nicholas J. Kain-0/+22
2011-02-14header cleanup, conformance fixes - signalsRich Felker-6/+3
2011-02-13fix previous commit that broke sigreturn. looks like the asm is needed.Rich Felker-5/+17
2011-02-13fix omission that kept sa_restorer from being usedRich Felker-1/+1
2011-02-12initial check-in, version 0.5.0v0.5.0Rich Felker-0/+398