Download raw body.
bgpd: plug leaks in bgpd_rtr_conn_setup()
If one of the setsockopt() fails, we leak the socket and ce, so use the
cleanup path. Fix copy-paste in a log_warn() while there.
CID 492362
Index: bgpd.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/bgpd.c,v
diff -u -p -r1.283 bgpd.c
--- bgpd.c 24 Apr 2025 20:24:12 -0000 1.283
+++ bgpd.c 3 Nov 2025 10:08:17 -0000
@@ -1404,14 +1404,14 @@ bgpd_rtr_conn_setup(struct rtr_config *r
if (setsockopt(ce->fd, IPPROTO_IP, IP_TOS, &pre, sizeof(pre)) ==
-1) {
log_warn("rtr %s: setsockopt IP_TOS", r->descr);
- return;
+ goto fail;
}
break;
case AID_INET6:
if (setsockopt(ce->fd, IPPROTO_IPV6, IPV6_TCLASS, &pre,
sizeof(pre)) == -1) {
- log_warn("rtr %s: setsockopt IP_TOS", r->descr);
- return;
+ log_warn("rtr %s: setsockopt IPV6_TCLASS", r->descr);
+ goto fail;
}
break;
}
@@ -1419,7 +1419,7 @@ bgpd_rtr_conn_setup(struct rtr_config *r
if (setsockopt(ce->fd, IPPROTO_TCP, TCP_NODELAY, &nodelay,
sizeof(nodelay)) == -1) {
log_warn("rtr %s: setsockopt TCP_NODELAY", r->descr);
- return;
+ goto fail;
}
if (tcp_md5_set(ce->fd, &r->auth, &r->remote_addr) == -1)
bgpd: plug leaks in bgpd_rtr_conn_setup()