From: Theo Buehler Subject: bgpd: plug leaks in bgpd_rtr_conn_setup() To: tech@openbsd.org Date: Mon, 3 Nov 2025 11:19:14 +0100 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)