diff --git a/0485-man-fix-a-missing-word.patch b/0485-man-fix-a-missing-word.patch new file mode 100644 index 0000000..eb335b8 --- /dev/null +++ b/0485-man-fix-a-missing-word.patch @@ -0,0 +1,27 @@ +From bf6cdeda171f12b8a9e949de869dd2168ea7ee5f Mon Sep 17 00:00:00 2001 +From: Frantisek Sumsal +Date: Wed, 8 Oct 2025 17:23:31 +0200 +Subject: [PATCH] man: fix a missing word + +Follow-up for 6d48c7cf736ced70c1c2fef1e1f03618911d04bc. + +(cherry picked from commit 67111e1bd918f9e1b4b542d1e0fe84f1d571876e) + +Resolves: RHEL-120277 +--- + man/systemd.resource-control.xml | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/man/systemd.resource-control.xml b/man/systemd.resource-control.xml +index 5ad9793c7a..e4403e7274 100644 +--- a/man/systemd.resource-control.xml ++++ b/man/systemd.resource-control.xml +@@ -583,7 +583,7 @@ CPUWeight=20 DisableControllers=cpu / \ + an absolute number of tasks or a percentage value that is taken relative to the configured maximum + number of tasks on the system. If assigned the special value infinity, no tasks + limit is applied. This controls the pids.max control group attribute. For +- details about this control group attribute, the ++ details about this control group attribute, see the + pids controller + . + The effective configuration is reported as EffectiveTasksMax=. diff --git a/0486-sd_bus_open_user_machine-Don-t-shortcut-without-nece.patch b/0486-sd_bus_open_user_machine-Don-t-shortcut-without-nece.patch new file mode 100644 index 0000000..901d289 --- /dev/null +++ b/0486-sd_bus_open_user_machine-Don-t-shortcut-without-nece.patch @@ -0,0 +1,33 @@ +From 7eea09ef7498cfe000e6cc4310ae64bb59d5bfa0 Mon Sep 17 00:00:00 2001 +From: Daan De Meyer +Date: Mon, 17 Mar 2025 12:28:37 +0100 +Subject: [PATCH] sd_bus_open_user_machine(): Don't shortcut without necessary + env + +Don't shortcut if we don't have the necessary environment variables +set in sd_bus_open_user_machine(). + +(cherry picked from commit 9e34c34b7b027da24b084a58246c1d88bdbcc817) + +Resolves: RHEL-129179 +--- + src/libsystemd/sd-bus/sd-bus.c | 6 ++++-- + 1 file changed, 4 insertions(+), 2 deletions(-) + +diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c +index 2683959db5..3ea12fc371 100644 +--- a/src/libsystemd/sd-bus/sd-bus.c ++++ b/src/libsystemd/sd-bus/sd-bus.c +@@ -1760,8 +1760,10 @@ _public_ int sd_bus_open_user_machine(sd_bus **ret, const char *user_and_machine + assert_return(user_and_machine, -EINVAL); + assert_return(ret, -EINVAL); + +- /* Shortcut things if we'd end up on this host and as the same user. */ +- if (user_and_machine_equivalent(user_and_machine)) ++ /* Shortcut things if we'd end up on this host and as the same user and have one of the necessary ++ * environment variables set already. */ ++ if (user_and_machine_equivalent(user_and_machine) && ++ (secure_getenv("DBUS_SESSION_BUS_ADDRESS") || secure_getenv("XDG_RUNTIME_DIR"))) + return sd_bus_open_user(ret); + + r = user_and_machine_valid(user_and_machine); diff --git a/0487-udev-set-clock-group-for-PTP-and-RTC-devices.patch b/0487-udev-set-clock-group-for-PTP-and-RTC-devices.patch new file mode 100644 index 0000000..16707a3 --- /dev/null +++ b/0487-udev-set-clock-group-for-PTP-and-RTC-devices.patch @@ -0,0 +1,90 @@ +From 7f38c74a532b536c2f8b2e3a948ab1391387adca Mon Sep 17 00:00:00 2001 +From: Miroslav Lichvar +Date: Thu, 16 Jan 2025 15:34:47 +0100 +Subject: [PATCH] udev: set clock group for PTP and RTC devices + +Add a new group for clock devices to enable applications like linuxptp +to open clocks without root privileges. + +(cherry picked from commit af96ccfc24bc4803078a46b4ef2cdeb5decdfbcd) + +Resolves: RHEL-113051 +--- + README | 3 ++- + meson.build | 1 + + meson_options.txt | 2 ++ + rules.d/50-udev-default.rules.in | 2 ++ + sysusers.d/basic.conf.in | 1 + + 5 files changed, 8 insertions(+), 1 deletion(-) + +diff --git a/README b/README +index 9b84bf7e7a..b9a58389ad 100644 +--- a/README ++++ b/README +@@ -351,7 +351,8 @@ USERS AND GROUPS: + need to be resolvable by getgrnam() at any time, even in the very early + boot stages, where no other databases and network are available: + +- audio, cdrom, dialout, disk, input, kmem, kvm, lp, render, tape, tty, video ++ audio, cdrom, clock, dialout, disk, input, kmem, kvm, lp, render, tape, ++ tty, video + + During runtime, the journal daemon requires the "systemd-journal" system + group to exist. New journal files will be readable by this group (but +diff --git a/meson.build b/meson.build +index cfb202eb30..873d70f8d3 100644 +--- a/meson.build ++++ b/meson.build +@@ -950,6 +950,7 @@ static_ugids = [] + foreach option : ['adm-gid', + 'audio-gid', + 'cdrom-gid', ++ 'clock-gid', + 'dialout-gid', + 'disk-gid', + 'input-gid', +diff --git a/meson_options.txt b/meson_options.txt +index f30b3f5238..78b7c5fe30 100644 +--- a/meson_options.txt ++++ b/meson_options.txt +@@ -289,6 +289,8 @@ option('audio-gid', type : 'integer', value : 0, + description : 'soft-static allocation for the "audio" group') + option('cdrom-gid', type : 'integer', value : 0, + description : 'soft-static allocation for the "cdrom" group') ++option('clock-gid', type : 'integer', value : 0, ++ description : 'soft-static allocation for the "clock" group') + option('dialout-gid', type : 'integer', value : 0, + description : 'soft-static allocation for the "dialout" group') + option('disk-gid', type : 'integer', value : 0, +diff --git a/rules.d/50-udev-default.rules.in b/rules.d/50-udev-default.rules.in +index 08b2de7047..9264b8e021 100644 +--- a/rules.d/50-udev-default.rules.in ++++ b/rules.d/50-udev-default.rules.in +@@ -10,6 +10,7 @@ SUBSYSTEM=="block", KERNEL=="md*", ENV{ID_IGNORE_DISKSEQ}="1" + + SUBSYSTEM=="virtio-ports", KERNEL=="vport*", ATTR{name}=="?*", SYMLINK+="virtio-ports/$attr{name}" + ++SUBSYSTEM=="rtc", GROUP="clock", MODE="0660" + # select "system RTC" or just use the first one + SUBSYSTEM=="rtc", ATTR{hctosys}=="1", SYMLINK+="rtc" + SUBSYSTEM=="rtc", KERNEL=="rtc0", SYMLINK+="rtc", OPTIONS+="link_priority=-100" +@@ -30,6 +31,7 @@ SUBSYSTEM=="pci|usb|platform", IMPORT{builtin}="path_id" + + SUBSYSTEM=="net", IMPORT{builtin}="net_driver" + ++SUBSYSTEM=="ptp", GROUP="clock", MODE="0660" + SUBSYSTEM=="ptp", ATTR{clock_name}=="KVM virtual PTP", SYMLINK+="ptp_kvm" + SUBSYSTEM=="ptp", ATTR{clock_name}=="hyperv", SYMLINK+="ptp_hyperv" + SUBSYSTEM=="ptp", ATTR{clock_name}=="s390 Physical Clock", SYMLINK+="ptp_s390_physical" +diff --git a/sysusers.d/basic.conf.in b/sysusers.d/basic.conf.in +index 992af346ca..baf31cb739 100644 +--- a/sysusers.d/basic.conf.in ++++ b/sysusers.d/basic.conf.in +@@ -25,6 +25,7 @@ g utmp {{UTMP_GID }} - - + # Physical and virtual hardware access groups + g audio {{AUDIO_GID }} - - + g cdrom {{CDROM_GID }} - - ++g clock {{CLOCK_GID }} - - + g dialout {{DIALOUT_GID}} - - + g disk {{DISK_GID }} - - + g input {{INPUT_GID }} - - diff --git a/0488-coredump-handle-ENOBUFS-and-EMSGSIZE-the-same-way.patch b/0488-coredump-handle-ENOBUFS-and-EMSGSIZE-the-same-way.patch new file mode 100644 index 0000000..143c69e --- /dev/null +++ b/0488-coredump-handle-ENOBUFS-and-EMSGSIZE-the-same-way.patch @@ -0,0 +1,34 @@ +From f8037b1e24bf9fa72611fa1dd1492914ac2af7f9 Mon Sep 17 00:00:00 2001 +From: Michal Sekletar +Date: Fri, 24 Oct 2025 12:55:20 +0200 +Subject: [PATCH] coredump: handle ENOBUFS and EMSGSIZE the same way + +Depending on the runtime configuration, e.g. sysctls +net.core.wmem_default= and net.core.rmem_default and on the actual +message size, sendmsg() can fail also with ENOBUFS. E.g. alloc_skb() +failure caused by net.core.[rw]mem_default=64MiB and huge fdinfo list +from process that has 90k opened FDs. + +We should handle this case in the same way as EMSGSIZE and drop part of +the message. + +(cherry picked from commit 28e62e684b631f928f1d857b04f45f0d34441675) + +Resolves: RHEL-126122 +--- + src/coredump/coredump.c | 2 +- + 1 file changed, 1 insertion(+), 1 deletion(-) + +diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c +index 412411bff7..ea4f8805f4 100644 +--- a/src/coredump/coredump.c ++++ b/src/coredump/coredump.c +@@ -1287,7 +1287,7 @@ static int send_iovec(const struct iovec_wrapper *iovw, int input_fd, PidRef *pi + if (sendmsg(fd, &mh, MSG_NOSIGNAL) >= 0) + break; + +- if (errno == EMSGSIZE && mh.msg_iov[0].iov_len > 0) { ++ if (IN_SET(errno, EMSGSIZE, ENOBUFS) && mh.msg_iov[0].iov_len > 0) { + /* This field didn't fit? That's a pity. Given that this is + * just metadata, let's truncate the field at half, and try + * again. We append three dots, in order to show that this is diff --git a/0489-strv-introduce-string_strv_hashmap_remove.patch b/0489-strv-introduce-string_strv_hashmap_remove.patch new file mode 100644 index 0000000..f9dcb2e --- /dev/null +++ b/0489-strv-introduce-string_strv_hashmap_remove.patch @@ -0,0 +1,84 @@ +From 29d63497e76eb54b060ec53614034951d6c7e454 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 28 Jan 2025 08:50:14 +0900 +Subject: [PATCH] strv: introduce string_strv_hashmap_remove() + +(cherry picked from commit c540875cd3b024f64980966376637ecc284d643c) + +Related: RHEL-126937 +--- + src/basic/strv.c | 17 +++++++++++++++++ + src/basic/strv.h | 4 ++++ + src/test/test-hashmap-plain.c | 16 ++++++++++++++++ + 3 files changed, 37 insertions(+) + +diff --git a/src/basic/strv.c b/src/basic/strv.c +index c9c4551cdc..bbe0868226 100644 +--- a/src/basic/strv.c ++++ b/src/basic/strv.c +@@ -1065,6 +1065,23 @@ int fputstrv(FILE *f, char * const *l, const char *separator, bool *space) { + + DEFINE_PRIVATE_HASH_OPS_FULL(string_strv_hash_ops, char, string_hash_func, string_compare_func, free, char*, strv_free); + ++void string_strv_hashmap_remove(Hashmap *h, const char *key, const char *value) { ++ assert(key); ++ ++ if (value) { ++ char **l = hashmap_get(h, key); ++ if (!l) ++ return; ++ ++ strv_remove(l, value); ++ if (!strv_isempty(l)) ++ return; ++ } ++ ++ _unused_ _cleanup_free_ char *key_free = NULL; ++ strv_free(hashmap_remove2(h, key, (void**) &key_free)); ++} ++ + static int string_strv_hashmap_put_internal(Hashmap *h, const char *key, const char *value) { + char **l; + int r; +diff --git a/src/basic/strv.h b/src/basic/strv.h +index 86ba06f835..5cdc801f35 100644 +--- a/src/basic/strv.h ++++ b/src/basic/strv.h +@@ -258,6 +258,10 @@ int fputstrv(FILE *f, char * const *l, const char *separator, bool *space); + #define strv_free_and_replace(a, b) \ + free_and_replace_full(a, b, strv_free) + ++void string_strv_hashmap_remove(Hashmap *h, const char *key, const char *value); ++static inline void string_strv_ordered_hashmap_remove(OrderedHashmap *h, const char *key, const char *value) { ++ string_strv_hashmap_remove(PLAIN_HASHMAP(h), key, value); ++} + int _string_strv_hashmap_put(Hashmap **h, const char *key, const char *value HASHMAP_DEBUG_PARAMS); + int _string_strv_ordered_hashmap_put(OrderedHashmap **h, const char *key, const char *value HASHMAP_DEBUG_PARAMS); + #define string_strv_hashmap_put(h, k, v) _string_strv_hashmap_put(h, k, v HASHMAP_DEBUG_SRC_ARGS) +diff --git a/src/test/test-hashmap-plain.c b/src/test/test-hashmap-plain.c +index e1485a84d4..0fd4116d8a 100644 +--- a/src/test/test-hashmap-plain.c ++++ b/src/test/test-hashmap-plain.c +@@ -992,6 +992,22 @@ TEST(string_strv_hashmap) { + + s = hashmap_get(m, "xxx"); + assert_se(strv_equal(s, STRV_MAKE("bar", "BAR"))); ++ ++ string_strv_hashmap_remove(m, "foo", "bar"); ++ ASSERT_NOT_NULL(s = hashmap_get(m, "foo")); ++ ASSERT_TRUE(strv_equal(s, STRV_MAKE("BAR"))); ++ ++ string_strv_hashmap_remove(m, "foo", "BAR"); ++ ASSERT_NULL(hashmap_get(m, "foo")); ++ ++ string_strv_hashmap_remove(m, "xxx", "BAR"); ++ ASSERT_NOT_NULL(s = hashmap_get(m, "xxx")); ++ ASSERT_TRUE(strv_equal(s, STRV_MAKE("bar"))); ++ ++ string_strv_hashmap_remove(m, "xxx", "bar"); ++ ASSERT_NULL(hashmap_get(m, "xxx")); ++ ++ ASSERT_TRUE(hashmap_isempty(m)); + } + + TEST(hashmap_dump_sorted) { diff --git a/0490-unit-file-introduce-unit_file_remove_from_name_map.patch b/0490-unit-file-introduce-unit_file_remove_from_name_map.patch new file mode 100644 index 0000000..daefd3b --- /dev/null +++ b/0490-unit-file-introduce-unit_file_remove_from_name_map.patch @@ -0,0 +1,183 @@ +From 08842799a6656ea0de3921842b2e157b032b46b5 Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 28 Jan 2025 09:55:12 +0900 +Subject: [PATCH] unit-file: introduce unit_file_remove_from_name_map() + +(cherry picked from commit d8b34aaef24599917d4e7fa04c78fffac3afe7cf) + +Related: RHEL-126937 +--- + src/shared/unit-file.c | 35 +++++++++++++++++ + src/shared/unit-file.h | 8 ++++ + src/test/test-unit-file.c | 81 +++++++++++++++++++++++++++++++++++++++ + 3 files changed, 124 insertions(+) + +diff --git a/src/shared/unit-file.c b/src/shared/unit-file.c +index 5bb580285c..01e10c596d 100644 +--- a/src/shared/unit-file.c ++++ b/src/shared/unit-file.c +@@ -616,6 +616,41 @@ int unit_file_build_name_map( + return 1; + } + ++int unit_file_remove_from_name_map( ++ const LookupPaths *lp, ++ uint64_t *cache_timestamp_hash, ++ Hashmap **unit_ids_map, ++ Hashmap **unit_names_map, ++ Set **path_cache, ++ const char *path) { ++ ++ int r; ++ ++ assert(path); ++ ++ /* This assumes the specified path is already removed, and drops the relevant entries from the maps. */ ++ ++ /* If one of the lookup paths we are monitoring is already changed, let's rebuild the map. Then, the ++ * new map should not contain entries relevant to the specified path. */ ++ r = unit_file_build_name_map(lp, cache_timestamp_hash, unit_ids_map, unit_names_map, path_cache); ++ if (r != 0) ++ return r; ++ ++ /* If not, drop the relevant entries. */ ++ ++ _cleanup_free_ char *name = NULL; ++ r = path_extract_filename(path, &name); ++ if (r < 0) ++ return log_warning_errno(r, "Failed to extract file name from '%s': %m", path); ++ ++ _unused_ _cleanup_free_ char *key = NULL; ++ free(hashmap_remove2(*unit_ids_map, name, (void**) &key)); ++ string_strv_hashmap_remove(*unit_names_map, name, name); ++ free(set_remove(*path_cache, path)); ++ ++ return 0; ++} ++ + static int add_name( + const char *unit_name, + Set **names, +diff --git a/src/shared/unit-file.h b/src/shared/unit-file.h +index 1c89a92c7d..dd7dc57d15 100644 +--- a/src/shared/unit-file.h ++++ b/src/shared/unit-file.h +@@ -68,6 +68,14 @@ int unit_file_build_name_map( + Hashmap **unit_names_map, + Set **path_cache); + ++int unit_file_remove_from_name_map( ++ const LookupPaths *lp, ++ uint64_t *cache_timestamp_hash, ++ Hashmap **unit_ids_map, ++ Hashmap **unit_names_map, ++ Set **path_cache, ++ const char *path); ++ + int unit_file_find_fragment( + Hashmap *unit_ids_map, + Hashmap *unit_name_map, +diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c +index 63e500003c..a84e6aaf97 100644 +--- a/src/test/test-unit-file.c ++++ b/src/test/test-unit-file.c +@@ -1,11 +1,16 @@ + /* SPDX-License-Identifier: LGPL-2.1-or-later */ + ++#include "fileio.h" + #include "initrd-util.h" + #include "path-lookup.h" ++#include "path-util.h" ++#include "random-util.h" ++#include "rm-rf.h" + #include "set.h" + #include "special.h" + #include "strv.h" + #include "tests.h" ++#include "tmpfile-util.h" + #include "unit-file.h" + + TEST(unit_validate_alias_symlink_and_warn) { +@@ -86,6 +91,82 @@ TEST(unit_file_build_name_map) { + } + } + ++static bool test_unit_file_remove_from_name_map_trail(const LookupPaths *lp, size_t trial) { ++ int r; ++ ++ log_debug("/* %s(trial=%zu) */", __func__, trial); ++ ++ _cleanup_hashmap_free_ Hashmap *unit_ids = NULL, *unit_names = NULL; ++ _cleanup_set_free_ Set *path_cache = NULL; ++ ASSERT_OK_POSITIVE(unit_file_build_name_map(lp, NULL, &unit_ids, &unit_names, &path_cache)); ++ ++ _cleanup_free_ char *name = NULL; ++ for (size_t i = 0; i < 100; i++) { ++ ASSERT_OK(asprintf(&name, "test-unit-file-%"PRIx64".service", random_u64())); ++ if (!hashmap_contains(unit_ids, name)) ++ break; ++ name = mfree(name); ++ } ++ ASSERT_NOT_NULL(name); ++ ++ _cleanup_free_ char *path = path_join(lp->transient, name); ++ ASSERT_NOT_NULL(path); ++ ASSERT_OK(write_string_file(path, "[Unit]\n", WRITE_STRING_FILE_CREATE|WRITE_STRING_FILE_MKDIR_0755)); ++ ++ uint64_t cache_timestamp_hash = 0; ++ ASSERT_OK_POSITIVE(unit_file_build_name_map(lp, &cache_timestamp_hash, &unit_ids, &unit_names, &path_cache)); ++ ++ ASSERT_STREQ(hashmap_get(unit_ids, name), path); ++ ASSERT_TRUE(strv_equal(hashmap_get(unit_names, name), STRV_MAKE(name))); ++ ASSERT_TRUE(set_contains(path_cache, path)); ++ ++ ASSERT_OK_ERRNO(unlink(path)); ++ ++ ASSERT_OK(r = unit_file_remove_from_name_map(lp, &cache_timestamp_hash, &unit_ids, &unit_names, &path_cache, path)); ++ if (r > 0) ++ return false; /* someone touches unit files. Retrying. */ ++ ++ ASSERT_FALSE(hashmap_contains(unit_ids, name)); ++ ASSERT_FALSE(hashmap_contains(unit_names, path)); ++ ASSERT_FALSE(set_contains(path_cache, path)); ++ ++ _cleanup_hashmap_free_ Hashmap *unit_ids_2 = NULL, *unit_names_2 = NULL; ++ _cleanup_set_free_ Set *path_cache_2 = NULL; ++ ASSERT_OK_POSITIVE(unit_file_build_name_map(lp, NULL, &unit_ids_2, &unit_names_2, &path_cache_2)); ++ ++ if (hashmap_size(unit_ids) != hashmap_size(unit_ids_2) || ++ hashmap_size(unit_names) != hashmap_size(unit_names_2) || ++ !set_equal(path_cache, path_cache_2)) ++ return false; ++ ++ const char *k, *v; ++ HASHMAP_FOREACH_KEY(v, k, unit_ids) ++ if (!streq_ptr(hashmap_get(unit_ids_2, k), v)) ++ return false; ++ ++ char **l; ++ HASHMAP_FOREACH_KEY(l, k, unit_names) ++ if (!strv_equal_ignore_order(hashmap_get(unit_names_2, k), l)) ++ return false; ++ ++ return true; ++} ++ ++ ++TEST(unit_file_remove_from_name_map) { ++ _cleanup_(rm_rf_physical_and_freep) char *d = NULL; ++ ++ _cleanup_(lookup_paths_done) LookupPaths lp = {}; ++ ASSERT_OK(lookup_paths_init(&lp, RUNTIME_SCOPE_SYSTEM, LOOKUP_PATHS_TEMPORARY_GENERATED, NULL)); ++ ASSERT_NOT_NULL(d = strdup(lp.temporary_dir)); ++ ++ for (size_t i = 0; i < 10; i++) ++ if (test_unit_file_remove_from_name_map_trail(&lp, i)) ++ return; ++ ++ assert_not_reached(); ++} ++ + TEST(runlevel_to_target) { + in_initrd_force(false); + ASSERT_STREQ(runlevel_to_target(NULL), NULL); diff --git a/0491-core-unit-remove-path-to-transient-unit-file-from-un.patch b/0491-core-unit-remove-path-to-transient-unit-file-from-un.patch new file mode 100644 index 0000000..30d4e38 --- /dev/null +++ b/0491-core-unit-remove-path-to-transient-unit-file-from-un.patch @@ -0,0 +1,52 @@ +From 551f1d97a7a038538dc1da50c8b6d8f25c6c236b Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Tue, 28 Jan 2025 10:09:32 +0900 +Subject: [PATCH] core/unit: remove path to transient unit file from unit name + maps on stop + +Fixes #35190. + +(cherry picked from commit fce94c5c563b8f6ede2b8f7f283d2d2faff4e062) + +Resolves: RHEL-126937 +--- + src/core/unit.c | 15 ++++++++++++--- + 1 file changed, 12 insertions(+), 3 deletions(-) + +diff --git a/src/core/unit.c b/src/core/unit.c +index 01e4d3a64f..556ed0eefa 100644 +--- a/src/core/unit.c ++++ b/src/core/unit.c +@@ -648,13 +648,11 @@ static void unit_clear_dependencies(Unit *u) { + + static void unit_remove_transient(Unit *u) { + assert(u); ++ assert(u->manager); + + if (!u->transient) + return; + +- if (u->fragment_path) +- (void) unlink(u->fragment_path); +- + STRV_FOREACH(i, u->dropin_paths) { + _cleanup_free_ char *p = NULL, *pp = NULL; + +@@ -671,6 +669,17 @@ static void unit_remove_transient(Unit *u) { + (void) unlink(*i); + (void) rmdir(p); + } ++ ++ if (u->fragment_path) { ++ (void) unlink(u->fragment_path); ++ (void) unit_file_remove_from_name_map( ++ &u->manager->lookup_paths, ++ &u->manager->unit_cache_timestamp_hash, ++ &u->manager->unit_id_map, ++ &u->manager->unit_name_map, ++ &u->manager->unit_path_cache, ++ u->fragment_path); ++ } + } + + static void unit_free_mounts_for(Unit *u) { diff --git a/0492-TEST-07-PID1-add-reprudcer-for-issue-35190.patch b/0492-TEST-07-PID1-add-reprudcer-for-issue-35190.patch new file mode 100644 index 0000000..9bccc74 --- /dev/null +++ b/0492-TEST-07-PID1-add-reprudcer-for-issue-35190.patch @@ -0,0 +1,33 @@ +From 77c49a11d4b498b22c582f24b7ce46b2d4c8753f Mon Sep 17 00:00:00 2001 +From: Yu Watanabe +Date: Mon, 27 Jan 2025 22:24:16 +0900 +Subject: [PATCH] TEST-07-PID1: add reprudcer for issue #35190 + +(cherry picked from commit 448e99251aa47a5986425a1783da44d1200fe733) + +Related: RHEL-126937 +--- + test/units/TEST-07-PID1.transient.sh | 14 ++++++++++++++ + 1 file changed, 14 insertions(+) + create mode 100755 test/units/TEST-07-PID1.transient.sh + +diff --git a/test/units/TEST-07-PID1.transient.sh b/test/units/TEST-07-PID1.transient.sh +new file mode 100755 +index 0000000000..ae71a38143 +--- /dev/null ++++ b/test/units/TEST-07-PID1.transient.sh +@@ -0,0 +1,14 @@ ++#!/usr/bin/env bash ++# SPDX-License-Identifier: LGPL-2.1-or-later ++set -ex ++set -o pipefail ++ ++journalctl --sync ++TS="$(date '+%H:%M:%S')" ++ ++systemd-run -u hogehoge.service sleep infinity ++systemctl daemon-reload ++systemctl stop hogehoge.service ++ ++journalctl --sync ++[[ -z "$(journalctl -b -q --since "$TS" -u hogehoge.service -p notice)" ]] diff --git a/systemd.spec b/systemd.spec index ba56e88..7bbcd5d 100644 --- a/systemd.spec +++ b/systemd.spec @@ -48,7 +48,7 @@ Url: https://systemd.io # Allow users to specify the version and release when building the rpm by # setting the %%version_override and %%release_override macros. Version: %{?version_override}%{!?version_override:257} -Release: 18%{?dist}.alma.1 +Release: 19%{?dist}.alma.1 %global stable %(c="%version"; [ "$c" = "${c#*.*}" ]; echo $?) @@ -594,6 +594,14 @@ Patch0481: 0481-coredump-when-F-pidfd-is-used-again-allow-forwarding.patch Patch0482: 0482-coredump-introduce-an-enum-to-wrap-dumpable-constant.patch Patch0483: 0483-Define-helper-to-call-PR_SET_DUMPABLE.patch Patch0484: 0484-coredump-fix-0-passed-as-pointer-warning.patch +Patch0485: 0485-man-fix-a-missing-word.patch +Patch0486: 0486-sd_bus_open_user_machine-Don-t-shortcut-without-nece.patch +Patch0487: 0487-udev-set-clock-group-for-PTP-and-RTC-devices.patch +Patch0488: 0488-coredump-handle-ENOBUFS-and-EMSGSIZE-the-same-way.patch +Patch0489: 0489-strv-introduce-string_strv_hashmap_remove.patch +Patch0490: 0490-unit-file-introduce-unit_file_remove_from_name_map.patch +Patch0491: 0491-core-unit-remove-path-to-transient-unit-file-from-un.patch +Patch0492: 0492-TEST-07-PID1-add-reprudcer-for-issue-35190.patch # Downstream-only patches (9000–9999) %endif @@ -1544,9 +1552,19 @@ rm -f .file-list-* rm -f %{name}.lang %changelog -* Sat Nov 22 2025 Andrew Lukoshko - 257-18.alma.1 +* Tue Nov 25 2025 Andrew Lukoshko - 257-19.alma.1 - Debrand for AlmaLinux +* Fri Nov 21 2025 systemd maintenance team - 257-19 +- man: fix a missing word (RHEL-120277) +- sd_bus_open_user_machine(): Don't shortcut without necessary env (RHEL-129179) +- udev: set clock group for PTP and RTC devices (RHEL-113051) +- coredump: handle ENOBUFS and EMSGSIZE the same way (RHEL-126122) +- strv: introduce string_strv_hashmap_remove() (RHEL-126937) +- unit-file: introduce unit_file_remove_from_name_map() (RHEL-126937) +- core/unit: remove path to transient unit file from unit name maps on stop (RHEL-126937) +- TEST-07-PID1: add reprudcer for issue #35190 (RHEL-126937) + * Thu Nov 20 2025 Lukáš Zaoral - 257-18 - spec: ukify: require python3-zstandard (RHEL-103523)