]> git.ipfire.org Git - thirdparty/haproxy.git/commitdiff
BUG/MEDIUM: fd: Don't fd_stop_recv() a fd we don't own.
authorOlivier Houchard <cognet@ci0.org>
Wed, 17 Jun 2020 18:32:34 +0000 (20:32 +0200)
committerOlivier Houchard <cognet@ci0.org>
Wed, 17 Jun 2020 18:36:28 +0000 (20:36 +0200)
In fd_takeover(), if we failed to grab the fd, when a double-width
compare-and-swap is not implemented, do not call fd_stop_recv() on the
fd, it is not ours and may be used by another thread.

src/fd.c

index b0a16841e0a3de7bf52db130fd45b467d2d36dd7..1fcf1d43c7d951836fdcb3d1eba3257768aa824c 100644 (file)
--- a/src/fd.c
+++ b/src/fd.c
@@ -362,7 +362,8 @@ end:
         * the fd is polled by the thread that used to own it, the new thread
         * is supposed to call subscribe() later, to activate polling.
         */
-       fd_stop_recv(fd);
+       if (ret != -1)
+               fd_stop_recv(fd);
        return ret;
 #else
        unsigned long old_masks[2];