diff --git a/libc/signal.cc b/libc/signal.cc
index 5be5c4b8eec4040006976a0de78b058160818c13..18f5f6e7eec7addf235c0588a17fd4bf3e0f7baa 100644
--- a/libc/signal.cc
+++ b/libc/signal.cc
@@ -135,6 +135,11 @@ int sigprocmask(int how, const sigset_t* _set, sigset_t* _oldset)
 
 int sigaction(int signum, const struct sigaction* act, struct sigaction* oldact)
 {
+    // FIXME: We do not support any sa_flags besides SA_SIGINFO.
+    if (signum < 0 || signum >= (int)nsignals) {
+        errno = EINVAL;
+        return -1;
+    }
     if (oldact) {
         *oldact = signal_actions[signum];
     }