Daniel P. Berrange wrote: > On Mon, Jul 11, 2016 at 05:35:03PM -0600, Jim Fehlig wrote: >> At least with systemd v210, NOTIFY_SOCKET is abstact, e.g. >> @/org/freedesktop/systemd1/notify. sendmsg() fails on such a socket >> with "Connection refused". The unix(7) man page contains the following >> details wrt abstract socket addresses >> >> abstract: an abstract socket address is distinguished (from a >> pathname socket) by the fact that sun_path[0] is a null byte >> ('\0'). The socket's address in this namespace is given by the >> additional bytes in sun_path that are covered by the specified >> length of the address structure. (Null bytes in the name have >> no special significance.) >> >> So we need to be more precise about the address length, setting it to >> the sizeof sa_family_t + length of address copied to sun_path instead >> of setting it to the sizeof the entire sockaddr_un struct. >> >> Resolves: https://bugzilla.opensuse.org/show_bug.cgi?id=987668 >> Signed-off-by: Jim Fehlig <jfehlig@xxxxxxxx> >> --- >> src/util/virsystemd.c | 2 +- >> 1 file changed, 1 insertion(+), 1 deletion(-) >> >> diff --git a/src/util/virsystemd.c b/src/util/virsystemd.c >> index 871db7e..1b5e9fe 100644 >> --- a/src/util/virsystemd.c >> +++ b/src/util/virsystemd.c >> @@ -495,7 +495,6 @@ virSystemdNotifyStartup(void) >> }; >> struct msghdr mh = { >> .msg_name = &un, >> - .msg_namelen = sizeof(un), >> .msg_iov = &iov, >> .msg_iovlen = 1, >> }; >> @@ -521,6 +520,7 @@ virSystemdNotifyStartup(void) >> return; >> } >> >> + mh.msg_namelen = sizeof(sa_family_t) + strlen(path); > > I'm wondering how safe sizeof(sa_family_t) is. Might it be better to > use offsetof(struct sockaddr_un, sun_path) + strlen(path) Yes, I think that is safer. V2 on the way... Regards, Jim -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list