9p: proxy: Fix size passed to `connect`

The size to pass to the `connect` call is the size of the entire
`struct sockaddr_un`. Passing anything shorter than this causes errors
on darwin.

Signed-off-by: Keno Fischer <keno@juliacomputing.com>
Signed-off-by: Greg Kurz <groug@kaod.org>
This commit is contained in:
Keno Fischer 2018-06-07 12:17:21 +02:00 committed by Greg Kurz
parent 5d328d7d2f
commit fde1f3e4a0
1 changed files with 2 additions and 3 deletions

View File

@ -1088,7 +1088,7 @@ static int proxy_ioc_getversion(FsContext *fs_ctx, V9fsPath *path,
static int connect_namedsocket(const char *path, Error **errp) static int connect_namedsocket(const char *path, Error **errp)
{ {
int sockfd, size; int sockfd;
struct sockaddr_un helper; struct sockaddr_un helper;
if (strlen(path) >= sizeof(helper.sun_path)) { if (strlen(path) >= sizeof(helper.sun_path)) {
@ -1102,8 +1102,7 @@ static int connect_namedsocket(const char *path, Error **errp)
} }
strcpy(helper.sun_path, path); strcpy(helper.sun_path, path);
helper.sun_family = AF_UNIX; helper.sun_family = AF_UNIX;
size = strlen(helper.sun_path) + sizeof(helper.sun_family); if (connect(sockfd, (struct sockaddr *)&helper, sizeof(helper)) < 0) {
if (connect(sockfd, (struct sockaddr *)&helper, size) < 0) {
error_setg_errno(errp, errno, "failed to connect to '%s'", path); error_setg_errno(errp, errno, "failed to connect to '%s'", path);
close(sockfd); close(sockfd);
return -1; return -1;