!796 sync patch from systemd community
From: @zhang-yao-2022 Reviewed-by: @xujing99 Signed-off-by: @xujing99
This commit is contained in:
commit
c4ece76a16
30
backport-core-Fix-file-descriptor-leak.patch
Normal file
30
backport-core-Fix-file-descriptor-leak.patch
Normal file
@ -0,0 +1,30 @@
|
||||
From 400f0785e92866e5d8fd31ade6ae07a605d0df25 Mon Sep 17 00:00:00 2001
|
||||
From: Daan De Meyer <daan.j.demeyer@gmail.com>
|
||||
Date: Wed, 1 May 2024 03:14:45 +0200
|
||||
Subject: [PATCH] core: Fix file descriptor leak
|
||||
|
||||
(cherry picked from commit 5bcf0881a322a72c38d518be3e3ae8bff95de5f6)
|
||||
(cherry picked from commit 844bb02e48be98f4ae594e043c965588be3b138c)
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/400f0785e92866e5d8fd31ade6ae07a605d0df25
|
||||
---
|
||||
src/core/service.c | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index f0763a59eb..e9466ed928 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -414,7 +414,7 @@ static void service_release_fd_store(Service *s) {
|
||||
static void service_release_stdio_fd(Service *s) {
|
||||
assert(s);
|
||||
|
||||
- if (s->stdin_fd < 0 && s->stdout_fd < 0 && s->stdout_fd < 0)
|
||||
+ if (s->stdin_fd < 0 && s->stdout_fd < 0 && s->stderr_fd < 0)
|
||||
return;
|
||||
|
||||
log_unit_debug(UNIT(s), "Releasing stdin/stdout/stderr file descriptors.");
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,48 @@
|
||||
From 45b1017488cef2a5bacdf82028ce900a311c9a1c Mon Sep 17 00:00:00 2001
|
||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
||||
Date: Tue, 2 May 2023 22:36:36 +0200
|
||||
Subject: [PATCH] core: fix NULL pointer dereference during deserialization
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/45b1017488cef2a5bacdf82028ce900a311c9a1c
|
||||
---
|
||||
src/core/service.c | 5 +++++
|
||||
.../crash-9eec6b7ef6fd5c9568189f9259e6ce0546752085 | 10 ++++++++++
|
||||
2 files changed, 15 insertions(+)
|
||||
create mode 100644 test/fuzz/fuzz-manager-serialize/crash-9eec6b7ef6fd5c9568189f9259e6ce0546752085
|
||||
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index c035f4c24e..2ba7511ad2 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -3219,6 +3219,11 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
|
||||
} else if (streq(key, "accept-socket")) {
|
||||
Unit *socket;
|
||||
|
||||
+ if (u->type != UNIT_SOCKET) {
|
||||
+ log_unit_debug(u, "Failed to deserialize accept-socket: unit is not a socket");
|
||||
+ return 0;
|
||||
+ }
|
||||
+
|
||||
r = manager_load_unit(u->manager, value, NULL, NULL, &socket);
|
||||
if (r < 0)
|
||||
log_unit_debug_errno(u, r, "Failed to load accept-socket unit '%s': %m", value);
|
||||
diff --git a/test/fuzz/fuzz-manager-serialize/crash-9eec6b7ef6fd5c9568189f9259e6ce0546752085 b/test/fuzz/fuzz-manager-serialize/crash-9eec6b7ef6fd5c9568189f9259e6ce0546752085
|
||||
new file mode 100644
|
||||
index 0000000000..8bafbb0bc6
|
||||
--- /dev/null
|
||||
+++ b/test/fuzz/fuzz-manager-serialize/crash-9eec6b7ef6fd5c9568189f9259e6ce0546752085
|
||||
@@ -0,0 +1,10 @@
|
||||
+current-job-tmp-dir=/niliclrd,ng
|
||||
+
|
||||
+plymo-.sliceuth-quiwt-dir=/niliclrd,ng
|
||||
+
|
||||
+plymo-.sliceuth-quiwt-ait.service
|
||||
+srd2043d7818E@96s
|
||||
+8582967570742745a94
|
||||
+accept-socket=runn2043ait.service
|
||||
+srd2043d7818E@96s
|
||||
+8582967570742745a94
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
From 8f280216e052c9b9937ba77fad6659fb727535d9 Mon Sep 17 00:00:00 2001
|
||||
From: Mike Yuan <me@yhndnzj.com>
|
||||
Date: Mon, 17 Jun 2024 07:47:20 +0200
|
||||
Subject: [PATCH] core/service: fix accept-socket deserialization
|
||||
|
||||
Follow-up for 45b1017488cef2a5bacdf82028ce900a311c9a1c
|
||||
|
||||
(cherry picked from commit 9f5d8c3da4f505346bd1edfae907a2abcdbdc578)
|
||||
(cherry picked from commit f7d55cc801611781fbff2817f2fd4a16ec96ca85)
|
||||
(cherry picked from commit 8ead2545bf86bd0fe00b344506e071390ffaa99f)
|
||||
|
||||
Conflict:there is no macro definition ASSERT_PTR, so we use the assert function instead
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/8f280216e052c9b9937ba77fad6659fb727535d9
|
||||
---
|
||||
src/core/service.c | 7 ++++---
|
||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/core/service.c b/src/core/service.c
|
||||
index de07cde..64bfe17 100644
|
||||
--- a/src/core/service.c
|
||||
+++ b/src/core/service.c
|
||||
@@ -1237,7 +1237,7 @@ static int service_coldplug(Unit *u) {
|
||||
service_start_watchdog(s);
|
||||
|
||||
if (UNIT_ISSET(s->accept_socket)) {
|
||||
- Socket* socket = SOCKET(UNIT_DEREF(s->accept_socket));
|
||||
+ Socket *socket = SOCKET(UNIT_DEREF(s->accept_socket));
|
||||
|
||||
if (socket->max_connections_per_source > 0) {
|
||||
SocketPeer *peer;
|
||||
@@ -2948,8 +2948,8 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
|
||||
} else if (streq(key, "accept-socket")) {
|
||||
Unit *socket;
|
||||
|
||||
- if (u->type != UNIT_SOCKET) {
|
||||
- log_unit_debug(u, "Failed to deserialize accept-socket: unit is not a socket");
|
||||
+ if (unit_name_to_type(value) != UNIT_SOCKET) {
|
||||
+ log_unit_debug(u, "Deserialized accept-socket is not a socket unit, ignoring: %s", value);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2958,6 +2958,7 @@ static int service_deserialize_item(Unit *u, const char *key, const char *value,
|
||||
log_unit_debug_errno(u, r, "Failed to load accept-socket unit '%s': %m", value);
|
||||
else {
|
||||
unit_ref_set(&s->accept_socket, u, socket);
|
||||
+ assert(SOCKET(socket));
|
||||
SOCKET(socket)->n_connections++;
|
||||
}
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,64 @@
|
||||
From 523f91c0bb2b5f509fa2aa0c22c8ba0734498780 Mon Sep 17 00:00:00 2001
|
||||
From: Luca Boccassi <bluca@debian.org>
|
||||
Date: Tue, 2 Jul 2024 15:28:47 +0100
|
||||
Subject: [PATCH] coredump: correctly take tmpfs size into account for
|
||||
compression
|
||||
|
||||
We calculate the amount of uncompressed data we can write by taking the limits
|
||||
into account and halving it to ensure there's room for switching to compression
|
||||
on the fly when storing cores on a tmpfs (eg: due read-only rootfs).
|
||||
|
||||
But the logic is flawed, as taking into account the size of the tmpfs storage
|
||||
was applied after the halving, so in practice when an uncompressed core file
|
||||
was larger than the tmpfs, we fill it and then fail.
|
||||
|
||||
Rearrange the logic so that the halving is done after taking into account
|
||||
the tmpfs size.
|
||||
|
||||
(cherry picked from commit e6b2508275aac2951aedfc842735d8ebc29850bb)
|
||||
(cherry picked from commit a946258e9df627c675d13b2041ae186babf269dc)
|
||||
(cherry picked from commit 3dacca114bde3a216605ab51d2f5203c4a6b9707)
|
||||
|
||||
Conflict:code context adaptation
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/523f91c0bb2b5f509fa2aa0c22c8ba0734498780
|
||||
---
|
||||
src/coredump/coredump.c | 20 ++++++++++++--------
|
||||
1 file changed, 12 insertions(+), 8 deletions(-)
|
||||
|
||||
diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c
|
||||
index 2d7ac8bd1e..117b84f9f3 100644
|
||||
--- a/src/coredump/coredump.c
|
||||
+++ b/src/coredump/coredump.c
|
||||
@@ -507,17 +507,21 @@ static int save_external_coredump(
|
||||
bus_error_message(&error, r));
|
||||
}
|
||||
|
||||
+ /* First, ensure we are not going to go over the cgroup limit */
|
||||
max_size = MIN(cgroup_limit, max_size);
|
||||
- max_size = LESS_BY(max_size, 1024U) / 2; /* Account for 1KB metadata overhead for compressing */
|
||||
- max_size = MAX(PROCESS_SIZE_MIN, max_size); /* Impose a lower minimum */
|
||||
-
|
||||
- /* tmpfs might get full quickly, so check the available space too.
|
||||
- * But don't worry about errors here, failing to access the storage
|
||||
- * location will be better logged when writing to it. */
|
||||
+ /* tmpfs might get full quickly, so check the available space too. But don't worry about
|
||||
+ * errors here, failing to access the storage location will be better logged when writing to
|
||||
+ * it. */
|
||||
if (statvfs("/var/lib/systemd/coredump/", &sv) >= 0)
|
||||
max_size = MIN((uint64_t)sv.f_frsize * (uint64_t)sv.f_bfree, max_size);
|
||||
-
|
||||
- log_debug("Limiting core file size to %" PRIu64 " bytes due to cgroup memory limits.", max_size);
|
||||
+ /* Impose a lower minimum, otherwise we will miss the basic headers. */
|
||||
+ max_size = MAX(PROCESS_SIZE_MIN, max_size);
|
||||
+ /* Ensure we can always switch to compressing on the fly in case we are running out of space
|
||||
+ * by keeping half of the space/memory available, plus 1KB metadata overhead from the
|
||||
+ * compression algorithm. */
|
||||
+ max_size = LESS_BY(max_size, 1024U) / 2;
|
||||
+
|
||||
+ log_debug("Limiting core file size to %" PRIu64 " bytes due to cgroup and/or filesystem limits.", max_size);
|
||||
}
|
||||
|
||||
r = copy_bytes(input_fd, fd, max_size, 0);
|
||||
--
|
||||
2.33.0
|
||||
|
||||
45
backport-exec-invoke-correct-dont_close-size.patch
Normal file
45
backport-exec-invoke-correct-dont_close-size.patch
Normal file
@ -0,0 +1,45 @@
|
||||
From 57500859121e207b78f92452de80fb341f1776f2 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 23 Apr 2024 21:49:12 +0200
|
||||
Subject: [PATCH] exec-invoke: correct dont_close[] size
|
||||
|
||||
THis needs 15 entries as far as I can count, not just 14.
|
||||
|
||||
Follow-up for: 5686391b006ee82d8a4559067ad9818e3e631247
|
||||
|
||||
Sniff.
|
||||
|
||||
(cherry picked from commit 07296542d636dcac43f6c9ee45a638fca8c5f3dd)
|
||||
(cherry picked from commit 8f4dab049074d31c31af2bb9eb76f9f4f08e3711)
|
||||
|
||||
Conflict:in the current version, the length of the array is actually 13.
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/57500859121e207b78f92452de80fb341f1776f2
|
||||
---
|
||||
src/core/execute.c | 4 +++-
|
||||
1 file changed, 3 insertions(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/core/execute.c b/src/core/execute.c
|
||||
index f4700c1b0b..7d69572ce4 100644
|
||||
--- a/src/core/execute.c
|
||||
+++ b/src/core/execute.c
|
||||
@@ -4402,7 +4402,7 @@ static int close_remaining_fds(
|
||||
const int *fds, size_t n_fds) {
|
||||
|
||||
size_t n_dont_close = 0;
|
||||
- int dont_close[n_fds + 12];
|
||||
+ int dont_close[n_fds + 13];
|
||||
|
||||
assert(params);
|
||||
|
||||
@@ -4438,6 +4438,8 @@ static int close_remaining_fds(
|
||||
if (user_lookup_fd >= 0)
|
||||
dont_close[n_dont_close++] = user_lookup_fd;
|
||||
|
||||
+ assert(n_dont_close <= ELEMENTSOF(dont_close));
|
||||
+
|
||||
return close_all_fds(dont_close, n_dont_close);
|
||||
}
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
51
backport-fs-util-readlinkat-supports-an-empty-string.patch
Normal file
51
backport-fs-util-readlinkat-supports-an-empty-string.patch
Normal file
@ -0,0 +1,51 @@
|
||||
From 7a2349072e165c27ed0655934b05530c19d23779 Mon Sep 17 00:00:00 2001
|
||||
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
||||
Date: Thu, 15 Feb 2024 07:01:17 +0900
|
||||
Subject: [PATCH] fs-util: readlinkat() supports an empty string
|
||||
|
||||
From readlinkat(2):
|
||||
Since Linux 2.6.39, pathname can be an empty string, in which case the
|
||||
call operates on the symbolic link referred to by dirfd (which should
|
||||
have been obtained using open(2) with the O_PATH and O_NOFOLLOW flags).
|
||||
|
||||
(cherry picked from commit e4c094c05543410ba05a16f757d1e11652f4f6bd)
|
||||
(cherry picked from commit 30142e781d7afcfa93185d2543f59e9cf90dc882)
|
||||
|
||||
Conflict:due to the absence of mkdtemp_open, the test case related content will not be included
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/7a2349072e165c27ed0655934b05530c19d23779
|
||||
---
|
||||
src/basic/fs-util.c | 9 +++++++--
|
||||
1 file changed, 7 insertions(+), 2 deletions(-)
|
||||
|
||||
diff --git a/src/basic/fs-util.c b/src/basic/fs-util.c
|
||||
index 8f0834f..287fc29 100644
|
||||
--- a/src/basic/fs-util.c
|
||||
+++ b/src/basic/fs-util.c
|
||||
@@ -137,9 +137,14 @@ int rename_noreplace(int olddirfd, const char *oldpath, int newdirfd, const char
|
||||
int readlinkat_malloc(int fd, const char *p, char **ret) {
|
||||
size_t l = PATH_MAX;
|
||||
|
||||
- assert(p);
|
||||
assert(ret);
|
||||
|
||||
+ assert(fd >= 0 || fd == AT_FDCWD);
|
||||
+
|
||||
+ if (fd < 0 && isempty(p))
|
||||
+ return -EISDIR; /* In this case, the fd points to the current working directory, and is
|
||||
+ * definitely not a symlink. Let's return earlier. */
|
||||
+
|
||||
for (;;) {
|
||||
_cleanup_free_ char *c = NULL;
|
||||
ssize_t n;
|
||||
@@ -148,7 +153,7 @@ int readlinkat_malloc(int fd, const char *p, char **ret) {
|
||||
if (!c)
|
||||
return -ENOMEM;
|
||||
|
||||
- n = readlinkat(fd, p, c, l);
|
||||
+ n = readlinkat(fd, strempty(p), c, l);
|
||||
if (n < 0)
|
||||
return -errno;
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,64 @@
|
||||
From 3126a5a5aa7b9b242c247e1595b60ac244ee2241 Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Tue, 5 Sep 2023 13:57:42 +0200
|
||||
Subject: [PATCH] logind: give better error messages when failing to attach
|
||||
devices to seats
|
||||
|
||||
When the user tries to attach a device lacking ID_FOR_SEAT they
|
||||
currently get a very cryptic error message. Let's improve the situation
|
||||
a bit. Still a bit cryptic maybe, but much less so.
|
||||
|
||||
Inspired-by: https://lists.freedesktop.org/archives/systemd-devel/2023-September/049469.html
|
||||
Inspired-by: https://lists.freedesktop.org/archives/systemd-devel/2023-September/049484.html
|
||||
Also-see: https://lists.freedesktop.org/archives/systemd-devel/2023-September/049470.html
|
||||
Also-see: https://lists.freedesktop.org/archives/systemd-devel/2023-September/049489.html
|
||||
(cherry picked from commit 08237f062e9a2020c6d457a4112e363ee9ff879d)
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/3126a5a5aa7b9b242c247e1595b60ac244ee2241
|
||||
---
|
||||
src/login/logind-dbus.c | 10 +++++-----
|
||||
1 file changed, 5 insertions(+), 5 deletions(-)
|
||||
|
||||
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
|
||||
index b3a36d0d05..2d1af602c0 100644
|
||||
--- a/src/login/logind-dbus.c
|
||||
+++ b/src/login/logind-dbus.c
|
||||
@@ -1325,7 +1325,7 @@ static int trigger_device(Manager *m, sd_device *parent) {
|
||||
return 0;
|
||||
}
|
||||
|
||||
-static int attach_device(Manager *m, const char *seat, const char *sysfs) {
|
||||
+static int attach_device(Manager *m, const char *seat, const char *sysfs, sd_bus_error *error) {
|
||||
_cleanup_(sd_device_unrefp) sd_device *d = NULL;
|
||||
_cleanup_free_ char *rule = NULL, *file = NULL;
|
||||
const char *id_for_seat;
|
||||
@@ -1337,13 +1337,13 @@ static int attach_device(Manager *m, const char *seat, const char *sysfs) {
|
||||
|
||||
r = sd_device_new_from_syspath(&d, sysfs);
|
||||
if (r < 0)
|
||||
- return r;
|
||||
+ return sd_bus_error_set_errnof(error, r, "Failed to open device '%s': %m", sysfs);
|
||||
|
||||
if (sd_device_has_current_tag(d, "seat") <= 0)
|
||||
- return -ENODEV;
|
||||
+ return sd_bus_error_set_errnof(error, ENODEV, "Device '%s' lacks 'seat' udev tag.", sysfs);
|
||||
|
||||
if (sd_device_get_property_value(d, "ID_FOR_SEAT", &id_for_seat) < 0)
|
||||
- return -ENODEV;
|
||||
+ return sd_bus_error_set_errnof(error, ENODEV, "Device '%s' lacks 'ID_FOR_SEAT' udev property.", sysfs);
|
||||
|
||||
if (asprintf(&file, "/etc/udev/rules.d/72-seat-%s.rules", id_for_seat) < 0)
|
||||
return -ENOMEM;
|
||||
@@ -1428,7 +1428,7 @@ static int method_attach_device(sd_bus_message *message, void *userdata, sd_bus_
|
||||
if (r == 0)
|
||||
return 1; /* No authorization for now, but the async polkit stuff will call us again when it has it */
|
||||
|
||||
- r = attach_device(m, seat, sysfs);
|
||||
+ r = attach_device(m, seat, sysfs, error);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,52 @@
|
||||
From 7a9d6fd9b6564b0bf54b62cb05242964a9763f9e Mon Sep 17 00:00:00 2001
|
||||
From: James Coglan <james@neighbourhood.ie>
|
||||
Date: Fri, 28 Jun 2024 13:58:22 +0100
|
||||
Subject: [PATCH] resolved: correct parsing of OPT extended RCODEs
|
||||
|
||||
The DNS_PACKET_RCODE() function works out the full RCODE by taking the
|
||||
first octet from the OPT record TTL field and bitwise-OR-ing this with
|
||||
the basic RCODE from the packet header. This results in RCODE values
|
||||
being lower than they should be.
|
||||
|
||||
For example, if the first TTL octet is 0x7a and the basic RCODE is 3,
|
||||
this function currently returns `0x7a | 3` = 123, rather than 0x7a3 =
|
||||
1955.
|
||||
|
||||
The first TTL octet is supposed to form the upper 8 bits of a 12-bit
|
||||
value, whereas the current implementation constraints the value to 8
|
||||
bits and results in mis-interpreted RCODEs.
|
||||
|
||||
This fixes things by shifting the TTL 20 places instead of 24 and
|
||||
masking off the low nibble that comes from the upper bits of the version
|
||||
octet.
|
||||
|
||||
Note that dns_packet_append_opt() correctly converts the input RCODE
|
||||
into the high octet of the OPT TTL field; this problem only affects
|
||||
parsing of incoming packets.
|
||||
|
||||
(cherry picked from commit c40f3714c9a4d1f2bcd308625c9c835892e3d41c)
|
||||
(cherry picked from commit 7ee60a86140ebe3e60858ef3c4e749dcd2e7fd21)
|
||||
(cherry picked from commit c572f1ed2b7565263007b26a10872fb047526d73)
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/7a9d6fd9b6564b0bf54b62cb05242964a9763f9e
|
||||
---
|
||||
src/resolve/resolved-dns-packet.h | 2 +-
|
||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||
|
||||
diff --git a/src/resolve/resolved-dns-packet.h b/src/resolve/resolved-dns-packet.h
|
||||
index a6af44c6ec..5a5ef13c8d 100644
|
||||
--- a/src/resolve/resolved-dns-packet.h
|
||||
+++ b/src/resolve/resolved-dns-packet.h
|
||||
@@ -117,7 +117,7 @@ static inline uint16_t DNS_PACKET_RCODE(DnsPacket *p) {
|
||||
uint16_t rcode;
|
||||
|
||||
if (p->opt)
|
||||
- rcode = (uint16_t) (p->opt->ttl >> 24);
|
||||
+ rcode = (uint16_t) ((p->opt->ttl >> 20) & 0xFF0);
|
||||
else
|
||||
rcode = 0;
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
@ -0,0 +1,39 @@
|
||||
From 26ac516fd197b2c7a0867472e826290a641de9ac Mon Sep 17 00:00:00 2001
|
||||
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
||||
Date: Fri, 22 Sep 2023 05:08:12 +0900
|
||||
Subject: [PATCH] sd-journal: refuse entry objects with an empty boot ID
|
||||
|
||||
Otherwise, e.g. sd_journal_get_monotonic_usec() return an empty boot ID
|
||||
when called for such a broken entry object.
|
||||
|
||||
Such a broken object may be stored when the system was not cleanly shutdown.
|
||||
|
||||
Fixes #29167.
|
||||
|
||||
(cherry picked from commit c650d4cdef5c1b87237193995f08d7e2d1be0c44)
|
||||
|
||||
Conflict:NA
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/26ac516fd197b2c7a0867472e826290a641de9ac
|
||||
---
|
||||
src/libsystemd/sd-journal/journal-file.c | 5 +++++
|
||||
1 file changed, 5 insertions(+)
|
||||
|
||||
diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c
|
||||
index 67819e880f..ab1d3ca04d 100644
|
||||
--- a/src/libsystemd/sd-journal/journal-file.c
|
||||
+++ b/src/libsystemd/sd-journal/journal-file.c
|
||||
@@ -993,6 +993,11 @@ static int check_object(JournalFile *f, Object *o, uint64_t offset) {
|
||||
le64toh(o->entry.monotonic),
|
||||
offset);
|
||||
|
||||
+ if (sd_id128_is_null(o->entry.boot_id))
|
||||
+ return log_debug_errno(SYNTHETIC_ERRNO(EBADMSG),
|
||||
+ "Invalid object entry with an empty boot ID: %" PRIu64,
|
||||
+ offset);
|
||||
+
|
||||
break;
|
||||
}
|
||||
|
||||
--
|
||||
2.33.0
|
||||
|
||||
67
backport-shared-log-error-when-execve-fail.patch
Normal file
67
backport-shared-log-error-when-execve-fail.patch
Normal file
@ -0,0 +1,67 @@
|
||||
From 084b91100c8a139514382a0f2a6bb2beaa811963 Mon Sep 17 00:00:00 2001
|
||||
From: Mauri de Souza Meneguzzo <mauri870@gmail.com>
|
||||
Date: Mon, 24 Jun 2024 23:47:15 -0300
|
||||
Subject: [PATCH] shared: log error when execve fail
|
||||
|
||||
If there is an error with the execv call in fork_agent the
|
||||
program exits without any meaningful log message. Log the
|
||||
command and errno so the user gets more information about
|
||||
the failure.
|
||||
|
||||
Fixes: #33418
|
||||
|
||||
Signed-off-by: Mauri de Souza Meneguzzo <mauri870@gmail.com>
|
||||
(cherry picked from commit a408d4453145621902b9a3ef78a552f83b09bd8d)
|
||||
(cherry picked from commit 7fcfb73d71ed1d4230f58de1a94790e0c28719ea)
|
||||
(cherry picked from commit 76fe6ebee84c22c96f1c9a96707c7e72706989fd)
|
||||
|
||||
Conflict:code context adaptation and the fork_agent function is in process-util.c, not in exec_util.c
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/084b91100c8a139514382a0f2a6bb2beaa811963
|
||||
---
|
||||
src/basic/process-util.c | 1 +
|
||||
src/shared/spawn-polkit-agent.c | 11 ++++++++---
|
||||
2 files changed, 9 insertions(+), 3 deletions(-)
|
||||
|
||||
diff --git a/src/basic/process-util.c b/src/basic/process-util.c
|
||||
index 5da613bc17..849fd9191b 100644
|
||||
--- a/src/basic/process-util.c
|
||||
+++ b/src/basic/process-util.c
|
||||
@@ -601,5 +601,6 @@ int fork_agent(const char *name, const int except[], size_t n_except, pid_t *ret
|
||||
va_end(ap);
|
||||
|
||||
execv(path, l);
|
||||
+ log_error_errno(errno, "Failed to execute %s: %m", path);
|
||||
_exit(EXIT_FAILURE);
|
||||
}
|
||||
diff --git a/src/shared/spawn-polkit-agent.c b/src/shared/spawn-polkit-agent.c
|
||||
index ce3c5fb948..fd91bd636f 100644
|
||||
--- a/src/shared/spawn-polkit-agent.c
|
||||
+++ b/src/shared/spawn-polkit-agent.c
|
||||
@@ -43,16 +43,21 @@ int polkit_agent_open(void) {
|
||||
xsprintf(notify_fd, "%i", pipe_fd[1]);
|
||||
|
||||
r = fork_agent("(polkit-agent)",
|
||||
- &pipe_fd[1], 1,
|
||||
+ &pipe_fd[1],
|
||||
+ 1,
|
||||
&agent_pid,
|
||||
POLKIT_AGENT_BINARY_PATH,
|
||||
- POLKIT_AGENT_BINARY_PATH, "--notify-fd", notify_fd, "--fallback", NULL);
|
||||
+ POLKIT_AGENT_BINARY_PATH,
|
||||
+ "--notify-fd",
|
||||
+ notify_fd,
|
||||
+ "--fallback",
|
||||
+ NULL);
|
||||
|
||||
/* Close the writing side, because that's the one for the agent */
|
||||
safe_close(pipe_fd[1]);
|
||||
|
||||
if (r < 0)
|
||||
- log_error_errno(r, "Failed to fork TTY ask password agent: %m");
|
||||
+ log_error_errno(r, "Failed to fork polkit agent: %m");
|
||||
else
|
||||
/* Wait until the agent closes the fd */
|
||||
fd_wait_for_event(pipe_fd[0], POLLHUP, USEC_INFINITY);
|
||||
--
|
||||
2.33.0
|
||||
|
||||
119
backport-sysusers-handle-NSS-errors-gracefully.patch
Normal file
119
backport-sysusers-handle-NSS-errors-gracefully.patch
Normal file
@ -0,0 +1,119 @@
|
||||
From dffa62c85fb644c649f68b2c8f02b1d8440d2a9d Mon Sep 17 00:00:00 2001
|
||||
From: Luca Boccassi <bluca@debian.org>
|
||||
Date: Thu, 4 Jul 2024 10:23:04 +0100
|
||||
Subject: [PATCH] sysusers: handle NSS errors gracefully
|
||||
|
||||
If the io.systemd.DynamicUser or io.systemd.Machine files exist,
|
||||
but nothing is listening on them, the nss-systemd module returns
|
||||
ECONNREFUSED and systemd-sysusers fails to creat the user/group.
|
||||
|
||||
This is problematic when ran by packaging scripts, as the package
|
||||
assumes that after this has run, the user/group exist and can
|
||||
be used. adduser does not fail in the same situation.
|
||||
|
||||
Change sysusers to print a loud warning but otherwise continue
|
||||
when NSS returns an error.
|
||||
|
||||
(cherry picked from commit fc9938d6f8e7081df5420bf88bf98f683b1391c0)
|
||||
(cherry picked from commit abba1e6bc29b7e07354ca23906c6f485ba245a1a)
|
||||
(cherry picked from commit 0f518750a44dc4b2987ecc0cea4b3d848ac46ee9)
|
||||
|
||||
Conflict:code context adaptation
|
||||
Reference:https://github.com/systemd/systemd-stable/commit/dffa62c85fb644c649f68b2c8f02b1d8440d2a9d
|
||||
---
|
||||
src/sysusers/sysusers.c | 12 ++++++------
|
||||
test/units/TEST-74-AUX-UTILS.sysusers.sh | 24 ++++++++++++++++++++++++
|
||||
2 files changed, 30 insertions(+), 6 deletions(-)
|
||||
create mode 100755 test/units/TEST-74-AUX-UTILS.sysusers.sh
|
||||
|
||||
diff --git a/src/sysusers/sysusers.c b/src/sysusers/sysusers.c
|
||||
index 0cad2f1e4a..c21d561bfd 100644
|
||||
--- a/src/sysusers/sysusers.c
|
||||
+++ b/src/sysusers/sysusers.c
|
||||
@@ -995,7 +995,7 @@ static int uid_is_ok(uid_t uid, const char *name, bool check_with_gid) {
|
||||
if (p)
|
||||
return 0;
|
||||
if (!IN_SET(errno, 0, ENOENT))
|
||||
- return -errno;
|
||||
+ log_warning_errno(errno, "Unexpected failure while looking up UID '" UID_FMT "' via NSS, assuming it doesn't exist: %m", uid);
|
||||
|
||||
if (check_with_gid) {
|
||||
errno = 0;
|
||||
@@ -1004,7 +1004,7 @@ static int uid_is_ok(uid_t uid, const char *name, bool check_with_gid) {
|
||||
if (!streq(g->gr_name, name))
|
||||
return 0;
|
||||
} else if (!IN_SET(errno, 0, ENOENT))
|
||||
- return -errno;
|
||||
+ log_warning_errno(errno, "Unexpected failure while looking up GID '" GID_FMT "' via NSS, assuming it doesn't exist: %m", uid);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1109,7 +1109,7 @@ static int add_user(Item *i) {
|
||||
return 0;
|
||||
}
|
||||
if (!errno_is_not_exists(errno))
|
||||
- return log_error_errno(errno, "Failed to check if user %s already exists: %m", i->name);
|
||||
+ log_warning_errno(errno, "Unexpected failure while looking up user '%s' via NSS, assuming it doesn't exist: %m", i->name);
|
||||
}
|
||||
|
||||
/* Try to use the suggested numeric uid */
|
||||
@@ -1225,7 +1225,7 @@ static int gid_is_ok(gid_t gid, const char *groupname, bool check_with_uid) {
|
||||
if (g)
|
||||
return 0;
|
||||
if (!IN_SET(errno, 0, ENOENT))
|
||||
- return -errno;
|
||||
+ log_warning_errno(errno, "Unexpected failure while looking up GID '" GID_FMT "' via NSS, assuming it doesn't exist: %m", gid);
|
||||
|
||||
errno = 0;
|
||||
p = getpwuid((uid_t) gid);
|
||||
@@ -1233,7 +1233,7 @@ static int gid_is_ok(gid_t gid, const char *groupname, bool check_with_uid) {
|
||||
if (p)
|
||||
return 0;
|
||||
if (!IN_SET(errno, 0, ENOENT))
|
||||
- return -errno;
|
||||
+ log_warning_errno(errno, "Unexpected failure while looking up GID '" GID_FMT "' via NSS, assuming it doesn't exist: %m", gid);
|
||||
}
|
||||
|
||||
return 1;
|
||||
@@ -1263,7 +1263,7 @@ static int get_gid_by_name(const char *name, gid_t *gid) {
|
||||
return 0;
|
||||
}
|
||||
if (!errno_is_not_exists(errno))
|
||||
- return log_error_errno(errno, "Failed to check if group %s already exists: %m", name);
|
||||
+ log_warning_errno(errno, "Unexpected failure while looking up group '%s' via NSS, assuming it doesn't exist: %m", name);
|
||||
}
|
||||
|
||||
return -ENOENT;
|
||||
diff --git a/test/units/TEST-74-AUX-UTILS.sysusers.sh b/test/units/TEST-74-AUX-UTILS.sysusers.sh
|
||||
new file mode 100755
|
||||
index 0000000000..dcd29938b5
|
||||
--- /dev/null
|
||||
+++ b/test/units/TEST-74-AUX-UTILS.sysusers.sh
|
||||
@@ -0,0 +1,24 @@
|
||||
+#!/usr/bin/env bash
|
||||
+# SPDX-License-Identifier: LGPL-2.1-or-later
|
||||
+set -eux
|
||||
+set -o pipefail
|
||||
+
|
||||
+# shellcheck source=test/units/util.sh
|
||||
+. "$(dirname "$0")"/util.sh
|
||||
+
|
||||
+at_exit() {
|
||||
+ set +e
|
||||
+ userdel -r foobarbaz
|
||||
+ umount /run/systemd/userdb/
|
||||
+}
|
||||
+
|
||||
+# Check that we indeed run under root to make the rest of the test work
|
||||
+[[ "$(id -u)" -eq 0 ]]
|
||||
+
|
||||
+trap at_exit EXIT
|
||||
+
|
||||
+# Ensure that a non-responsive NSS socket doesn't make sysusers fail
|
||||
+mount -t tmpfs tmpfs /run/systemd/userdb/
|
||||
+touch /run/systemd/userdb/io.systemd.DynamicUser
|
||||
+echo 'u foobarbaz' | SYSTEMD_LOG_LEVEL=debug systemd-sysusers -
|
||||
+grep -q foobarbaz /etc/passwd
|
||||
--
|
||||
2.33.0
|
||||
|
||||
26
systemd.spec
26
systemd.spec
@ -25,7 +25,7 @@
|
||||
Name: systemd
|
||||
Url: https://systemd.io/
|
||||
Version: 249
|
||||
Release: 96
|
||||
Release: 97
|
||||
License: MIT and LGPLv2+ and GPLv2+
|
||||
Summary: System and Service Manager
|
||||
|
||||
@ -702,6 +702,17 @@ Patch6649: backport-core-execute-warn-when-threaded-mode-is-detected.patch
|
||||
Patch6650: backport-shutdown-clean-up-sync_with_progress-a-bit.patch
|
||||
Patch6651: backport-shutdown-teach-sync_with_progress-to-optionally-sync.patch
|
||||
Patch6652: backport-shutdown-replace-unbounded-fsync-with-bounded-sync_w.patch
|
||||
Patch6653: backport-logind-give-better-error-messages-when-failing-to-at.patch
|
||||
Patch6654: backport-sd-journal-refuse-entry-objects-with-an-empty-boot-I.patch
|
||||
Patch6655: backport-fs-util-readlinkat-supports-an-empty-string.patch
|
||||
Patch6656: backport-exec-invoke-correct-dont_close-size.patch
|
||||
Patch6657: backport-core-Fix-file-descriptor-leak.patch
|
||||
Patch6658: backport-core-fix-NULL-pointer-dereference-during-deserializa.patch
|
||||
Patch6659: backport-core-service-fix-accept-socket-deserialization.patch
|
||||
Patch6660: backport-resolved-correct-parsing-of-OPT-extended-RCODEs.patch
|
||||
Patch6661: backport-coredump-correctly-take-tmpfs-size-into-account-for-.patch
|
||||
Patch6662: backport-sysusers-handle-NSS-errors-gracefully.patch
|
||||
Patch6663: backport-shared-log-error-when-execve-fail.patch
|
||||
|
||||
Patch9001: update-rtc-with-system-clock-when-shutdown.patch
|
||||
Patch9002: udev-add-actions-while-rename-netif-failed.patch
|
||||
@ -2216,6 +2227,19 @@ grep -q -E '^KEYMAP="?fi-latin[19]"?' /etc/vconsole.conf 2>/dev/null &&
|
||||
/usr/bin/systemd-cryptenroll
|
||||
|
||||
%changelog
|
||||
* Wed Dec 11 2024 zhangyao <zhangyao108@huawei.com> - 249-97
|
||||
- add backport-logind-give-better-error-messages-when-failing-to-at.patch
|
||||
backport-sd-journal-refuse-entry-objects-with-an-empty-boot-I.patch
|
||||
backport-fs-util-readlinkat-supports-an-empty-string.patch
|
||||
backport-exec-invoke-correct-dont_close-size.patch
|
||||
backport-core-Fix-file-descriptor-leak.patch
|
||||
backport-core-fix-NULL-pointer-dereference-during-deserializa.patch
|
||||
backport-core-service-fix-accept-socket-deserialization.patch
|
||||
backport-resolved-correct-parsing-of-OPT-extended-RCODEs.patch
|
||||
backport-coredump-correctly-take-tmpfs-size-into-account-for-.patch
|
||||
backport-sysusers-handle-NSS-errors-gracefully.patch
|
||||
backport-shared-log-error-when-execve-fail.patch
|
||||
|
||||
* Tue Dec 10 2024 zhangyao <zhangyao108@huawei.com> - 249-96
|
||||
- backport upstream patch to solve systemd-shutdown hang all the time caused by fsync blocked by absence of DM mapping table
|
||||
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user