[libvirt] [PATCH] systemd: fix ready notification on abstract socket

Daniel P. Berrange berrange at redhat.com
Tue Jul 12 08:04:26 UTC 2016


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 at suse.com>
> ---
>  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 :|




More information about the libvir-list mailing list