]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
udev,sd-device: use CMSG_FIND_DATA() more 27254/head
authorLennart Poettering <lennart@poettering.net>
Thu, 13 Apr 2023 08:49:15 +0000 (10:49 +0200)
committerLennart Poettering <lennart@poettering.net>
Thu, 13 Apr 2023 08:49:23 +0000 (10:49 +0200)
src/libsystemd/sd-device/device-monitor.c
src/udev/udev-ctrl.c

index af093385da8355093d87b828f2263208d346b97b..a23b5e7847024c3298cb75f0586f2e778a722f8b 100644 (file)
@@ -503,7 +503,6 @@ int device_monitor_receive_device(sd_device_monitor *m, sd_device **ret) {
                 .msg_name = &snl,
                 .msg_namelen = sizeof(snl),
         };
-        struct cmsghdr *cmsg;
         struct ucred *cred;
         size_t offset;
         ssize_t n;
@@ -559,12 +558,11 @@ int device_monitor_receive_device(sd_device_monitor *m, sd_device **ret) {
                                                  snl.nl.nl_pid);
         }
 
-        cmsg = CMSG_FIRSTHDR(&smsg);
-        if (!cmsg || cmsg->cmsg_type != SCM_CREDENTIALS)
+        cred = CMSG_FIND_DATA(&smsg, SOL_SOCKET, SCM_CREDENTIALS, struct ucred);
+        if (!cred)
                 return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN),
                                          "No sender credentials received, ignoring message.");
 
-        cred = (struct ucred*) CMSG_DATA(cmsg);
         if (!check_sender_uid(m, cred->uid))
                 return log_monitor_errno(m, SYNTHETIC_ERRNO(EAGAIN),
                                          "Sender uid="UID_FMT", message ignored.", cred->uid);
index 24180f9418fe0260b51b1f2092c0bdc7eec68592..7d9a8c018f09e004ea953c16e94adf7f82fa78e4 100644 (file)
@@ -161,7 +161,6 @@ static int udev_ctrl_connection_event_handler(sd_event_source *s, int fd, uint32
                 .msg_control = &control,
                 .msg_controllen = sizeof(control),
         };
-        struct cmsghdr *cmsg;
         struct ucred *cred;
         ssize_t size;
 
@@ -185,15 +184,12 @@ static int udev_ctrl_connection_event_handler(sd_event_source *s, int fd, uint32
 
         cmsg_close_all(&smsg);
 
-        cmsg = CMSG_FIRSTHDR(&smsg);
-
-        if (!cmsg || cmsg->cmsg_type != SCM_CREDENTIALS) {
+        cred = CMSG_FIND_DATA(&smsg, SOL_SOCKET, SCM_CREDENTIALS, struct ucred);
+        if (!cred) {
                 log_error("No sender credentials received, ignoring message");
                 return 0;
         }
 
-        cred = (struct ucred *) CMSG_DATA(cmsg);
-
         if (cred->uid != 0) {
                 log_error("Invalid sender uid "UID_FMT", ignoring message", cred->uid);
                 return 0;