summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--udevd.c4
-rw-r--r--udevsend.c5
2 files changed, 7 insertions, 2 deletions
diff --git a/udevd.c b/udevd.c
index 24cf9c9a7c..10d67f2c35 100644
--- 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;
diff --git a/udevsend.c b/udevsend.c
index 223647785d..246a097f26 100644
--- a/udevsend.c
+++ b/udevsend.c
@@ -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 {