contrib/vhost-user-blk: fix bind() using the right size of the address
On macOS passing `-s /tmp/vhost.socket` parameter to the vhost-user-blk application, the bind was done on `/tmp/vhost.socke` pathname, missing the last character. This sounds like one of the portability problems described in the unix(7) manpage: Pathname sockets When binding a socket to a pathname, a few rules should be observed for maximum portability and ease of coding: • The pathname in sun_path should be null-terminated. • The length of the pathname, including the terminating null byte, should not exceed the size of sun_path. • The addrlen argument that describes the enclosing sockaddr_un structure should have a value of at least: offsetof(struct sockaddr_un, sun_path) + strlen(addr.sun_path)+1 or, more simply, addrlen can be specified as sizeof(struct sockaddr_un). So let's follow the last advice and simplify the code as well. Reviewed-by: Philippe Mathieu-Daudé <philmd@linaro.org> Tested-by: Philippe Mathieu-Daudé <philmd@linaro.org> Acked-by: Stefan Hajnoczi <stefanha@redhat.com> Reviewed-by: David Hildenbrand <david@redhat.com> Signed-off-by: Stefano Garzarella <sgarzare@redhat.com> Message-Id: <20240618100440.145664-1-sgarzare@redhat.com> Reviewed-by: Michael S. Tsirkin <mst@redhat.com> Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
This commit is contained in:
parent
4c58843e5d
commit
03582094da
@ -469,7 +469,6 @@ static int unix_sock_new(char *unix_fn)
|
|||||||
{
|
{
|
||||||
int sock;
|
int sock;
|
||||||
struct sockaddr_un un;
|
struct sockaddr_un un;
|
||||||
size_t len;
|
|
||||||
|
|
||||||
assert(unix_fn);
|
assert(unix_fn);
|
||||||
|
|
||||||
@ -481,10 +480,9 @@ static int unix_sock_new(char *unix_fn)
|
|||||||
|
|
||||||
un.sun_family = AF_UNIX;
|
un.sun_family = AF_UNIX;
|
||||||
(void)snprintf(un.sun_path, sizeof(un.sun_path), "%s", unix_fn);
|
(void)snprintf(un.sun_path, sizeof(un.sun_path), "%s", unix_fn);
|
||||||
len = sizeof(un.sun_family) + strlen(un.sun_path);
|
|
||||||
|
|
||||||
(void)unlink(unix_fn);
|
(void)unlink(unix_fn);
|
||||||
if (bind(sock, (struct sockaddr *)&un, len) < 0) {
|
if (bind(sock, (struct sockaddr *)&un, sizeof(un)) < 0) {
|
||||||
perror("bind");
|
perror("bind");
|
||||||
goto fail;
|
goto fail;
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user