]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: cli: fix "show fd" crash when dumping closed FDs
authorWilly Tarreau <w@1wt.eu>
Wed, 4 Oct 2017 18:24:54 +0000 (20:24 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 4 Oct 2017 18:28:26 +0000 (20:28 +0200)
I misplaced the "if (!fdt.owner)" test so it can occasionally crash
when dumping an fd that's already been closed but still appears in
the table. It's not critical since this was not pushed into any
release nor backported though.

src/cli.c

index f1f0977a7503fba962a4a118bf134583e631f7a1..bfed024a82d0c7a40ec5542049bf03a7ff8bd9fc 100644 (file)
--- a/src/cli.c
+++ b/src/cli.c
@@ -812,6 +812,9 @@ static int cli_io_handler_show_fd(struct appctx *appctx)
 
                fdt = fdtab[fd];
 
+               if (!fdt.owner)
+                       goto skip; // closed
+
                if (fdt.iocb == conn_fd_handler) {
                        conn_flags = ((struct connection *)fdt.owner)->flags;
                        li = objt_listener(((struct connection *)fdt.owner)->target);
@@ -821,9 +824,6 @@ static int cli_io_handler_show_fd(struct appctx *appctx)
                else if (fdt.iocb == listener_accept)
                        li = fdt.owner;
 
-               if (!fdt.owner)
-                       goto skip; // closed
-
                chunk_printf(&trash,
                             "  %5d : st=0x%02x(R:%c%c%c W:%c%c%c) ev=0x%02x(%c%c%c%c%c) [%c%c%c%c] cache=%u owner=%p iocb=%p(%s)",
                             fd,