about summary refs log tree commit diff
path: root/src/signal
Commit message (Collapse)AuthorAgeFilesLines
* fix broken sigsetjmp on x86_64Rich Felker2011-04-081-7/+9
|
* consistency: change all remaining syscalls to use SYS_ rather than __NR_ prefixRich Felker2011-04-063-3/+3
|
* fix all implicit conversion between signed/unsigned pointersRich Felker2011-03-251-1/+1
| | | | | | | sadly the C language does not specify any such implicit conversion, so this is not a matter of just fixing warnings (as gcc treats it) but actual errors. i would like to revisit a number of these changes and possibly revise the types used to reduce the number of casts required.
* overhaul cancellation to fix resource leaks and dangerous behavior with signalsRich Felker2011-03-242-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...
* global cleanup to use the new syscall interfaceRich Felker2011-03-208-23/+10
|
* syscall overhaul part two - unify public and internal syscall interfaceRich Felker2011-03-193-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.
* fix errors in sigqueue (potential information leak, wrong behavior)Rich Felker2011-03-101-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.
* remove useless return value checks for functions that cannot failRich Felker2011-03-101-3/+2
|
* make sigsuspend a cancellation pointRich Felker2011-03-101-1/+6
|
* make sigtimedwait a cancellation pointRich Felker2011-03-101-0/+3
|
* don't fail with EINTR in sigtimedwaitRich Felker2011-03-101-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.
* fix sigsuspend syscallRich Felker2011-03-101-1/+1
|
* make sigaltstack work (missing macros in signal.h, error conditions)Rich Felker2011-03-101-1/+11
|
* fix error handling for pthread_sigmaskRich Felker2011-03-091-1/+5
| | | | it must return errno, not -1, and should reject invalud values for how.
* fix race condition in raise - just mask signalsRich Felker2011-03-091-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.
* fix raise semantics with threads.Rich Felker2011-03-091-1/+12
|
* fix null pointer dereference introduced in last sigprocmask commitRich Felker2011-02-201-1/+1
|
* prevent sigprocmask/pthread_sigmask from blocking implementation signalsRich Felker2011-02-191-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.
* Port musl to x86-64. One giant commit!Nicholas J. Kain2011-02-152-0/+22
|
* header cleanup, conformance fixes - signalsRich Felker2011-02-142-6/+3
|
* fix previous commit that broke sigreturn. looks like the asm is needed.Rich Felker2011-02-133-5/+17
|
* fix omission that kept sa_restorer from being usedRich Felker2011-02-131-1/+1
|
* initial check-in, version 0.5.0 v0.5.0Rich Felker2011-02-1232-0/+398