summaryrefslogtreecommitdiff
path: root/src/signal
AgeCommit message (Collapse)AuthorFilesLines
2011-03-24overhaul cancellation to fix resource leaks and dangerous behavior with signalsRich Felker2-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 Felker8-23/+10
2011-03-19syscall overhaul part two - unify public and internal syscall interfaceRich Felker3-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 Felker1-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 Felker1-3/+2
2011-03-10make sigsuspend a cancellation pointRich Felker1-1/+6
2011-03-10make sigtimedwait a cancellation pointRich Felker1-0/+3
2011-03-10don't fail with EINTR in sigtimedwaitRich Felker1-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 Felker1-1/+1
2011-03-10make sigaltstack work (missing macros in signal.h, error conditions)Rich Felker1-1/+11
2011-03-09fix error handling for pthread_sigmaskRich Felker1-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 Felker1-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 Felker1-1/+12
2011-02-20fix null pointer dereference introduced in last sigprocmask commitRich Felker1-1/+1
2011-02-19prevent sigprocmask/pthread_sigmask from blocking implementation signalsRich Felker1-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. Kain2-0/+22
2011-02-14header cleanup, conformance fixes - signalsRich Felker2-6/+3
2011-02-13fix previous commit that broke sigreturn. looks like the asm is needed.Rich Felker3-5/+17
2011-02-13fix omission that kept sa_restorer from being usedRich Felker1-1/+1
2011-02-12initial check-in, version 0.5.0v0.5.0Rich Felker32-0/+398