sync patches from systemd community

This commit is contained in:
h30032433 2024-02-28 14:50:26 +08:00
parent 35c3ba559a
commit c0757a163f
5 changed files with 292 additions and 1 deletions

View File

@ -0,0 +1,51 @@
From b4a9d19e4ec527a7b2d774a1349a6133f7739847 Mon Sep 17 00:00:00 2001
From: Rose <83477269+AtariDreams@users.noreply.github.com>
Date: Tue, 2 Jan 2024 10:13:27 -0500
Subject: [PATCH] basic: fix overflow detection in sigbus_pop
The current check checks for n_sigbus_queue
being greater than or equal to SIGBUS_QUEUE_MAX,
when it should be just greater than as
n_sigbus_queue being SIGBUS_QUEUE_MAX indicates
that the queue is full, but not overflowed.
Conflict:adapt context
Reference:https://github.com/systemd/systemd/commit/b4a9d19e4ec527a7b2d774a1349a6133f7739847
---
src/basic/sigbus.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/basic/sigbus.c b/src/basic/sigbus.c
index 7e5a493f6b..47ab0b81d8 100644
--- a/src/basic/sigbus.c
+++ b/src/basic/sigbus.c
@@ -40,14 +40,14 @@ static void sigbus_push(void *addr) {
}
/* If we can't, make sure the queue size is out of bounds, to
- * mark it as overflow */
+ * mark it as overflowed */
for (;;) {
unsigned c;
__sync_synchronize();
c = n_sigbus_queue;
- if (c > SIGBUS_QUEUE_MAX) /* already overflow */
+ if (c > SIGBUS_QUEUE_MAX) /* already overflowed */
return;
if (__sync_bool_compare_and_swap(&n_sigbus_queue, c, c + SIGBUS_QUEUE_MAX))
@@ -70,7 +70,7 @@ int sigbus_pop(void **ret) {
if (_likely_(c == 0))
return 0;
- if (_unlikely_(c >= SIGBUS_QUEUE_MAX))
+ if (_unlikely_(c > SIGBUS_QUEUE_MAX))
return -EOVERFLOW;
for (u = 0; u < SIGBUS_QUEUE_MAX; u++) {
--
2.39.1

View File

@ -0,0 +1,70 @@
From d67b1d18fcda2c8c5aacfc50f9591c8dc7a4a8a1 Mon Sep 17 00:00:00 2001
From: fangxiuning <fangxiuning123@126.com>
Date: Sat, 11 Jul 2020 18:13:01 +0800
Subject: [PATCH] bus: use bus_log_parse_error to print message
Conflict:NA
Reference:https://github.com/systemd/systemd/commit/d67b1d18fcda2c8c5aacfc50f9591c8dc7a4a8a1
---
src/busctl/busctl.c | 2 +-
src/network/networkd-manager.c | 2 +-
src/resolve/resolved-bus.c | 2 +-
src/timedate/timedatectl.c | 2 +-
4 files changed, 4 insertions(+), 4 deletions(-)
diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c
index 56fb8d9367..ccb22d5f8b 100644
--- a/src/busctl/busctl.c
+++ b/src/busctl/busctl.c
@@ -1322,7 +1322,7 @@ static int monitor(int argc, char **argv, int (*dump)(sd_bus_message *m, FILE *f
r = sd_bus_message_read(m, "s", &name);
if (r < 0)
- return log_error_errno(r, "Failed to read lost name: %m");
+ return bus_log_parse_error(r);
if (streq(name, unique_name))
is_monitor = true;
diff --git a/src/network/networkd-manager.c b/src/network/networkd-manager.c
index 63e2f61d29..8c51cc12b2 100644
--- a/src/network/networkd-manager.c
+++ b/src/network/networkd-manager.c
@@ -104,7 +104,7 @@ static int match_prepare_for_sleep(sd_bus_message *message, void *userdata, sd_b
r = sd_bus_message_read(message, "b", &b);
if (r < 0) {
- log_debug_errno(r, "Failed to parse PrepareForSleep signal: %m");
+ bus_log_parse_error(r);
return 0;
}
diff --git a/src/resolve/resolved-bus.c b/src/resolve/resolved-bus.c
index 2ecfcf498b..45687c8fca 100644
--- a/src/resolve/resolved-bus.c
+++ b/src/resolve/resolved-bus.c
@@ -1987,7 +1987,7 @@ static int match_prepare_for_sleep(sd_bus_message *message, void *userdata, sd_b
r = sd_bus_message_read(message, "b", &b);
if (r < 0) {
- log_debug_errno(r, "Failed to parse PrepareForSleep signal: %m");
+ bus_log_parse_error(r);
return 0;
}
diff --git a/src/timedate/timedatectl.c b/src/timedate/timedatectl.c
index eaac3b3e35..49d68d2533 100644
--- a/src/timedate/timedatectl.c
+++ b/src/timedate/timedatectl.c
@@ -664,7 +664,7 @@ static int on_properties_changed(sd_bus_message *m, void *userdata, sd_bus_error
r = sd_bus_message_read(m, "s", &name);
if (r < 0)
- return log_error_errno(r, "Failed to read interface name: %m");
+ return bus_log_parse_error(r);
if (!streq_ptr(name, "org.freedesktop.timesync1.Manager"))
return 0;
--
2.41.0

View File

@ -0,0 +1,99 @@
From b4a21d51487e21052af49b755d1707d4616e2977 Mon Sep 17 00:00:00 2001
From: Frantisek Sumsal <frantisek@sumsal.cz>
Date: Sun, 24 Dec 2023 14:49:23 +0100
Subject: [PATCH] busctl: avoid asserting on NULL message
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Avoid passing a NULL message to sd_bus_message_is_signal(), to not trip
over an assertion:
[ 132.869436] H testsuite-82.sh[614]: + systemctl --no-block --check-inhibitors=yes soft-reboot
[ 132.967386] H systemd[1]: Created slice system-systemd\x2dcoredump.slice.
[ 133.018292] H systemd[1]: Starting inhibit.service...
[ 133.122610] H systemd[1]: Started systemd-coredump@0-665-0.service.
[ 133.163643] H systemd[1]: Started inhibit.service.
[ 133.206836] H testsuite-82.sh[614]: + exec sleep infinity
[ 133.236762] H systemd-logind[611]: The system will reboot now!
[ 135.891607] H systemd-coredump[667]: [🡕] Process 663 (busctl) of user 0 dumped core.
Stack trace of thread 663:
#0 0x00007f2ec45e6acf raise (libc.so.6 + 0x4eacf)
#1 0x00007f2ec45b9ea5 abort (libc.so.6 + 0x21ea5)
#2 0x00007f2ec4b5c9a6 log_assert_failed (libsystemd-shared-255.so + 0x1ff9a6)
#3 0x00007f2ec4b5dca5 log_assert_failed_return (libsystemd-shared-255.so + 0x200ca5)
#4 0x00007f2ec4bb3df6 sd_bus_message_is_signal (libsystemd-shared-255.so + 0x256df6)
#5 0x000000000040e478 monitor (busctl + 0xe478)
#6 0x000000000040e82f verb_monitor (busctl + 0xe82f)
#7 0x00007f2ec4b202cb dispatch_verb (libsystemd-shared-255.so + 0x1c32cb)
#8 0x00000000004074fa busctl_main (busctl + 0x74fa)
#9 0x0000000000407525 run (busctl + 0x7525)
#10 0x000000000040ff67 main (busctl + 0xff67)
#11 0x00007f2ec45d2d85 __libc_start_main (libc.so.6 + 0x3ad85)
#12 0x00000000004044be _start (busctl + 0x44be)
ELF object binary architecture: AMD x86-64
[ 136.141152] H dbus-daemon[634]: [system] Monitoring connection :1.2 closed.
[ 136.152233] H systemd[1]: busctl.service: Main process exited, code=dumped, status=6/ABRT
[ 136.153996] H systemd[1]: busctl.service: Failed with result 'core-dump'.
The asertion in question:
Assertion 'm' failed at src/libsystemd/sd-bus/bus-message.c:1015, function sd_bus_message_is_signal(). Aborting.
We can get a NULL message here through sd_bus_process() ->
bus_process_internal() -> process_running(), so let's handle this case
appropriately.
Conflict:NA
Reference:https://github.com/systemd/systemd/commit/b4a21d51487e21052af49b755d1707d4616e2977
---
src/busctl/busctl.c | 26 +++++++++++++-------------
1 file changed, 13 insertions(+), 13 deletions(-)
diff --git a/src/busctl/busctl.c b/src/busctl/busctl.c
index d233fc55ad..b2c2bc644d 100644
--- a/src/busctl/busctl.c
+++ b/src/busctl/busctl.c
@@ -1320,24 +1320,24 @@ static int monitor(int argc, char **argv, int (*dump)(sd_bus_message *m, FILE *f
if (r < 0)
return log_error_errno(r, "Failed to process bus: %m");
- if (!is_monitor) {
- const char *name;
+ if (m) {
+ if (!is_monitor) {
+ const char *name;
- /* wait until we lose our unique name */
- if (sd_bus_message_is_signal(m, "org.freedesktop.DBus", "NameLost") <= 0)
- continue;
+ /* wait until we lose our unique name */
+ if (sd_bus_message_is_signal(m, "org.freedesktop.DBus", "NameLost") <= 0)
+ continue;
- r = sd_bus_message_read(m, "s", &name);
- if (r < 0)
- return bus_log_parse_error(r);
+ r = sd_bus_message_read(m, "s", &name);
+ if (r < 0)
+ return bus_log_parse_error(r);
- if (streq(name, unique_name))
- is_monitor = true;
+ if (streq(name, unique_name))
+ is_monitor = true;
- continue;
- }
+ continue;
+ }
- if (m) {
dump(m, stdout);
fflush(stdout);
--
2.39.1

View File

@ -0,0 +1,58 @@
From 5b201ffb1e72100dc7a112c95bbac0ccbc98ab0d Mon Sep 17 00:00:00 2001
From: Yu Watanabe <watanabe.yu+github@gmail.com>
Date: Fri, 29 Dec 2023 04:31:21 +0900
Subject: [PATCH] sd-journal: check sd-event state before setting up post
change timer
The similar check already exists in schedule_post_change().
The function is currently called at two places.
- journal_file_open() in sd-journal:
In this case, if the timer is not set up, then journal_file_post_change()
will be called at the end of journal_file_append_entry(). So, the necessary
task will be done sequentially when an journal entry is stored to the opened
journal file. That is desired when the function is called at outside of the
event loop.
- server_open_journal() in journald:
This is not called after we exit the event loop.
So, we can safely do nothing in the function if the event loop is being
finished or already finished.
Fixes #30644.
Conflict:adapt context
Reference:https://github.com/systemd/systemd/commit/5b201ffb1e72100dc7a112c95bbac0ccbc98ab0d
---
src/journal/journal-file.c | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
index 9ea568f..4e4493c 100644
--- a/src/journal/journal-file.c
+++ b/src/journal/journal-file.c
@@ -1896,6 +1896,11 @@ int journal_file_enable_post_change_timer(JournalFile *f, sd_event *e, usec_t t)
assert(e);
assert(t);
+ /* If we are already going down, we cannot install the timer.
+ * In such case, the caller needs to call journal_file_post_change() explicitly. */
+ if (IN_SET(sd_event_get_state(e), SD_EVENT_EXITING, SD_EVENT_FINISHED))
+ return 0;
+
r = sd_event_add_time(e, &timer, CLOCK_MONOTONIC, 0, 0, post_change_thunk, f);
if (r < 0)
return r;
@@ -1907,7 +1912,7 @@ int journal_file_enable_post_change_timer(JournalFile *f, sd_event *e, usec_t t)
f->post_change_timer = TAKE_PTR(timer);
f->post_change_timer_period = t;
- return r;
+ return 1;
}
static int entry_item_cmp(const EntryItem *a, const EntryItem *b) {
--
2.41.0

View File

@ -16,7 +16,7 @@
Name: systemd
Url: https://www.freedesktop.org/wiki/Software/systemd
Version: 243
Release: 74
Release: 75
License: MIT and LGPLv2+ and GPLv2+
Summary: System and Service Manager
@ -297,6 +297,10 @@ Patch0249: backport-rules-import-previous-SYSTEMD_READY-state-for-suspen.pa
Patch0250: backport-rules-go-to-the-end-of-rules-indeed-when-dm-is-suspe.patch
Patch0251: backport-CVE-2023-7008.patch
Patch0252: backport-core-add-possibility-to-not-track-certain-unit-types.patch
Patch0253: backport-basic-fix-overflow-detection-in-sigbus_pop.patch
Patch0254: backport-bus-use-bus_log_parse_error-to-print-message.patch
Patch0255: backport-busctl-avoid-asserting-on-NULL-message.patch
Patch0256: backport-sd-journal-check-sd-event-state-before-setting-up-po.patch
#openEuler
Patch9002: 1509-fix-journal-file-descriptors-leak-problems.patch
@ -1704,6 +1708,15 @@ fi
%exclude /usr/share/man/man3/*
%changelog
* Wed Feb 28 2024 huyubiao <huyubiao@huawei.com> - 243-75
- Type:bugfix
- CVE:NA
- SUG:NA
- DESC:add backport-basic-fix-overflow-detection-in-sigbus_pop.patch
backport-bus-use-bus_log_parse_error-to-print-message.patch
backport-busctl-avoid-asserting-on-NULL-message.patch
backport-sd-journal-check-sd-event-state-before-setting-up-po.patch
* Thu Jan 18 2024 hongjinghao <hongjinghao@huawei.com> - 243-74
- add: backport-core-add-possibility-to-not-track-certain-unit-types.patch