45 lines
1.8 KiB
Diff
45 lines
1.8 KiB
Diff
From d5f8890bbf375075c7042b31ff6e79ad491df04c Mon Sep 17 00:00:00 2001
|
|
From: "Dmitry V. Levin" <ldv@strace.io>
|
|
Date: Fri, 7 Jul 2023 08:00:00 +0000
|
|
Subject: [PATCH] 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.
|
|
|
|
Conflict:NA
|
|
Reference:https://github.com/systemd/systemd-stable/commit/d5f8890bbf375075c7042b31ff6e79ad491df04c
|
|
|
|
---
|
|
src/core/socket.c | 8 +++++---
|
|
1 file changed, 5 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/core/socket.c b/src/core/socket.c
|
|
index d72194f20b..03b8cbd164 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;
|
|
|
|
--
|
|
2.39.1
|
|
|