laforge submitted this change.

View Change


Approvals: laforge: Looks good to me, approved osmith: Looks good to me, but someone else must approve Jenkins Builder: Verified
socket: Cache errno before calling further functions

No issue is in principle expected with previous code since snprintf
doesn't seem to be setting errno according to "man snprintf", but better
be safe, specially in case someone calls the functions calling snprintf
in the future, or if snprintf sets errno in other implementations.

Change-Id: I6969be10db867b4821e05aed50bc22a7ccd4a633
---
M src/core/socket.c
1 file changed, 26 insertions(+), 6 deletions(-)

diff --git a/src/core/socket.c b/src/core/socket.c
index 02e16bc..5a31c8f 100644
--- a/src/core/socket.c
+++ b/src/core/socket.c
@@ -561,19 +561,21 @@
rc = setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR,
&on, sizeof(on));
if (rc < 0) {
+ int err = errno;
_SOCKADDR_TO_STR(sastr, local);
LOGP(DLGLOBAL, LOGL_ERROR,
"cannot setsockopt socket: " OSMO_SOCKADDR_STR_FMT ": %s\n",
- OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(errno));
+ OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(err));
close(sfd);
return rc;
}
}

if (bind(sfd, &local->u.sa, sizeof(struct osmo_sockaddr)) == -1) {
+ int err = errno;
_SOCKADDR_TO_STR(sastr, local);
LOGP(DLGLOBAL, LOGL_ERROR, "unable to bind socket: " OSMO_SOCKADDR_STR_FMT ": %s\n",
- OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(errno));
+ OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(err));
close(sfd);
return -1;
}
@@ -594,9 +596,10 @@

rc = connect(sfd, &remote->u.sa, sizeof(struct osmo_sockaddr));
if (rc != 0 && errno != EINPROGRESS) {
+ int err = errno;
_SOCKADDR_TO_STR(sastr, remote);
LOGP(DLGLOBAL, LOGL_ERROR, "unable to connect socket: " OSMO_SOCKADDR_STR_FMT ": %s\n",
- OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(errno));
+ OSMO_SOCKADDR_STR_FMT_ARGS(sastr), strerror(err));
close(sfd);
return rc;
}
@@ -798,12 +801,13 @@
rc = setsockopt(sfd, SOL_SOCKET, SO_REUSEADDR,
&on, sizeof(on));
if (rc < 0) {
+ int err = errno;
multiaddr_snprintf(strbuf, sizeof(strbuf), local_hosts, local_hosts_cnt);
LOGP(DLGLOBAL, LOGL_ERROR,
"cannot setsockopt socket:"
" %s:%u: %s\n",
strbuf, local_port,
- strerror(errno));
+ strerror(err));
goto ret_close;
}

@@ -821,9 +825,10 @@

rc = sctp_bindx(sfd, (struct sockaddr *)addrs_buf, local_hosts_cnt, SCTP_BINDX_ADD_ADDR);
if (rc == -1) {
+ int err = errno;
multiaddr_snprintf(strbuf, sizeof(strbuf), local_hosts, local_hosts_cnt);
LOGP(DLGLOBAL, LOGL_NOTICE, "unable to bind socket: %s:%u: %s\n",
- strbuf, local_port, strerror(errno));
+ strbuf, local_port, strerror(err));
rc = -ENODEV;
goto ret_close;
}
@@ -843,9 +848,10 @@

rc = sctp_connectx(sfd, (struct sockaddr *)addrs_buf, remote_hosts_cnt, NULL);
if (rc != 0 && errno != EINPROGRESS) {
+ int err = errno;
multiaddr_snprintf(strbuf, sizeof(strbuf), remote_hosts, remote_hosts_cnt);
LOGP(DLGLOBAL, LOGL_ERROR, "unable to connect socket: %s:%u: %s\n",
- strbuf, remote_port, strerror(errno));
+ strbuf, remote_port, strerror(err));
rc = -ENODEV;
goto ret_close;
}

To view, visit change 33588. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: libosmocore
Gerrit-Branch: master
Gerrit-Change-Id: I6969be10db867b4821e05aed50bc22a7ccd4a633
Gerrit-Change-Number: 33588
Gerrit-PatchSet: 2
Gerrit-Owner: pespin <pespin@sysmocom.de>
Gerrit-Reviewer: Jenkins Builder
Gerrit-Reviewer: laforge <laforge@osmocom.org>
Gerrit-Reviewer: osmith <osmith@sysmocom.de>
Gerrit-MessageType: merged