diff options
authorStefan Sperling <ssperling@sysmocom.de>2018-11-15 16:32:43 +0100
committerStefan Sperling <ssperling@sysmocom.de>2018-11-19 12:49:32 +0100
commit726b097b0c1a6042186736ffc18d4666a609453b (patch)
parentec4de9cf9194b4553d94220b61fb2fea1811ddff (diff)
unlink socket path correctly in rf_create_socket()cid188836
In commit 65c62e50335b500ac9e4658530ca5a1b4f5328d8 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: 65c62e50335b500ac9e4658530ca5a1b4f5328d8
1 files changed, 5 insertions, 1 deletions
diff --git a/src/osmo-bsc/bsc_rf_ctrl.c b/src/osmo-bsc/bsc_rf_ctrl.c
index ac87fb93d..791abf6cb 100644
--- a/src/osmo-bsc/bsc_rf_ctrl.c
+++ b/src/osmo-bsc/bsc_rf_ctrl.c
@@ -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 */