From ce6ea42b699d060f3c792d2ae68dea73c2e1e342 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 17 Feb 2026 16:39:35 +0900 Subject: [PATCH 1/4] bus-polkit: add one more assertion For CID#1645013. --- src/shared/bus-polkit.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/src/shared/bus-polkit.c b/src/shared/bus-polkit.c index 3d32726f4e..c000b75869 100644 --- a/src/shared/bus-polkit.c +++ b/src/shared/bus-polkit.c @@ -286,9 +286,7 @@ static int async_polkit_read_reply(sd_bus_message *reply, AsyncPolkitQuery *q) { a = ASSERT_PTR(TAKE_PTR(q->action)); if (sd_bus_message_is_method_error(reply, NULL)) { - const sd_bus_error *e; - - e = sd_bus_message_get_error(reply); + const sd_bus_error *e = ASSERT_PTR(sd_bus_message_get_error(reply)); if (bus_error_is_unknown_service(e)) { /* If PK is absent, then store this away, as it depends on the callers flags whether From 2e8cfb7cefb6efe953a12f2715534e7ed9351c19 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 17 Feb 2026 16:44:36 +0900 Subject: [PATCH 2/4] sd-bus: use bus_error_message() at several more places For CID#1645014, CID#1645016, and CID#1645017. --- src/libsystemd/sd-bus/bus-control.c | 21 +++++++++++++-------- src/libsystemd/sd-bus/sd-bus.c | 7 +++++-- 2 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/libsystemd/sd-bus/bus-control.c b/src/libsystemd/sd-bus/bus-control.c index f2338ae2b6..5368024f28 100644 --- a/src/libsystemd/sd-bus/bus-control.c +++ b/src/libsystemd/sd-bus/bus-control.c @@ -4,6 +4,7 @@ #include "alloc-util.h" #include "bus-control.h" +#include "bus-error.h" #include "bus-internal.h" #include "bus-message.h" #include "fd-util.h" @@ -136,11 +137,14 @@ static int default_request_name_handler( assert(m); if (sd_bus_message_is_method_error(m, NULL)) { - log_debug_errno(sd_bus_message_get_errno(m), - "Unable to request name, failing connection: %s", - sd_bus_message_get_error(m)->message); + const sd_bus_error *e = ASSERT_PTR(sd_bus_message_get_error(m)); + r = sd_bus_error_get_errno(e); - bus_enter_closing(sd_bus_message_get_bus(m), -sd_bus_message_get_errno(m)); + log_debug_errno(r, + "Unable to request name, failing connection: %s", + bus_error_message(e, r)); + + bus_enter_closing(sd_bus_message_get_bus(m), -r); return 1; } @@ -290,11 +294,12 @@ static int default_release_name_handler( assert(m); if (sd_bus_message_is_method_error(m, NULL)) { - log_debug_errno(sd_bus_message_get_errno(m), - "Unable to release name, failing connection: %s", - sd_bus_message_get_error(m)->message); + const sd_bus_error *e = ASSERT_PTR(sd_bus_message_get_error(m)); + r = sd_bus_error_get_errno(e); - bus_enter_closing(sd_bus_message_get_bus(m), -sd_bus_message_get_errno(m)); + log_debug_errno(r, "Unable to release name, failing connection: %s", bus_error_message(e, r)); + + bus_enter_closing(sd_bus_message_get_bus(m), -r); return 1; } diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c index 8318bc5853..9fdd8cbd66 100644 --- a/src/libsystemd/sd-bus/sd-bus.c +++ b/src/libsystemd/sd-bus/sd-bus.c @@ -3483,10 +3483,13 @@ static int add_match_callback( sd_bus_slot_ref(match_slot); if (sd_bus_message_is_method_error(m, NULL)) { - r = log_debug_errno(sd_bus_message_get_errno(m), + const sd_bus_error *e = ASSERT_PTR(sd_bus_message_get_error(m)); + r = sd_bus_error_get_errno(e); + + r = log_debug_errno(r, "Unable to add match %s, failing connection: %s", match_slot->match_callback.match_string, - sd_bus_message_get_error(m)->message); + bus_error_message(e, r)); failed = true; } else From 1a416a47e790f123f5371eb6c7a03410ec469fdb Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 17 Feb 2026 16:50:48 +0900 Subject: [PATCH 3/4] network/wwan: add missing error check Fixes CID#1645015. --- src/network/networkd-wwan-bus.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/src/network/networkd-wwan-bus.c b/src/network/networkd-wwan-bus.c index b4c63c8b6e..f3400a36cc 100644 --- a/src/network/networkd-wwan-bus.c +++ b/src/network/networkd-wwan-bus.c @@ -477,18 +477,16 @@ static int bearer_new_and_initialize(Modem *modem, const char *path) { static int modem_connect_handler(sd_bus_message *message, void *userdata, sd_bus_error *ret_error) { Modem *modem = ASSERT_PTR(userdata); - const sd_bus_error *e; - const char *new_bearer; int r; assert(message); modem->slot_connect = sd_bus_slot_unref(modem->slot_connect); - e = sd_bus_message_get_error(message); + const sd_bus_error *e = sd_bus_message_get_error(message); if (e) { r = sd_bus_error_get_errno(e); - log_full_errno(LOG_ERR, r, + log_error_errno(r, "Could not connect modem %s %s: %s", modem->manufacturer, modem->model, bus_error_message(e, r)); @@ -497,10 +495,16 @@ static int modem_connect_handler(sd_bus_message *message, void *userdata, sd_bus return 0; } - sd_bus_message_read(message, "o", &new_bearer); + const char *new_bearer; + r = sd_bus_message_read(message, "o", &new_bearer); + if (r < 0) { + log_debug_errno(r, "Received connection of %s %s from ModemManager, but bearer not found, ignoring: %m", + modem->manufacturer, modem->model); + return 0; + } + log_debug("ModemManager: %s %s connected, bearer is at %s", modem->manufacturer, modem->model, new_bearer); - return 0; } From 7a6b6c4d0736f1e218dfc30a8e8ccaf6c0e930d1 Mon Sep 17 00:00:00 2001 From: Yu Watanabe Date: Tue, 17 Feb 2026 17:02:05 +0900 Subject: [PATCH 4/4] network/wwan: fix memleak in failure path Fixes CID#1645018. --- src/network/networkd-wwan-bus.c | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/network/networkd-wwan-bus.c b/src/network/networkd-wwan-bus.c index f3400a36cc..d87cdd3441 100644 --- a/src/network/networkd-wwan-bus.c +++ b/src/network/networkd-wwan-bus.c @@ -109,16 +109,16 @@ static int map_dns( void *userdata) { Bearer *b = ASSERT_PTR(userdata); - struct in_addr_full *a; - const char *s; int r; assert(m); + const char *s; r = sd_bus_message_read_basic(m, 's', &s); if (r < 0) return r; + _cleanup_free_ struct in_addr_full *a = NULL; r = in_addr_full_new_from_string(s, &a); if (r < 0) return r; @@ -127,7 +127,6 @@ static int map_dns( return -ENOMEM; b->dns[b->n_dns++] = TAKE_PTR(a); - return 0; }