[systemd-commits] src/udev

Harald Hoyer harald at kemper.freedesktop.org
Mon Apr 8 11:03:56 PDT 2013


 src/udev/udev-ctrl.c |    2 ++
 1 file changed, 2 insertions(+)

New commits:
commit b97caef538ae37bd2dc04fc15b448c12a2c9422b
Author: Harald Hoyer <harald at redhat.com>
Date:   Mon Apr 8 19:59:20 2013 +0200

    udev/udev-ctrl.c:udev_ctrl_new_from_fd() enable SO_PASSCRED
    
    Avoid "sender uid=65534, message ignored" case, where no credentials can
    be read on the sender side.
    
    Seems, the server socket does not enable credential receiving fast
    enough, and the message from the client (without credential) sometimes
    is queued before the credential passing was active.

diff --git a/src/udev/udev-ctrl.c b/src/udev/udev-ctrl.c
index 6ee6b04..e60da90 100644
--- a/src/udev/udev-ctrl.c
+++ b/src/udev/udev-ctrl.c
@@ -73,6 +73,7 @@ struct udev_ctrl_connection {
 struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd)
 {
         struct udev_ctrl *uctrl;
+        const int on = 1;
 
         uctrl = calloc(1, sizeof(struct udev_ctrl));
         if (uctrl == NULL)
@@ -91,6 +92,7 @@ struct udev_ctrl *udev_ctrl_new_from_fd(struct udev *udev, int fd)
                 uctrl->bound = true;
                 uctrl->sock = fd;
         }
+        setsockopt(uctrl->sock, SOL_SOCKET, SO_PASSCRED, &on, sizeof(on));
 
         uctrl->saddr.sun_family = AF_LOCAL;
         strscpy(uctrl->saddr.sun_path, sizeof(uctrl->saddr.sun_path), "/run/udev/control");



More information about the systemd-commits mailing list