Skip to content

Commit

Permalink
bgpd: check sockopt returns in rpki_create_socket
Browse files Browse the repository at this point in the history
Check (g|s)etsockopt returns in rpki_create_socket(). Coverity scanner
issues 1575916 and 1575924.

Fixes: a951752 ("bgpd: create cache server socket in vrf")
Signed-off-by: Louis Scalbert <louis.scalbert@6wind.com>
  • Loading branch information
louis-6wind committed Jan 23, 2024
1 parent e966241 commit 14aa827
Showing 1 changed file with 41 additions and 9 deletions.
50 changes: 41 additions & 9 deletions bgpd/bgp_rpki.c
Original file line number Diff line number Diff line change
Expand Up @@ -1347,11 +1347,33 @@ static int rpki_create_socket(void *_cache)
timeout.tv_usec = 0;

optlen = sizeof(prev_rcv_tmout);
getsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &prev_rcv_tmout, &optlen);
getsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, &prev_snd_tmout, &optlen);

setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &timeout, sizeof(timeout));
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, &timeout, sizeof(timeout));
ret = getsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &prev_rcv_tmout,
&optlen);
if (ret < 0) {
close(socket);
socket = -1;
}
ret = getsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, &prev_snd_tmout,
&optlen);
if (ret < 0) {
close(socket);
socket = -1;
goto out;
}
ret = setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &timeout,
sizeof(timeout));
if (ret < 0) {
close(socket);
socket = -1;
goto out;
}
ret = setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, &timeout,
sizeof(timeout));
if (ret < 0) {
close(socket);
socket = -1;
goto out;
}

if (connect(socket, res->ai_addr, res->ai_addrlen) == -1) {
close(socket);
Expand All @@ -1361,10 +1383,20 @@ static int rpki_create_socket(void *_cache)

pthread_setcancelstate(cancel_state, NULL);

setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &prev_rcv_tmout,
sizeof(prev_rcv_tmout));
setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, &prev_snd_tmout,
sizeof(prev_snd_tmout));
ret = setsockopt(socket, SOL_SOCKET, SO_RCVTIMEO, &prev_rcv_tmout,
sizeof(prev_rcv_tmout));
if (ret < 0) {
close(socket);
socket = -1;
goto out;
}
ret = setsockopt(socket, SOL_SOCKET, SO_SNDTIMEO, &prev_snd_tmout,
sizeof(prev_snd_tmout));
if (ret < 0) {
close(socket);
socket = -1;
goto out;
}

out:
freeaddrinfo(res);
Expand Down

0 comments on commit 14aa827

Please sign in to comment.