From d6f4fab82c4773ce0d5e7229d3d9309979acaac9 Mon Sep 17 00:00:00 2001 From: Linus Nordberg Date: Sun, 30 Jul 2017 22:52:35 +0200 Subject: Verify return code from fcntl calls. Have connectnonblocking() warn and fail if setting O_NONBLOCK fails. Have it warn if restoring of flags fail. coverity: 1449515 --- util.c | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'util.c') diff --git a/util.c b/util.c index 4cc7b8a..d9c3839 100644 --- a/util.c +++ b/util.c @@ -171,7 +171,14 @@ int connectnonblocking(int s, const struct sockaddr *addr, socklen_t addrlen, st socklen_t len; origflags = fcntl(s, F_GETFL, 0); - fcntl(s, F_SETFL, origflags | O_NONBLOCK); + if (origflags == -1) { + debugerrno(errno, DBG_WARN, "Failed to get flags"); + return -1; + } + if (fcntl(s, F_SETFL, origflags | O_NONBLOCK) == -1) { + debugerrno(errno, DBG_WARN, "Failed to set O_NONBLOCK"); + return -1; + } if (!connect(s, addr, addrlen)) { r = 0; goto exit; @@ -189,7 +196,8 @@ int connectnonblocking(int s, const struct sockaddr *addr, socklen_t addrlen, st r = 0; exit: - fcntl(s, F_SETFL, origflags); + if (fcntl(s, F_SETFL, origflags) == -1) + debugerrno(errno, DBG_WARN, "Failed to set original flags back"); return r; } -- cgit v1.1