From: Dmitry V. Levin Date: Fri, 7 Jul 2023 08:00:00 +0000 (+0000) Subject: socket: fix use of ERRNO_IS_DISCONNECT() X-Git-Tag: v254-rc3~37^2~3 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=d5f8890bbf375075c7042b31ff6e79ad491df04c;p=thirdparty%2Fsystemd.git socket: fix use of ERRNO_IS_DISCONNECT() Given that ERRNO_IS_DISCONNECT() also matches positive values, make sure this macro is not called with arguments that do not have errno semantics. In this case the argument passed to ERRNO_IS_DISCONNECT() is the value returned by socket_acquire_peer() which can legitimately return 1 without errno semantics, so fix this by moving ERRNO_IS_DISCONNECT() invocation to the branch where the return value is known to be negative. --- diff --git a/src/core/socket.c b/src/core/socket.c index d72194f20b5..03b8cbd164a 100644 --- a/src/core/socket.c +++ b/src/core/socket.c @@ -2358,10 +2358,12 @@ static void socket_enter_running(Socket *s, int cfd_in) { if (s->max_connections_per_source > 0) { r = socket_acquire_peer(s, cfd, &p); - if (ERRNO_IS_DISCONNECT(r)) - return; - if (r < 0) /* We didn't have enough resources to acquire peer information, let's fail. */ + if (r < 0) { + if (ERRNO_IS_DISCONNECT(r)) + return; + /* We didn't have enough resources to acquire peer information, let's fail. */ goto fail; + } if (r > 0 && p->n_ref > s->max_connections_per_source) { _cleanup_free_ char *t = NULL;