chiark / gitweb /
[PATCH] udevd - fix socket path length
authorkay.sievers@vrfy.org <kay.sievers@vrfy.org>
Fri, 6 Feb 2004 08:11:24 +0000 (00:11 -0800)
committerGreg KH <gregkh@suse.de>
Wed, 27 Apr 2005 04:32:25 +0000 (21:32 -0700)
It seems that the guys are no longer differ about the right size of the
socket address :)

The kernel simply takes all bytes until the specified length as the name,
so the real length should be enough.

udevd.c
udevsend.c

diff --git a/udevd.c b/udevd.c
index 24cf9c9a7cf8c5a491c63483fff09f4a91455b70..10d67f2c359995c861ecb94a554d855b14852b00 100644 (file)
--- a/udevd.c
+++ b/udevd.c
@@ -360,6 +360,7 @@ int main(int argc, char *argv[])
        int csock;
        struct sockaddr_un saddr;
        struct sockaddr_un caddr;
+       socklen_t addrlen;
        socklen_t clen;
        pthread_t cli_tid;
        pthread_t mgr_msg_tid;
@@ -379,6 +380,7 @@ int main(int argc, char *argv[])
        saddr.sun_family = AF_LOCAL;
        /* use abstract namespace for socket path */
        strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
+       addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
 
        ssock = socket(AF_LOCAL, SOCK_STREAM, 0);
        if (ssock == -1) {
@@ -386,7 +388,7 @@ int main(int argc, char *argv[])
                exit(1);
        }
 
-       retval = bind(ssock, &saddr, sizeof(saddr));
+       retval = bind(ssock, &saddr, addrlen);
        if (retval < 0) {
                dbg("bind failed\n");
                goto exit;
index 223647785d73a17af57fbf0b3481550e35e95dcc..246a097f260d30c90b61456ff782479ac29abe59 100644 (file)
@@ -29,6 +29,7 @@
 #include <errno.h>
 #include <stdio.h>
 #include <stdlib.h>
+#include <stddef.h>
 #include <string.h>
 #include <unistd.h>
 #include <time.h>
@@ -124,6 +125,7 @@ int main(int argc, char* argv[])
        struct timespec tspec;
        int sock;
        struct sockaddr_un saddr;
+       socklen_t addrlen;
 
 #ifdef DEBUG
        init_logging("udevsend");
@@ -163,9 +165,10 @@ int main(int argc, char* argv[])
        saddr.sun_family = AF_LOCAL;
        /* use abstract namespace for socket path */
        strcpy(&saddr.sun_path[1], UDEVD_SOCK_PATH);
+       addrlen = offsetof(struct sockaddr_un, sun_path) + strlen(saddr.sun_path+1) + 1;
 
        /* try to connect, if it fails start daemon */
-       retval = connect(sock, (struct sockaddr *) &saddr, sizeof(saddr));
+       retval = connect(sock, (struct sockaddr *) &saddr, addrlen);
        if (retval != -1) {
                goto send;
        } else {