From ca918f63b7a98442d2925c0a668c911d8140215b Mon Sep 17 00:00:00 2001 From: Lennart Poettering Date: Thu, 13 Apr 2023 10:49:15 +0200 Subject: [PATCH] udev,sd-device: use CMSG_FIND_DATA() more --- src/libsystemd/sd-device/device-monitor.c | 6 ++---- src/udev/udev-ctrl.c | 8 ++------ 2 files changed, 4 insertions(+), 10 deletions(-) diff --git a/src/libsystemd/sd-device/device-monitor.c b/src/libsystemd/sd-device/device-monitor.c index af093385da8..a23b5e78470 100644 --- a/src/libsystemd/sd-device/device-monitor.c +++ b/src/libsystemd/sd-device/device-monitor.c @@ -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); diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c index 24180f9418f..7d9a8c018f0 100644 --- a/src/udev/udev-ctrl.c +++ b/src/udev/udev-ctrl.c @@ -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;