diff options
author | Jakob Kaivo <jkk@ung.org> | 2024-01-30 13:36:41 -0500 |
---|---|---|
committer | Jakob Kaivo <jkk@ung.org> | 2024-01-30 13:36:41 -0500 |
commit | f4f929b02eaed8ef8b798780ee5640bdd6809867 (patch) | |
tree | 2a3b559ed1184b3a585201f820ffc7a249fe0d05 | |
parent | 635f3167091b5f7419cef9b24810f24269f40a37 (diff) |
update standard and safety checks
-rw-r--r-- | src/signal/__signal.c | 5 | ||||
-rw-r--r-- | src/signal/__signal_handler.c | 9 | ||||
-rw-r--r-- | src/signal/bsd_signal.c | 26 | ||||
-rw-r--r-- | src/signal/kill.c | 1 | ||||
-rw-r--r-- | src/signal/killpg.c | 15 | ||||
-rw-r--r-- | src/signal/raise.c | 3 | ||||
-rw-r--r-- | src/signal/sigaction.c | 2 | ||||
-rw-r--r-- | src/signal/sigaddset.c | 21 | ||||
-rw-r--r-- | src/signal/sigaltstack.c | 15 | ||||
-rw-r--r-- | src/signal/sigdelset.c | 21 | ||||
-rw-r--r-- | src/signal/sigemptyset.c | 17 | ||||
-rw-r--r-- | src/signal/sigfillset.c | 18 | ||||
-rw-r--r-- | src/signal/sighold.c | 15 | ||||
-rw-r--r-- | src/signal/sigignore.c | 18 | ||||
-rw-r--r-- | src/signal/siginterrupt.c | 25 | ||||
-rw-r--r-- | src/signal/sigismember.c | 23 | ||||
-rw-r--r-- | src/signal/sigmask.c | 14 | ||||
-rw-r--r-- | src/signal/signal.c | 6 | ||||
-rw-r--r-- | src/signal/sigpause.c | 15 | ||||
-rw-r--r-- | src/signal/sigpending.c | 16 | ||||
-rw-r--r-- | src/signal/sigprocmask.c | 16 | ||||
-rw-r--r-- | src/signal/sigqueue.c | 15 | ||||
-rw-r--r-- | src/signal/sigrelse.c | 15 | ||||
-rw-r--r-- | src/signal/sigset.c | 15 | ||||
-rw-r--r-- | src/signal/sigstack.c | 15 | ||||
-rw-r--r-- | src/signal/sigsuspend.c | 16 | ||||
-rw-r--r-- | src/signal/sigtimedwait.c | 15 | ||||
-rw-r--r-- | src/signal/sigwaitinfo.c | 15 |
28 files changed, 20 insertions, 387 deletions
diff --git a/src/signal/__signal.c b/src/signal/__signal.c index 1c212bd1..e8c37e58 100644 --- a/src/signal/__signal.c +++ b/src/signal/__signal.c @@ -1,3 +1,8 @@ #include "_signal.h" struct __signal __signal = {0}; + +/* +STDC(0) +SIGNAL_SAFE(0) +*/ diff --git a/src/signal/__signal_handler.c b/src/signal/__signal_handler.c index fc0cc45f..985fa393 100644 --- a/src/signal/__signal_handler.c +++ b/src/signal/__signal_handler.c @@ -1,7 +1,6 @@ #include <stddef.h> #include "_signal.h" - -#include <stdio.h> +#include "_safety.h" void __signal_handler(int sig) { @@ -9,5 +8,11 @@ void __signal_handler(int sig) if (__signal.handlers[sig] != NULL) { __signal.handlers[sig](sig); } + /* TODO: if signal is fatal, trigger UB */ __signal.current = 0; } + +/* +STDC(0) +SIGNAL_SAFE(0) +*/ diff --git a/src/signal/bsd_signal.c b/src/signal/bsd_signal.c deleted file mode 100644 index 7f87b4e1..00000000 --- a/src/signal/bsd_signal.c +++ /dev/null @@ -1,26 +0,0 @@ -#if 0 - -#include <signal.h> - -void (*bsd_signal(int sig, void (*func)(int)))(int) -{ - struct sigaction act, oact; - act.sa_handler = func; - act.sa_flags = SA_RESTART; - - sigemptyset(&act.sa_mask); - sigaddset(&act.sa_mask, sig); - - if (sigaction(sig, &act, &oact) == -1) { - return SIG_ERR; - } - - return oact.sa_handler; -} - -/* -XOPEN(400,700) -*/ - - -#endif diff --git a/src/signal/kill.c b/src/signal/kill.c index 3be1b3ad..877268f9 100644 --- a/src/signal/kill.c +++ b/src/signal/kill.c @@ -6,6 +6,7 @@ int kill(pid_t pid, int sig) { + SIGNAL_SAFE(0); SYSCALL(kill, int, -1, pid, sig, 0, 0, 0, 0); } /* diff --git a/src/signal/killpg.c b/src/signal/killpg.c deleted file mode 100644 index fdfee360..00000000 --- a/src/signal/killpg.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int killpg(pid_t pgrp, int sig) -{ - return 0; -} - -/* -XOPEN(400) -*/ - - -#endif diff --git a/src/signal/raise.c b/src/signal/raise.c index 56bf3209..c4fd9649 100644 --- a/src/signal/raise.c +++ b/src/signal/raise.c @@ -13,10 +13,13 @@ #define getpid() __scall0(getpid) #endif +#include "_safety.h" + /** send a signal to the current program **/ int raise(int sig) { + SIGNAL_SAFE(0); /* RETURN_FAILURE(NONZERO); RETURN_SUCCESS(0); diff --git a/src/signal/sigaction.c b/src/signal/sigaction.c index 054f3958..f95301e9 100644 --- a/src/signal/sigaction.c +++ b/src/signal/sigaction.c @@ -7,6 +7,8 @@ int sigaction(int sig, const struct sigaction * restrict act, struct sigaction * restrict oact) { + SIGNAL_SAFE(-1); + struct linux_action { union { void (*handler)(int); diff --git a/src/signal/sigaddset.c b/src/signal/sigaddset.c deleted file mode 100644 index 217b91fe..00000000 --- a/src/signal/sigaddset.c +++ /dev/null @@ -1,21 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> -#include <limits.h> - -int sigaddset(sigset_t * set, int signo) -{ - /* TODO: fail with EINVAL if signo is not a valid signal number */ - size_t byte = signo % CHAR_BIT; - int bit = signo / CHAR_BIT; - - set->__bits[byte] |= (1 << bit); - return 0; -} -/* -POSIX(1) -*/ - - -#endif diff --git a/src/signal/sigaltstack.c b/src/signal/sigaltstack.c deleted file mode 100644 index 73ab2980..00000000 --- a/src/signal/sigaltstack.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigaltstack(const stack_t * restrict ss, stack_t * restrict oss) -{ - return 0; -} - -/* -XOPEN(400) -*/ - - -#endif diff --git a/src/signal/sigdelset.c b/src/signal/sigdelset.c deleted file mode 100644 index 91db033e..00000000 --- a/src/signal/sigdelset.c +++ /dev/null @@ -1,21 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> -#include <limits.h> - -int sigdelset(sigset_t * set, int signo) -{ - /* TODO: fail with EINVAL if signo is not a valid signal number */ - size_t byte = signo % CHAR_BIT; - int bit = signo / CHAR_BIT; - - set->__bits[byte] ^= (1 << bit); - return 0; -} -/* -POSIX(1) -*/ - - -#endif diff --git a/src/signal/sigemptyset.c b/src/signal/sigemptyset.c deleted file mode 100644 index 860668e7..00000000 --- a/src/signal/sigemptyset.c +++ /dev/null @@ -1,17 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> -#include <string.h> - -int sigemptyset(sigset_t * set) -{ - memset(set, 0, sizeof(*set)); - return 0; -} -/* -POSIX(1) -*/ - - -#endif diff --git a/src/signal/sigfillset.c b/src/signal/sigfillset.c deleted file mode 100644 index 45acfd61..00000000 --- a/src/signal/sigfillset.c +++ /dev/null @@ -1,18 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> -#include <string.h> -#include <limits.h> - -int sigfillset(sigset_t * set) -{ - memset(set, UCHAR_MAX, sizeof(*set)); - return 0; -} -/* -POSIX(1) -*/ - - -#endif diff --git a/src/signal/sighold.c b/src/signal/sighold.c deleted file mode 100644 index 037761f4..00000000 --- a/src/signal/sighold.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int sighold(int sig) -{ - return 0; -} - -/* -XOPEN(400) -*/ - - -#endif diff --git a/src/signal/sigignore.c b/src/signal/sigignore.c deleted file mode 100644 index aef76f50..00000000 --- a/src/signal/sigignore.c +++ /dev/null @@ -1,18 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigignore(int sig) -{ - if (signal(sig, SIG_IGN) == SIG_ERR) { - return -1; - } - return 0; -} - -/* -XOPEN(400) -*/ - - -#endif diff --git a/src/signal/siginterrupt.c b/src/signal/siginterrupt.c deleted file mode 100644 index d3fc9ddd..00000000 --- a/src/signal/siginterrupt.c +++ /dev/null @@ -1,25 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> - -int siginterrupt(int sig, int flag) -{ - struct sigaction sa = { 0 }; - int ret = -1; - - sigaction(sig, NULL, &sa); - if (flag) { - sa.sa_flags &= ~SA_RESTART; - } else { - sa.sa_flags |= SA_RESTART; - } - return sigaction(sig, &sa, NULL); -} - -/* -XOPEN(400) -*/ - - -#endif diff --git a/src/signal/sigismember.c b/src/signal/sigismember.c deleted file mode 100644 index b6347ddd..00000000 --- a/src/signal/sigismember.c +++ /dev/null @@ -1,23 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> -#include <limits.h> - -int sigismember(const sigset_t * set, int signo) -{ - /* TODO: fail with EINVAL if signo is not a valid signal number */ - - size_t byte = signo % CHAR_BIT; - int bit = signo / CHAR_BIT; - if (set->__bits[byte] & (1 << bit)) { - return 1; - } - return 0; -} -/* -POSIX(1) -*/ - - -#endif diff --git a/src/signal/sigmask.c b/src/signal/sigmask.c deleted file mode 100644 index 616222ca..00000000 --- a/src/signal/sigmask.c +++ /dev/null @@ -1,14 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigmask(int signum) -{ -} - -/* -XOPEN(400,500) -*/ - - -#endif diff --git a/src/signal/signal.c b/src/signal/signal.c index 03913053..b328a19a 100644 --- a/src/signal/signal.c +++ b/src/signal/signal.c @@ -21,10 +21,8 @@ void (*signal(int sig, void (*func)(int)))(int) { - if (__signal.current != 0 && __signal.current != sig) { - /* only safe if resetting the current signal handler */ - SIGNAL_SAFE(0); - } + /* signal safe iff we are resetting the current signal handler */ + SIGNAL_SAFE((__signal.current == sig)); if (sig < 0 || sig > NSIGNALS) { /* FIXME: should errno be set? */ diff --git a/src/signal/sigpause.c b/src/signal/sigpause.c deleted file mode 100644 index 0cfdf3fb..00000000 --- a/src/signal/sigpause.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigpause(int sig) -{ - return 0; -} - -/* -XOPEN(400) -*/ - - -#endif diff --git a/src/signal/sigpending.c b/src/signal/sigpending.c deleted file mode 100644 index 163d9519..00000000 --- a/src/signal/sigpending.c +++ /dev/null @@ -1,16 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> -#include "_syscall.h" - -int sigpending(sigset_t * set) -{ - SYSCALL(sigpending, int, -1, set, sizeof(*set), 0, 0, 0, 0); -} -/* -POSIX(1) -*/ - - -#endif diff --git a/src/signal/sigprocmask.c b/src/signal/sigprocmask.c deleted file mode 100644 index 0df41963..00000000 --- a/src/signal/sigprocmask.c +++ /dev/null @@ -1,16 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> -#include "_syscall.h" - -int sigprocmask(int how, const sigset_t * restrict set, sigset_t * restrict oset) -{ - SYSCALL(sigprocmask, int, -1, how, set, oset, sizeof(*set), 0, 0); -} -/* -POSIX(1) -*/ - - -#endif diff --git a/src/signal/sigqueue.c b/src/signal/sigqueue.c deleted file mode 100644 index 75fb44dc..00000000 --- a/src/signal/sigqueue.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigqueue(pid_t pid, int signo, const union sigval value) -{ - return 0; -} - -/* -POSIX(199309) -*/ - - -#endif diff --git a/src/signal/sigrelse.c b/src/signal/sigrelse.c deleted file mode 100644 index 94418751..00000000 --- a/src/signal/sigrelse.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigrelse(int sig) -{ - return 0; -} - -/* -XOPEN(400) -*/ - - -#endif diff --git a/src/signal/sigset.c b/src/signal/sigset.c deleted file mode 100644 index 72987408..00000000 --- a/src/signal/sigset.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -void (*sigset(int sig, void (*disp)(int)))(int) -{ - return ((void*)(int)0); -} - -/* -XOPEN(400) -*/ - - -#endif diff --git a/src/signal/sigstack.c b/src/signal/sigstack.c deleted file mode 100644 index d9ebb92c..00000000 --- a/src/signal/sigstack.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigstack(struct sigstack *ss, struct sigstack *oss) -{ - return 0; -} - -/* -XOPEN(400,600) -*/ - - -#endif diff --git a/src/signal/sigsuspend.c b/src/signal/sigsuspend.c deleted file mode 100644 index 4ebe0346..00000000 --- a/src/signal/sigsuspend.c +++ /dev/null @@ -1,16 +0,0 @@ -#if 0 - -#include <sys/types.h> -#include <signal.h> -#include "_syscall.h" - -int sigsuspend(const sigset_t * sigmask) -{ - SYSCALL(sigsuspend, int, -1, sigmask, sizeof(*sigmask), 0, 0, 0, 0); -} -/* -POSIX(1) -*/ - - -#endif diff --git a/src/signal/sigtimedwait.c b/src/signal/sigtimedwait.c deleted file mode 100644 index 574f850d..00000000 --- a/src/signal/sigtimedwait.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigtimedwait(const sigset_t * restrict set, siginfo_t * restrict info, const struct timespec * restrict timeout) -{ - return 0; -} - -/* -POSIX(199309) -*/ - - -#endif diff --git a/src/signal/sigwaitinfo.c b/src/signal/sigwaitinfo.c deleted file mode 100644 index de0976cf..00000000 --- a/src/signal/sigwaitinfo.c +++ /dev/null @@ -1,15 +0,0 @@ -#if 0 - -#include <signal.h> - -int sigwaitinfo(const sigset_t * restrict set, siginfo_t * restrict info) -{ - return 0; -} - -/* -POSIX(199309) -*/ - - -#endif |