unlink socket path correctly in rf_create_socket()

In commit 65c62e5033 a call
to unlink() was erroneously moved up. Since then unlink()
has been called with an uninitialized path variable. The
problem went unnoticed because the return value of unlink()
was never checked.

Ensure that unlink() is called with an initialized argument and
verify success of the unlink() operation if the socket exists.

Related: CID#188836
Change-Id: Ia0c873da305cbb47aef0562f61ec21057363f294
Fixes: 65c62e5033
This commit is contained in:
Stefan Sperling 2018-11-15 16:32:43 +01:00
parent ec4de9cf91
commit 726b097b0c
1 changed files with 5 additions and 1 deletions

View File

@ -450,12 +450,16 @@ static int rf_create_socket(struct osmo_bsc_rf *rf, const char *path)
}
local.sun_family = AF_UNIX;
unlink(local.sun_path);
if (osmo_strlcpy(local.sun_path, path, sizeof(local.sun_path)) >= sizeof(local.sun_path)) {
LOGP(DLINP, LOGL_ERROR, "Socket path exceeds maximum length of %zd bytes: %s\n",
sizeof(local.sun_path), path);
return -1;
}
if (unlink(local.sun_path) < 0 && errno != ENOENT) {
LOGP(DLINP, LOGL_ERROR, "Could not unlink socket path %s: %d/%s\n",
path, errno, strerror(errno));
return -1;
}
/* we use the same magic that X11 uses in Xtranssock.c for
* calculating the proper length of the sockaddr */