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) > if (sendmsg(fd, &mh, MSG_NOSIGNAL) < 0) > VIR_WARN("Failed to notify systemd"); Regards, Daniel -- |: http://berrange.com -o- http://www.flickr.com/photos/dberrange/ :| |: http://libvirt.org -o- http://virt-manager.org :| |: http://autobuild.org -o- http://search.cpan.org/~danberr/ :| |: http://entangle-photo.org -o- http://live.gnome.org/gtk-vnc :| -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list