Index | Thread | Search

From:
Claudio Jeker <cjeker@diehard.n-r-g.com>
Subject:
bgpd: don't fatal when parent closes imsg socket
To:
tech@openbsd.org
Date:
Wed, 29 Oct 2025 16:04:41 +0100

Download raw body.

Thread
The RTR and RDE process fatal when the parent closes the imsg connection.
This is not ideal since that happens when one of the other processes dies
and the parent exits. So this kind of hides the real reason further up in
the log.

The SE already does the right thing so just use that idiom and quit the
main event loop ASAP and exit out.

-- 
:wq Claudio

Index: rde.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rde.c,v
diff -u -p -r1.658 rde.c
--- rde.c	29 Oct 2025 10:34:23 -0000	1.658
+++ rde.c	29 Oct 2025 14:58:30 -0000
@@ -272,9 +272,11 @@ rde_main(int debug, int verbose)
 			fatal("poll error");
 		}
 
-		if (handle_pollfd(&pfd[PFD_PIPE_MAIN], ibuf_main) == -1)
-			fatalx("Lost connection to parent");
-		else
+		if (handle_pollfd(&pfd[PFD_PIPE_MAIN], ibuf_main) == -1) {
+			log_warnx("RDE: Lost connection to parent");
+			rde_quit = 1;
+			continue;
+		} else
 			rde_dispatch_imsg_parent(ibuf_main);
 
 		if (handle_pollfd(&pfd[PFD_PIPE_SESSION], ibuf_se) == -1) {
Index: rtr.c
===================================================================
RCS file: /cvs/src/usr.sbin/bgpd/rtr.c,v
diff -u -p -r1.31 rtr.c
--- rtr.c	14 Apr 2025 14:50:29 -0000	1.31
+++ rtr.c	29 Oct 2025 14:58:30 -0000
@@ -264,9 +264,11 @@ rtr_main(int debug, int verbose)
 			fatal("poll error");
 		}
 
-		if (handle_pollfd(&pfd[PFD_PIPE_MAIN], ibuf_main) == -1)
-			fatalx("Lost connection to parent");
-		else
+		if (handle_pollfd(&pfd[PFD_PIPE_MAIN], ibuf_main) == -1) {
+			log_warnx("RTR: Lost connection to parent");
+			rtr_quit = 1;
+			continue;
+		} else
 			rtr_dispatch_imsg_parent(ibuf_main);
 
 		if (handle_pollfd(&pfd[PFD_PIPE_RDE], ibuf_rde) == -1) {