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

Jim Fehlig jfehlig at suse.com
Tue Jul 12 17:04:32 UTC 2016


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 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)

Yes, I think that is safer. V2 on the way...

Regards,
Jim




More information about the libvir-list mailing list