From cae58298dd70630e722beedcf671b098ef172dbd Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 4 Jan 2024 12:41:31 +0100 Subject: [PATCH 1/6] core: fix OOM check Follow-up for 84c01612de805d88875d4d91cfcf73cf10f99447 CID#1533114 --- src/core/cgroup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/cgroup.c b/src/core/cgroup.c index 411f59d55d..bc1e601cf1 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -216,7 +216,7 @@ int cgroup_context_add_io_device_limit_dup(CGroupContext *c, CGroupIODeviceLimit assert(l); n = new0(CGroupIODeviceLimit, 1); - if (!l) + if (!n) return -ENOMEM; n->path = strdup(l->path); From 2717d36d9dee88cd99be3786908bb9d9784d819a Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 4 Jan 2024 12:42:23 +0100 Subject: [PATCH 2/6] core: fix cgroup copy Follow-up for 84c01612de805d88875d4d91cfcf73cf10f99447 CID#1533113 --- src/core/cgroup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/cgroup.c b/src/core/cgroup.c index bc1e601cf1..e8ba01037a 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -353,7 +353,7 @@ int cgroup_context_copy(CGroupContext *dst, const CGroupContext *src) { dst->tasks_accounting = src->tasks_accounting; dst->ip_accounting = src->ip_accounting; - dst->memory_oom_group = dst->memory_oom_group; + dst->memory_oom_group = src->memory_oom_group; dst->cpu_weight = src->cpu_weight; dst->startup_cpu_weight = src->startup_cpu_weight; From c658ad79f0ca15a4c8be23744e6ee9d34b1ab2b8 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 4 Jan 2024 12:44:31 +0100 Subject: [PATCH 3/6] core: add an assert to guide static analysis Follow-up for 4fb0d2dc140c9a2c01c236d2a8dc09a44157e896 CID#1533110 --- src/core/cgroup.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/core/cgroup.c b/src/core/cgroup.c index e8ba01037a..3cd0490255 100644 --- a/src/core/cgroup.c +++ b/src/core/cgroup.c @@ -4572,7 +4572,7 @@ static uint64_t unit_get_effective_limit_one(Unit *u, CGroupLimitType type) { assert_not_reached(); } - cc = unit_get_cgroup_context(u); + cc = ASSERT_PTR(unit_get_cgroup_context(u)); switch (type) { /* Note: on legacy/hybrid hierarchies memory_max stays CGROUP_LIMIT_MAX unless configured * explicitly. Effective value of MemoryLimit= (cgroup v1) is not implemented. */ From 43108bf87a432663e58d65d3e7f022779e626fd9 Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 4 Jan 2024 12:47:18 +0100 Subject: [PATCH 4/6] dissect: add assert to guide static analysis CID#1533112 --- src/dissect/dissect.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/dissect/dissect.c b/src/dissect/dissect.c index 10af26888e..ce4a99bc0b 100644 --- a/src/dissect/dissect.c +++ b/src/dissect/dissect.c @@ -1709,6 +1709,8 @@ static int action_detach(const char *path) { struct stat st; int r; + assert(path); + fd = open(path, O_PATH|O_CLOEXEC); if (fd < 0) return log_error_errno(errno, "Failed to open '%s': %m", path); From 5af0f171f94a18ae0807679f45c757ebb146b35f Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 4 Jan 2024 12:52:25 +0100 Subject: [PATCH 5/6] udev: add upper bound of 5 hours to SYSTEMD_UDEV_EXTRA_TIMEOUT_SEC= Follow-up for b16c6076cb334c9da9602d4bafbf60381d6d630e CID#1533111 --- docs/ENVIRONMENT.md | 3 ++- src/udev/udev-manager.c | 8 +++++++- 2 files changed, 9 insertions(+), 2 deletions(-) diff --git a/docs/ENVIRONMENT.md b/docs/ENVIRONMENT.md index b9a96be82c..0113fd59fa 100644 --- a/docs/ENVIRONMENT.md +++ b/docs/ENVIRONMENT.md @@ -253,7 +253,8 @@ All tools: udev manager process waits for a worker process kills slow programs specified by IMPORT{program}=, PROGRAM=, or RUN=, and finalizes the processing event. If the worker process cannot finalize the event within the specified timespan, - the worker process is killed by the manager process. Defaults to 10 seconds. + the worker process is killed by the manager process. Defaults to 10 seconds, + maximum allowed is 5 hours. `udevadm` and `systemd-hwdb`: diff --git a/src/udev/udev-manager.c b/src/udev/udev-manager.c index 5bf00bb262..31944c2247 100644 --- a/src/udev/udev-manager.c +++ b/src/udev/udev-manager.c @@ -335,6 +335,7 @@ static int on_event_timeout_warning(sd_event_source *s, uint64_t usec, void *use static usec_t extra_timeout_usec(void) { static usec_t saved = 10 * USEC_PER_SEC; static bool parsed = false; + usec_t timeout; const char *e; int r; @@ -347,10 +348,15 @@ static usec_t extra_timeout_usec(void) { if (!e) return saved; - r = parse_sec(e, &saved); + r = parse_sec(e, &timeout); if (r < 0) log_debug_errno(r, "Failed to parse $SYSTEMD_UDEV_EXTRA_TIMEOUT_SEC=%s, ignoring: %m", e); + if (timeout > 5 * USEC_PER_HOUR) /* Add an arbitrary upper bound */ + log_debug("Parsed $SYSTEMD_UDEV_EXTRA_TIMEOUT_SEC=%s is too large, ignoring.", e); + else + saved = timeout; + return saved; } From 1323a222d2ba3e1774477f381d8c3ea6aaa573ec Mon Sep 17 00:00:00 2001 From: Luca Boccassi Date: Thu, 4 Jan 2024 12:55:51 +0100 Subject: [PATCH 6/6] sd-dhcp-client: add assert_not_reached in switch case Tell static analysis that r is always initialised Follow-up for 1809132064d2fd3479e316b615cd05698984852c CID#1533109 --- src/libsystemd-network/sd-dhcp-client-id.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/libsystemd-network/sd-dhcp-client-id.c b/src/libsystemd-network/sd-dhcp-client-id.c index 6feec25adf..da5fcaa450 100644 --- a/src/libsystemd-network/sd-dhcp-client-id.c +++ b/src/libsystemd-network/sd-dhcp-client-id.c @@ -135,6 +135,8 @@ int sd_dhcp_client_id_to_string(const sd_dhcp_client_id *client_id, char **ret) r = asprintf(&t, "IAID:0x%x/DUID", iaid); } break; + default: + assert_not_reached(); } if (r < 0) return -ENOMEM;