]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: fd: Don't modify the update_mask in fd_dodelete().
authorOlivier Houchard <ohouchard@haproxy.com>
Tue, 19 Jun 2018 17:18:43 +0000 (19:18 +0200)
committerWilly Tarreau <w@1wt.eu>
Wed, 20 Jun 2018 08:21:44 +0000 (10:21 +0200)
Only the pollers should remove bits in the update_mask. Removing it will
mean if the fd is currently in the global update list, it will never be
removed, and while it's mostly harmless in 1.9, in 1.8, only update_mask
is checked to know if the fd is already in the list or not, so we can end
up trying to add a fd that is already in the list, and corrupt it, which
means some fd may not be added to the poller.

This should be backported to 1.8.

src/fd.c

index aaba1767ef35aae45b532aaf68dc3adbd928742b..3b023a8b05bd4ef14f03f2bfcfbf815120982969 100644 (file)
--- a/src/fd.c
+++ b/src/fd.c
@@ -371,7 +371,6 @@ static void fd_dodelete(int fd, int do_close)
        port_range_release_port(fdinfo[fd].port_range, fdinfo[fd].local_port);
        fdinfo[fd].port_range = NULL;
        fdtab[fd].owner = NULL;
-       fdtab[fd].update_mask &= ~tid_bit;
        fdtab[fd].thread_mask = 0;
        if (do_close) {
                polled_mask[fd] = 0;