mirror of
https://git.yoctoproject.org/poky
synced 2026-10-21 18:58:20 +00:00
systemd: replace a bunch of assert() with friendlier checks
Backport a patch that replaces a bunch of assert() with friendlier checks Fix is already available since systemd v258-rc1. Journal file contents can change or be inconsistent on disk, so they must not be checked with assert(). We hit this on systemd 255.21, where dlt-system aborted in sd-journal: dlt-system[1284]: Assertion 'd->object.type == OBJECT_DATA' failed at src/libsystemd/sd-journal/journal-file.c:3237, function generic_array_bisect_for_data(). Aborting. generic_array_bisect_for_data() received a data object whose object.type was not OBJECT_DATA, and the assert aborted the whole process. The patch replaces these asserts with "if (type != expected) return -EBADMSG;" in bump_entry_array(), generic_array_bisect_for_data() and the journal_file_move_to_entry_*_for_data() functions. A bad object is then reported as an error to the caller instead of aborting it. (From OE-Core rev: 5a949112ac0d8baecc3da1ef7b20c3af9da4d1db) Signed-off-by: Suresh H A <Suresh.HA@bmwtechworks.in> Signed-off-by: Yoann Congal <yoann.congal@smile.fr> Signed-off-by: Paul Barker <paul@pbarker.dev>
This commit is contained in:
1 parent
86a2b31fd5
commit
da3707fc1e
2 files changed
+109
No files matched your search
+108
@@ -0,0 +1,108 @@
|
||||
From 5ee8b3edb385b216eb4f3316323ae1287824971a Mon Sep 17 00:00:00 2001
|
||||
From: Lennart Poettering <lennart@poettering.net>
|
||||
Date: Thu, 5 Jun 2025 22:26:03 +0200
|
||||
Subject: [PATCH] journal: replace a bunch of assert() with friendlier checks
|
||||
|
||||
We should not rely that data stored in the journal files remains
|
||||
entirely untouched at all times. Because we unallocate files, data might
|
||||
go away any time. Hence, never assert() on any expectations on what the
|
||||
file contains. Instead, handle it more gracefully as a corruption issue,
|
||||
and return EBADMSG.
|
||||
|
||||
Fixes: #35229 #32436
|
||||
|
||||
Upstream-Status: Backport [https://github.com/systemd/systemd/pull/37757/commits/5ee8b3edb385b216eb4f3316323ae1287824971a]
|
||||
|
||||
Signed-off-by: Suresh H A <Suresh.HA@bmwtechworks.in>
|
||||
---
|
||||
src/libsystemd/sd-journal/journal-file.c | 28 ++++++++++++++++++------
|
||||
1 file changed, 21 insertions(+), 7 deletions(-)
|
||||
|
||||
diff --git a/src/libsystemd/sd-journal/journal-file.c b/src/libsystemd/sd-journal/journal-file.c
|
||||
index fecddb932f..acceea7770 100644
|
||||
--- a/src/libsystemd/sd-journal/journal-file.c
|
||||
+++ b/src/libsystemd/sd-journal/journal-file.c
|
||||
@@ -2740,7 +2740,9 @@ static int bump_entry_array(
|
||||
|
||||
if (direction == DIRECTION_DOWN) {
|
||||
assert(o);
|
||||
- assert(o->object.type == OBJECT_ENTRY_ARRAY);
|
||||
+
|
||||
+ if (o->object.type != OBJECT_ENTRY_ARRAY)
|
||||
+ return -EBADMSG;
|
||||
|
||||
*ret = le64toh(o->entry_array.next_entry_array_offset);
|
||||
} else {
|
||||
@@ -3241,9 +3243,11 @@ static int generic_array_bisect_for_data(
|
||||
|
||||
assert(f);
|
||||
assert(d);
|
||||
- assert(d->object.type == OBJECT_DATA);
|
||||
assert(test_object);
|
||||
|
||||
+ if (d->object.type != OBJECT_DATA)
|
||||
+ return -EBADMSG;
|
||||
+
|
||||
n = le64toh(d->data.n_entries);
|
||||
if (n <= 0)
|
||||
return 0;
|
||||
@@ -3609,9 +3613,11 @@ int journal_file_move_to_entry_for_data(
|
||||
|
||||
assert(f);
|
||||
assert(d);
|
||||
- assert(d->object.type == OBJECT_DATA);
|
||||
assert(IN_SET(direction, DIRECTION_DOWN, DIRECTION_UP));
|
||||
|
||||
+ if (d->object.type != OBJECT_DATA)
|
||||
+ return -EBADMSG;
|
||||
+
|
||||
/* FIXME: fix return value assignment. */
|
||||
|
||||
/* This returns the first (when the direction is down, otherwise the last) entry linked to the
|
||||
@@ -3671,7 +3677,9 @@ int journal_file_move_to_entry_by_offset_for_data(
|
||||
|
||||
assert(f);
|
||||
assert(d);
|
||||
- assert(d->object.type == OBJECT_DATA);
|
||||
+
|
||||
+ if (d->object.type != OBJECT_DATA)
|
||||
+ return -EBADMSG;
|
||||
|
||||
return generic_array_bisect_for_data(
|
||||
f,
|
||||
@@ -3697,7 +3705,9 @@ int journal_file_move_to_entry_by_monotonic_for_data(
|
||||
|
||||
assert(f);
|
||||
assert(d);
|
||||
- assert(d->object.type == OBJECT_DATA);
|
||||
+
|
||||
+ if (d->object.type != OBJECT_DATA)
|
||||
+ return -EBADMSG;
|
||||
|
||||
/* First, pin the given data object, before reading the _BOOT_ID= data object below. */
|
||||
r = journal_file_pin_object(f, d);
|
||||
@@ -3763,7 +3773,9 @@ int journal_file_move_to_entry_by_seqnum_for_data(
|
||||
|
||||
assert(f);
|
||||
assert(d);
|
||||
- assert(d->object.type == OBJECT_DATA);
|
||||
+
|
||||
+ if (d->object.type != OBJECT_DATA)
|
||||
+ return -EBADMSG;
|
||||
|
||||
return generic_array_bisect_for_data(
|
||||
f,
|
||||
@@ -3783,7 +3795,9 @@ int journal_file_move_to_entry_by_realtime_for_data(
|
||||
|
||||
assert(f);
|
||||
assert(d);
|
||||
- assert(d->object.type == OBJECT_DATA);
|
||||
+
|
||||
+ if (d->object.type != OBJECT_DATA)
|
||||
+ return -EBADMSG;
|
||||
|
||||
return generic_array_bisect_for_data(
|
||||
f,
|
||||
--
|
||||
2.43.0
|
||||
|
||||
@@ -38,6 +38,7 @@ SRC_URI += " \
|
||||
file://CVE-2026-29111-03.patch \
|
||||
file://CVE-2026-29111-04.patch \
|
||||
file://CVE-2026-4105.patch \
|
||||
file://0023-journal-replace-a-bunch-of-assert-with-friendlier-ch.patch \
|
||||
"
|
||||
|
||||
# patches needed by musl
|
||||
|
||||
Reference in new issue
Block a user