From: Yu Watanabe Date: Sun, 4 Aug 2024 05:09:53 +0000 (+0900) Subject: systemctl: gracefully adjust bus transport and runtime scope when --boot-loader-entry... X-Git-Tag: v257-rc1~729^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F33933%2Fhead;p=thirdparty%2Fsystemd.git systemctl: gracefully adjust bus transport and runtime scope when --boot-loader-entry=help This fixes the following assertion: === SYSTEMD_LOG_LEVEL=debug systemctl --user -H foo --boot-loader-entry=help Assertion 'transport != BUS_TRANSPORT_REMOTE || runtime_scope == RUNTIME_SCOPE_SYSTEM' failed at src/shared/bus-util.c:284, function bus_connect_transport(). Ignoring. Failed to connect to bus: Operation not supported === Fixes a bug introduced by 97af80c5a7029c3f92e982dcf9338b9e67ad9cde. Fixes #33661. Fixes oss-fuzz#70153. --- diff --git a/src/systemctl/systemctl-logind.c b/src/systemctl/systemctl-logind.c index a727606eea7..e4ef7cf9154 100644 --- a/src/systemctl/systemctl-logind.c +++ b/src/systemctl/systemctl-logind.c @@ -432,6 +432,14 @@ int help_boot_loader_entry(void) { sd_bus *bus; int r; + /* This is called without checking runtime scope and bus transport like we do in parse_argv(). + * Loading boot entries is only supported by system scope. Let's gracefully adjust them. */ + arg_runtime_scope = RUNTIME_SCOPE_SYSTEM; + if (arg_transport == BUS_TRANSPORT_CAPSULE) { + arg_host = NULL; + arg_transport = BUS_TRANSPORT_LOCAL; + } + r = acquire_bus(BUS_FULL, &bus); if (r < 0) return r; diff --git a/test/fuzz/fuzz-systemctl-parse-argv/oss-fuzz-70153 b/test/fuzz/fuzz-systemctl-parse-argv/oss-fuzz-70153 new file mode 100644 index 00000000000..cb874fa6c1f Binary files /dev/null and b/test/fuzz/fuzz-systemctl-parse-argv/oss-fuzz-70153 differ