]> git.puffer.fish Git - matthieu/frr.git/commitdiff
bgpd: fix covery ID 1585206
authorPhilippe Guibert <philippe.guibert@6wind.com>
Mon, 29 Apr 2024 13:43:29 +0000 (15:43 +0200)
committerPhilippe Guibert <philippe.guibert@6wind.com>
Mon, 29 Apr 2024 13:44:24 +0000 (15:44 +0200)
The return value of bgp_getsockname() should always be
checked.

Signed-off-by: Philippe Guibert <philippe.guibert@6wind.com>
bgpd/bgp_fsm.c

index 7866adbdcdb806e019e93676eb72f7be59ffa505..6ec26d35f50905cfa7ccb92e4829d11369657f63 100644 (file)
@@ -1801,14 +1801,18 @@ bgp_connect_fail(struct peer_connection *connection)
  */
 static void bgp_connect_in_progress_update_connection(struct peer *peer)
 {
-       bgp_getsockname(peer);
-       if (!peer->su_remote && !BGP_CONNECTION_SU_UNSPEC(peer->connection)) {
-               /* if connect initiated, then dest port and dest addresses are well known */
-               peer->su_remote = sockunion_dup(&peer->connection->su);
-               if (sockunion_family(peer->su_remote) == AF_INET)
-                       peer->su_remote->sin.sin_port = htons(peer->port);
-               else if (sockunion_family(peer->su_remote) == AF_INET6)
-                       peer->su_remote->sin6.sin6_port = htons(peer->port);
+       if (bgp_getsockname(peer) < 0) {
+               if (!peer->su_remote &&
+                   !BGP_CONNECTION_SU_UNSPEC(peer->connection)) {
+                       /* if connect initiated, then dest port and dest addresses are well known */
+                       peer->su_remote = sockunion_dup(&peer->connection->su);
+                       if (sockunion_family(peer->su_remote) == AF_INET)
+                               peer->su_remote->sin.sin_port =
+                                       htons(peer->port);
+                       else if (sockunion_family(peer->su_remote) == AF_INET6)
+                               peer->su_remote->sin6.sin6_port =
+                                       htons(peer->port);
+               }
        }
 }