Hi On Tue, Aug 31, 2021 at 3:00 AM Michael Tokarev wrote: > Linux kernel can return size of af_unix socket to be > one byte larger than sockaddr_un structure - adding > the trailing zero byte. > > Signed-off-by: Michael Tokarev > Fixes: 4cfd970ec188558daa6214f26203fe553fb1e01f (first in 6.1.0) > Cc: qemu-stable@nongnu.org > > diff --git a/util/qemu-sockets.c b/util/qemu-sockets.c > index f2f3676d1f..83926dc2bc 100644 > --- a/util/qemu-sockets.c > +++ b/util/qemu-sockets.c > @@ -1345,8 +1345,9 @@ socket_sockaddr_to_address_unix(struct > sockaddr_storage *sa, > SocketAddress *addr; > struct sockaddr_un *su = (struct sockaddr_un *)sa; > > + /* kernel might have added \0 terminator to non-abstract socket */ > assert(salen >= sizeof(su->sun_family) + 1 && > - salen <= sizeof(struct sockaddr_un)); > + salen <= sizeof(struct sockaddr_un) + su->sun_path[0] ? 1 : 0); > > Looks right, but we may want to drop the upper bound check altogether. I thought the path must always fit the sockaddr_un, but since that's not the case it's only harmful here. Reviewed-by: Marc-André Lureau addr = g_new0(SocketAddress, 1); > addr->type = SOCKET_ADDRESS_TYPE_UNIX; > > -- Marc-André Lureau