chiark / gitweb /
tree-wide: add new SIGNAL_VALID() macro-like function that validates signal numbers
authorLennart Poettering <lennart@poettering.net>
Fri, 8 Apr 2016 09:27:28 +0000 (11:27 +0200)
committerSven Eden <yamakuzure@gmx.net>
Fri, 16 Jun 2017 08:12:57 +0000 (10:12 +0200)
And port all code over to use it.

src/basic/signal-util.c
src/basic/signal-util.h
src/libelogind/sd-event/sd-event.c
src/login/logind-session-dbus.c
src/login/logind-user-dbus.c

index 2e452f86644937fba97d4e48a439725ae54feb61..0be2ec0c708ee983a8abdefcf8430407d3f3d078 100644 (file)
@@ -259,7 +259,7 @@ int signal_from_string(const char *s) {
         }
         if (safe_atou(s, &u) >= 0) {
                 signo = (int) u + offset;
-                if (signo > 0 && signo < _NSIG)
+                if (SIGNAL_VALID(signo))
                         return signo;
         }
         return -EINVAL;
index cbdb6ce33aac06b5bd58928f2052208079f3e423..ee37e2726e14e686cad101ea0b0946f6eb9567e1 100644 (file)
@@ -54,3 +54,7 @@ static inline void block_signals_reset(sigset_t *ss) {
                 assert_se(sigprocmask_many(SIG_BLOCK, &t, __VA_ARGS__, -1) >= 0); \
                 t;                                                                \
         })
+
+static inline bool SIGNAL_VALID(int signo) {
+        return signo > 0 && signo < _NSIG;
+}
index 805edb2146443a3b53f832a939e4ac220bf81ba2..34d91d8444ab6d36fe3d5ac1e3733443ed605af7 100644 (file)
@@ -1147,8 +1147,7 @@ _public_ int sd_event_add_signal(
         int r;
 
         assert_return(e, -EINVAL);
-        assert_return(sig > 0, -EINVAL);
-        assert_return(sig < _NSIG, -EINVAL);
+        assert_return(SIGNAL_VALID(sig), -EINVAL);
         assert_return(e->state != SD_EVENT_FINISHED, -ESTALE);
         assert_return(!event_pid_changed(e), -ECHILD);
 
@@ -2220,7 +2219,7 @@ static int process_signal(sd_event *e, struct signal_data *d, uint32_t events) {
                 if (_unlikely_(n != sizeof(si)))
                         return -EIO;
 
-                assert(si.ssi_signo < _NSIG);
+                assert(SIGNAL_VALID(si.ssi_signo));
 
                 read_one = true;
 
index 848e2721859bc3b1fde90c53cb7a88ad4dd6b767..b3535e36dade62e4dd827a8ea0c2e66f31628721 100644 (file)
@@ -28,6 +28,7 @@
 #include "logind-session-device.h"
 #include "logind-session.h"
 #include "logind.h"
+#include "signal-util.h"
 #include "strv.h"
 #include "util.h"
 
@@ -300,7 +301,7 @@ int bus_session_method_kill(sd_bus_message *message, void *userdata, sd_bus_erro
                         return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid kill parameter '%s'", swho);
         }
 
-        if (signo <= 0 || signo >= _NSIG)
+        if (!SIGNAL_VALID(signo))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid signal %i", signo);
 
         r = bus_verify_polkit_async(
index fd98c7becafb800daeb3f7ada0f8d8e06484a8ea..b73f9ea69e8c30d8f94108fdd23f3431ce5c9b70 100644 (file)
@@ -25,6 +25,7 @@
 #include "formats-util.h"
 #include "logind-user.h"
 #include "logind.h"
+#include "signal-util.h"
 #include "strv.h"
 #include "user-util.h"
 
@@ -222,7 +223,7 @@ int bus_user_method_kill(sd_bus_message *message, void *userdata, sd_bus_error *
         if (r < 0)
                 return r;
 
-        if (signo <= 0 || signo >= _NSIG)
+        if (!SIGNAL_VALID(signo))
                 return sd_bus_error_setf(error, SD_BUS_ERROR_INVALID_ARGS, "Invalid signal %i", signo);
 
         r = user_kill(u, signo);