From d4d356c6c2ed5ea0b15c6fd49a29badb022c217e Mon Sep 17 00:00:00 2001 From: "Dmitry V. Levin" Date: Fri, 7 Jul 2023 08:00:00 +0000 Subject: [PATCH] sd-bus: 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 bus_socket_process_watch_bind(), bus_socket_process_opening(), and bus_socket_process_authenticating() which can legitimately return positive values without errno semantics, so fix this by moving the ERRNO_IS_DISCONNECT() invocation to the branch where the return value is known to be negative. (cherry picked from commit bb228f0ebc9b691ee2a871bffbf949936568f3ea) (cherry picked from commit 920568b7e213162babcbe0c0cdd4e2fe28882ebd) Conflict:code context adaptation Reference:https://github.com/systemd/systemd-stable/commit/d4d356c6c2ed5ea0b15c6fd49a29badb022c217e --- src/libsystemd/sd-bus/sd-bus.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index d6a3177d39..d2c68688ad 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -3236,11 +3236,13 @@ static int bus_process_internal(sd_bus *bus, sd_bus_message **ret) { assert_not_reached("Unknown state"); } - if (ERRNO_IS_DISCONNECT(r)) { - bus_enter_closing(bus); - r = 1; - } else if (r < 0) - return r; + if (r < 0) { + if (ERRNO_IS_DISCONNECT(r)) { + bus_enter_closing(bus); + r = 1; + } else + return r; + } if (ret) *ret = NULL; -- 2.33.0