]> git.kaiwu.me - haproxy.git/commit
MEDIUM: proto_ux: properly suspend named UNIX listeners
authorAurelien DARRAGON <adarragon@haproxy.com>
Wed, 22 Feb 2023 13:34:28 +0000 (14:34 +0100)
committerChristopher Faulet <cfaulet@haproxy.com>
Thu, 23 Feb 2023 14:05:05 +0000 (15:05 +0100)
commit2338dba18db3a895fd394a6c07544f03c7f39167
treec1dc508b873e1601e321c982de40d2fa87f12d0a
parent2a7903bbb2102867132d9821913c51cb1b938962
MEDIUM: proto_ux: properly suspend named UNIX listeners

When a listener is suspended, we expect that it may not process any data for
the time it is suspended.

Yet for named UNIX socket, as the suspend operation is a no-op at the proto
level, recv events on the socket may still be processed by the polling loop.

This is quite disturbing as someone may rely on a paused proxy being harmless,
which is true for all protos except for named UNIX sockets.

To fix this behavior, we explicitely disable io recv events when suspending a
named UNIX socket listener (we call disable() method on the listener).

The io recv events will automatically be restored when the listener is resumed
since the l->enable() method is called at the end of the resume() operation.

This could be backported up to 2.4 after a reasonable observation
period to make sure that this change doesn't cause unwanted side-effects.
src/proto_uxdg.c
src/proto_uxst.c