Merge ~enr0n/ubuntu/+source/systemd:ubuntu-focal into ~ubuntu-core-dev/ubuntu/+source/systemd:ubuntu-focal

Proposed by Nick Rosbrook
Status: Merged
Merged at revision: ca7db87bfd35ff630be1d7d4f9145f621928a39d
Proposed branch: ~enr0n/ubuntu/+source/systemd:ubuntu-focal
Merge into: ~ubuntu-core-dev/ubuntu/+source/systemd:ubuntu-focal
Diff against target: 391 lines (+345/-0)
7 files modified
debian/changelog (+24/-0)
debian/patches/lp1837227-core-mount-adjust-deserialized-state-based-on-proc-self-m.patch (+119/-0)
debian/patches/lp1969365-Fall-back-to-kexec-when-no-kexec-binary-exists.patch (+28/-0)
debian/patches/lp2024009-dns-query-bump-CNAME_MAX-to-16.patch (+24/-0)
debian/patches/lp2029352-test-ignore-LXC-filesystem-when-checking-for-writable-loc.patch (+29/-0)
debian/patches/lp2037281-core-device-ignore-DEVICE_FOUND_UDEV-bit-on-switching-roo.patch (+116/-0)
debian/patches/series (+5/-0)
Reviewer Review Type Date Requested Status
Lukas Märdian Approve
Review via email: mp+455719@code.launchpad.net
To post a comment you must log in.
Revision history for this message
Lukas Märdian (slyon) wrote :

Thank you for providing autopkgtest results and PPA test builds! Those are mostly upstream cherry-picks, the patch for Bug #1837227 is a backport that seems to match upstream's new logic AFAICT.

LGTM!

Some non-blocking remarks:

- Bug #2029352
This seems to be lacking the SRU template. Also, we should put a clear comment in the bug report as to why this is ONLY needed on Focal. It seems to be fixed upstream as of v251, so we should put an argument why we don't need it for Jammy.

- lp2029352-test-ignore-LXC-filesystem-when-checking-for-writable-loc.patch
See inline comment about double escaping. Might be worth double-checking, just to be safe.

review: Approve
Revision history for this message
Nick Rosbrook (enr0n) wrote :

> Thank you for providing autopkgtest results and PPA test builds! Those are
> mostly upstream cherry-picks, the patch for Bug #1837227 is a backport that
> seems to match upstream's new logic AFAICT.
>
> LGTM!
>
>
> Some non-blocking remarks:
>
> - Bug #2029352
> This seems to be lacking the SRU template. Also, we should put a clear comment
> in the bug report as to why this is ONLY needed on Focal. It seems to be fixed
> upstream as of v251, so we should put an argument why we don't need it for
> Jammy.

Thanks, added SRU template. I will comment on the bug too, but FYI the reason we don't need this is because this test case is already skipped in Jammy on armhf due to https://git.launchpad.net/~ubuntu-core-dev/ubuntu/+source/systemd/tree/debian/patches/debian/UBUNTU-src-test-test-execute.c-Skip-parts-of-test-execute-in-con.patch?h=ubuntu-jammy.

>
> - lp2029352-test-ignore-LXC-filesystem-when-checking-for-writable-loc.patch
> See inline comment about double escaping. Might be worth double-checking, just
> to be safe.

Since this unit is only used in the unit test suite, and it passed autopkgtest, I think it's OK.

Thanks for reviewing!

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/debian/changelog b/debian/changelog
2index e8e0e5b..d0f4adc 100644
3--- a/debian/changelog
4+++ b/debian/changelog
5@@ -1,3 +1,27 @@
6+systemd (245.4-4ubuntu3.23) UNRELEASED; urgency=medium
7+
8+ [ Nick Rosbrook ]
9+ * core/device: ignore DEVICE_FOUND_UDEV bit on switching root (LP: #2037281)
10+ File: debian/patches/lp2037281-core-device-ignore-DEVICE_FOUND_UDEV-bit-on-switching-roo.patch
11+ https://git.launchpad.net/~ubuntu-core-dev/ubuntu/+source/systemd/commit/?id=7793563bb38a84a3dc6bc0da1c08546c3b915ab8
12+ * dns-query: bump CNAME_MAX to 16 (LP: #2024009)
13+ File: debian/patches/lp2024009-dns-query-bump-CNAME_MAX-to-16.patch
14+ https://git.launchpad.net/~ubuntu-core-dev/ubuntu/+source/systemd/commit/?id=193899d103d44c642d362e9916b14df844ec702f
15+ * Fall back to kexec when no kexec binary exists (LP: #1969365)
16+ File: debian/patches/lp1969365-Fall-back-to-kexec-when-no-kexec-binary-exists.patch
17+ https://git.launchpad.net/~ubuntu-core-dev/ubuntu/+source/systemd/commit/?id=3934f3794427dee4e72824998dd4c6e6d5875289
18+ * test: ignore LXC filesystem when checking for writable locations (LP: #2029352)
19+ File: debian/patches/lp2029352-test-ignore-LXC-filesystem-when-checking-for-writable-loc.patch
20+ https://git.launchpad.net/~ubuntu-core-dev/ubuntu/+source/systemd/commit/?id=70facbfbf54c4ffb31ba392dbe3fec3084fdf3bc
21+
22+ [ Heitor Alves de Siqueira ]
23+ * core/mount: adjust deserialized state based on /proc/self/mountinfo (LP: #1837227)
24+ Author: Heitor Alves de Siqueira
25+ File: debian/patches/lp1837227-core-mount-adjust-deserialized-state-based-on-proc-self-m.patch
26+ https://git.launchpad.net/~ubuntu-core-dev/ubuntu/+source/systemd/commit/?id=a0a749953d309f48bc45140102adf205d1071c4d
27+
28+ -- Nick Rosbrook <enr0n@ubuntu.com> Mon, 30 Oct 2023 15:24:20 -0400
29+
30 systemd (245.4-4ubuntu3.22) focal; urgency=medium
31
32 * resolve: fix potential memleak and use-after-free (LP: #2012943)
33diff --git a/debian/patches/lp1837227-core-mount-adjust-deserialized-state-based-on-proc-self-m.patch b/debian/patches/lp1837227-core-mount-adjust-deserialized-state-based-on-proc-self-m.patch
34new file mode 100644
35index 0000000..43309fd
36--- /dev/null
37+++ b/debian/patches/lp1837227-core-mount-adjust-deserialized-state-based-on-proc-self-m.patch
38@@ -0,0 +1,119 @@
39+From: Yu Watanabe <watanabe.yu+github@gmail.com>
40+Date: Wed, 6 Jul 2022 15:15:09 +0900
41+Subject: core/mount: adjust deserialized state based on /proc/self/mountinfo
42+
43+Origin: upstream, https://github.com/systemd/systemd/commit/01400460ae16
44+Bug-Ubuntu: https://launchpad.net/bugs/1837227
45+Bug: https://github.com/systemd/systemd/issues/23796
46+
47+Fixes #23796.
48+Replaces #23803 and #23851.
49+
50+(modified to apply to v245.4)
51+---
52+ src/core/mount.c | 55 +++++++++++++++++++++++++++++++++++++++++++++----------
53+ 1 file changed, 45 insertions(+), 10 deletions(-)
54+
55+diff --git a/src/core/mount.c b/src/core/mount.c
56+index dbfadc8..bb2b37f 100644
57+--- a/src/core/mount.c
58++++ b/src/core/mount.c
59+@@ -51,6 +51,9 @@ static const UnitActiveState state_translation_table[_MOUNT_STATE_MAX] = {
60+
61+ static int mount_dispatch_timer(sd_event_source *source, usec_t usec, void *userdata);
62+ static int mount_dispatch_io(sd_event_source *source, int fd, uint32_t revents, void *userdata);
63++static void mount_enter_dead(Mount *m, MountResult f);
64++static void mount_enter_mounted(Mount *m, MountResult f);
65++static void mount_cycle_clear(Mount *m);
66+ static int mount_process_proc_self_mountinfo(Manager *m);
67+
68+ static bool MOUNT_STATE_WITH_PROCESS(MountState state) {
69+@@ -691,23 +694,17 @@ static void mount_set_state(Mount *m, MountState state) {
70+
71+ static int mount_coldplug(Unit *u) {
72+ Mount *m = MOUNT(u);
73+- MountState new_state = MOUNT_DEAD;
74+ int r;
75+
76+ assert(m);
77+ assert(m->state == MOUNT_DEAD);
78+
79+- if (m->deserialized_state != m->state)
80+- new_state = m->deserialized_state;
81+- else if (m->from_proc_self_mountinfo)
82+- new_state = MOUNT_MOUNTED;
83+-
84+- if (new_state == m->state)
85++ if (m->deserialized_state == m->state)
86+ return 0;
87+
88+ if (m->control_pid > 0 &&
89+ pid_is_unwaited(m->control_pid) &&
90+- MOUNT_STATE_WITH_PROCESS(new_state)) {
91++ MOUNT_STATE_WITH_PROCESS(m->deserialized_state)) {
92+
93+ r = unit_watch_pid(UNIT(m), m->control_pid, false);
94+ if (r < 0)
95+@@ -718,15 +715,52 @@ static int mount_coldplug(Unit *u) {
96+ return r;
97+ }
98+
99+- if (!IN_SET(new_state, MOUNT_DEAD, MOUNT_FAILED)) {
100++ if (!IN_SET(m->deserialized_state, MOUNT_DEAD, MOUNT_FAILED)) {
101+ (void) unit_setup_dynamic_creds(u);
102+ (void) unit_setup_exec_runtime(u);
103+ }
104+
105+- mount_set_state(m, new_state);
106++ mount_set_state(m, m->deserialized_state);
107+ return 0;
108+ }
109+
110++static void mount_catchup(Unit *u) {
111++ Mount *m = MOUNT(u);
112++
113++ assert(m);
114++
115++ /* Adjust the deserialized state. See comments in mount_process_proc_self_mountinfo(). */
116++ if (m->from_proc_self_mountinfo)
117++ switch (m->state) {
118++ case MOUNT_DEAD:
119++ case MOUNT_FAILED:
120++ assert(m->control_pid == 0);
121++ unit_acquire_invocation_id(u);
122++ mount_cycle_clear(m);
123++ mount_enter_mounted(m, MOUNT_SUCCESS);
124++ break;
125++ case MOUNT_MOUNTING:
126++ assert(m->control_pid > 0);
127++ mount_set_state(m, MOUNT_MOUNTING_DONE);
128++ break;
129++ default:
130++ break;
131++ }
132++ else
133++ switch (m->state) {
134++ case MOUNT_MOUNTING_DONE:
135++ assert(m->control_pid > 0);
136++ mount_set_state(m, MOUNT_MOUNTING);
137++ break;
138++ case MOUNT_MOUNTED:
139++ assert(m->control_pid == 0);
140++ mount_enter_dead(m, MOUNT_SUCCESS);
141++ break;
142++ default:
143++ break;
144++ }
145++}
146++
147+ static void mount_dump(Unit *u, FILE *f, const char *prefix) {
148+ char buf[FORMAT_TIMESPAN_MAX];
149+ Mount *m = MOUNT(u);
150+@@ -2092,6 +2126,7 @@ const UnitVTable mount_vtable = {
151+ .done = mount_done,
152+
153+ .coldplug = mount_coldplug,
154++ .catchup = mount_catchup,
155+
156+ .dump = mount_dump,
157+
158diff --git a/debian/patches/lp1969365-Fall-back-to-kexec-when-no-kexec-binary-exists.patch b/debian/patches/lp1969365-Fall-back-to-kexec-when-no-kexec-binary-exists.patch
159new file mode 100644
160index 0000000..b8a691b
161--- /dev/null
162+++ b/debian/patches/lp1969365-Fall-back-to-kexec-when-no-kexec-binary-exists.patch
163@@ -0,0 +1,28 @@
164+From: Arusekk <arek_koz@o2.pl>
165+Date: Sun, 22 Mar 2020 10:41:18 +0100
166+Subject: Fall back to kexec when no kexec binary exists
167+
168+Origin: upstream, https://github.com/systemd/systemd/commit/71180f8e57f8fbb55978b00a13990c79093ff7b3
169+Bug-Ubuntu: https://launchpad.net/bugs/1969365
170+
171+This may be not a popular setup, but in case kexec resides somewhere different
172+than the default location for KEXEC (`/usr/sbin/kexec`), don't just reboot and
173+try doing `reboot(RB_KEXEC)` instead, just like what `kexec -e` normally does.
174+---
175+ src/shutdown/shutdown.c | 3 +++
176+ 1 file changed, 3 insertions(+)
177+
178+diff --git a/src/shutdown/shutdown.c b/src/shutdown/shutdown.c
179+index 271751a..5e2c963 100644
180+--- a/src/shutdown/shutdown.c
181++++ b/src/shutdown/shutdown.c
182+@@ -549,6 +549,9 @@ int main(int argc, char *argv[]) {
183+ /* Child */
184+
185+ execv(args[0], (char * const *) args);
186++
187++ /* execv failed (kexec binary missing?), so try simply reboot(RB_KEXEC) */
188++ (void) reboot(cmd);
189+ _exit(EXIT_FAILURE);
190+ }
191+
192diff --git a/debian/patches/lp2024009-dns-query-bump-CNAME_MAX-to-16.patch b/debian/patches/lp2024009-dns-query-bump-CNAME_MAX-to-16.patch
193new file mode 100644
194index 0000000..e974628
195--- /dev/null
196+++ b/debian/patches/lp2024009-dns-query-bump-CNAME_MAX-to-16.patch
197@@ -0,0 +1,24 @@
198+From: Nick Rosbrook <enr0n@ubuntu.com>
199+Date: Tue, 24 Oct 2023 16:32:30 -0400
200+Subject: dns-query: bump CNAME_MAX to 16
201+
202+Bug-Ubuntu: https://bugs.launchpad.net/ubuntu/focal/+source/systemd/+bug/2024009
203+Origin: upstream (partial), https://github.com/systemd/systemd/commit/e0ae456a55
204+
205+---
206+ src/resolve/resolved-dns-query.c | 2 +-
207+ 1 file changed, 1 insertion(+), 1 deletion(-)
208+
209+diff --git a/src/resolve/resolved-dns-query.c b/src/resolve/resolved-dns-query.c
210+index 4a41921..dfb2f50 100644
211+--- a/src/resolve/resolved-dns-query.c
212++++ b/src/resolve/resolved-dns-query.c
213+@@ -10,7 +10,7 @@
214+ #include "resolved-etc-hosts.h"
215+ #include "string-util.h"
216+
217+-#define CNAME_MAX 8
218++#define CNAME_MAX 16
219+ #define QUERIES_MAX 2048
220+ #define AUXILIARY_QUERIES_MAX 64
221+
222diff --git a/debian/patches/lp2029352-test-ignore-LXC-filesystem-when-checking-for-writable-loc.patch b/debian/patches/lp2029352-test-ignore-LXC-filesystem-when-checking-for-writable-loc.patch
223new file mode 100644
224index 0000000..d76ac3c
225--- /dev/null
226+++ b/debian/patches/lp2029352-test-ignore-LXC-filesystem-when-checking-for-writable-loc.patch
227@@ -0,0 +1,29 @@
228+From: Luca Boccassi <bluca@debian.org>
229+Date: Wed, 11 May 2022 12:24:10 +0100
230+Subject: test: ignore LXC filesystem when checking for writable locations
231+
232+Origin: upstream, https://github.com/systemd/systemd/commit/646cba5c4208c28c56dbe52d676ab1a176c69b7f
233+Bug-Ubuntu: https://launchpad.net/bugs/2029352
234+
235+test-execute checks that only /var/lib/private/waldo is writable, but there are
236+some filesystems that are always writable and excluded. Add /sys/devices/system/cpu
237+which is created by lxcfs.
238+
239+Fixes https://github.com/systemd/systemd/issues/23263
240+---
241+ test/test-execute/exec-dynamicuser-statedir.service | 2 +-
242+ 1 file changed, 1 insertion(+), 1 deletion(-)
243+
244+diff --git a/test/test-execute/exec-dynamicuser-statedir.service b/test/test-execute/exec-dynamicuser-statedir.service
245+index ca40934..4ec6c53 100644
246+--- a/test/test-execute/exec-dynamicuser-statedir.service
247++++ b/test/test-execute/exec-dynamicuser-statedir.service
248+@@ -13,7 +13,7 @@ ExecStart=test -f /var/lib/private/quux/pief/yayyay
249+ ExecStart=/bin/sh -x -c 'test "$$STATE_DIRECTORY" = "%S/waldo:%S/quux/pief"'
250+
251+ # Make sure that /var/lib/private/waldo is really the only writable directory besides the obvious candidates
252+-ExecStart=sh -x -c 'test $$(find / \( -path /var/tmp -o -path /tmp -o -path /proc -o -path /dev/mqueue -o -path /dev/shm -o -path /sys/fs/bpf -o -path /dev/.lxc \) -prune -o -type d -writable -print 2>/dev/null | sort -u | tr -d '\\\\n') = /var/lib/private/quux/pief/var/lib/private/waldo'
253++ExecStart=sh -x -c 'test $$(find / \\( -path /var/tmp -o -path /tmp -o -path /proc -o -path /dev/mqueue -o -path /dev/shm -o -path /sys/fs/bpf -o -path /dev/.lxc -o -path /sys/devices/system/cpu \\) -prune -o -type d -writable -print 2>/dev/null | sort -u | tr -d "\\\\n") = /var/lib/private/quux/pief/var/lib/private/waldo'
254+
255+ Type=oneshot
256+ DynamicUser=yes
257diff --git a/debian/patches/lp2037281-core-device-ignore-DEVICE_FOUND_UDEV-bit-on-switching-roo.patch b/debian/patches/lp2037281-core-device-ignore-DEVICE_FOUND_UDEV-bit-on-switching-roo.patch
258new file mode 100644
259index 0000000..4e0e2f1
260--- /dev/null
261+++ b/debian/patches/lp2037281-core-device-ignore-DEVICE_FOUND_UDEV-bit-on-switching-roo.patch
262@@ -0,0 +1,116 @@
263+From: Yu Watanabe <watanabe.yu+github@gmail.com>
264+Date: Fri, 29 Apr 2022 20:29:11 +0900
265+Subject: core/device: ignore DEVICE_FOUND_UDEV bit on switching root
266+
267+Origin: upstream, https://github.com/systemd/systemd/commit/75d7b5989f99125e52d5c0e5656fa1cd0fae2405
268+Bug-Ubuntu: https://launchpad.net/bugs/2037281
269+
270+The issue #12953 is caused by the following:
271+On switching root,
272+- deserialized_found == DEVICE_FOUND_UDEV | DEVICE_FOUND_MOUNT,
273+- deserialized_state == DEVICE_PLUGGED,
274+- enumerated_found == DEVICE_FOUND_MOUNT,
275+On switching root, most devices are not found by the enumeration process.
276+Hence, the device state is set to plugged by device_coldplug(), and then
277+changed to the dead state in device_catchup(). So the corresponding
278+mount point is unmounted. Later when the device is processed by udevd, it
279+will be changed to plugged state again.
280+
281+The issue #23208 is caused by the fact that generated udev database in
282+initramfs and the main system are often different.
283+
284+So, the two issues have the same root; we should not honor
285+DEVICE_FOUND_UDEV bit in the deserialized_found on switching root.
286+
287+This partially reverts c6e892bc0eebe1d42c282bd2d8bae149fbeba85f.
288+
289+Fixes #12953 and #23208.
290+Replaces #23215.
291+
292+Co-authored-by: Martin Wilck <mwilck@suse.com>
293+---
294+ src/core/device.c | 59 +++++++++++++++++++++++++++++++++++++++++++++----------
295+ 1 file changed, 49 insertions(+), 10 deletions(-)
296+
297+diff --git a/src/core/device.c b/src/core/device.c
298+index 06bbbf8..81b3616 100644
299+--- a/src/core/device.c
300++++ b/src/core/device.c
301+@@ -157,14 +157,57 @@ static int device_coldplug(Unit *u) {
302+ assert(d->state == DEVICE_DEAD);
303+
304+ /* First, let's put the deserialized state and found mask into effect, if we have it. */
305++ if (d->deserialized_state < 0)
306++ return 0;
307++
308++ Manager *m = u->manager;
309++ DeviceFound found = d->deserialized_found;
310++ DeviceState state = d->deserialized_state;
311++
312++ /* On initial boot, switch-root, reload, reexecute, the following happen:
313++ * 1. MANAGER_IS_RUNNING() == false
314++ * 2. enumerate devices: manager_enumerate() -> device_enumerate()
315++ * Device.enumerated_found is set.
316++ * 3. deserialize devices: manager_deserialize() -> device_deserialize()
317++ * Device.deserialize_state and Device.deserialized_found are set.
318++ * 4. coldplug devices: manager_coldplug() -> device_coldplug()
319++ * deserialized properties are copied to the main properties.
320++ * 5. MANAGER_IS_RUNNING() == true: manager_ready()
321++ * 6. catchup devices: manager_catchup() -> device_catchup()
322++ * Device.enumerated_found is applied to Device.found, and state is updated based on that.
323++ *
324++ * Notes:
325++ * - On initial boot, no udev database exists. Hence, no devices are enumerated in the step 2.
326++ * Also, there is no deserialized device. Device units are (a) generated based on dependencies of
327++ * other units, or (b) generated when uevents are received.
328++ *
329++ * - On switch-root, the udev databse may be cleared, except for devices with sticky bit, i.e.
330++ * OPTIONS="db_persist". Hence, almost no devices are enumerated in the step 2. However, in general,
331++ * we have several serialized devices. So, DEVICE_FOUND_UDEV bit in the deserialized_found must be
332++ * ignored, as udev rules in initramfs and the main system are often different. If the deserialized
333++ * state is DEVICE_PLUGGED, we need to downgrade it to DEVICE_TENTATIVE (or DEVICE_DEAD if nobody
334++ * sees the device). Unlike the other starting mode, Manager.honor_device_enumeration == false
335++ * (maybe, it is better to rename the flag) when device_coldplug() and device_catchup() are called.
336++ * Hence, let's conditionalize the operations by using the flag. After switch-root, systemd-udevd
337++ * will (re-)process all devices, and the Device.found and Device.state will be adjusted.
338++ *
339++ * - On reload or reexecute, we can trust enumerated_found, deserialized_found, and deserialized_state.
340++ * Of course, deserialized parameters may be outdated, but the unit state can be adjusted later by
341++ * device_catchup() or uevents. */
342++
343++ if (!m->honor_device_enumeration && !MANAGER_IS_USER(m)) {
344++ found &= ~DEVICE_FOUND_UDEV; /* ignore DEVICE_FOUND_UDEV bit */
345++ if (state == DEVICE_PLUGGED)
346++ state = DEVICE_TENTATIVE; /* downgrade state */
347++ if (found == DEVICE_NOT_FOUND)
348++ state = DEVICE_DEAD; /* If nobody sees the device, downgrade more */
349++ }
350+
351+- if (d->deserialized_state < 0 ||
352+- (d->deserialized_state == d->state &&
353+- d->deserialized_found == d->found))
354++ if (d->found == found && d->state == state)
355+ return 0;
356+
357+- d->found = d->deserialized_found;
358+- device_set_state(d, d->deserialized_state);
359++ d->found = found;
360++ device_set_state(d, state);
361+ return 0;
362+ }
363+
364+@@ -666,13 +709,9 @@ static void device_found_changed(Device *d, DeviceFound previous, DeviceFound no
365+ }
366+
367+ static void device_update_found_one(Device *d, DeviceFound found, DeviceFound mask) {
368+- Manager *m;
369+-
370+ assert(d);
371+
372+- m = UNIT(d)->manager;
373+-
374+- if (MANAGER_IS_RUNNING(m) && (m->honor_device_enumeration || MANAGER_IS_USER(m))) {
375++ if (MANAGER_IS_RUNNING(UNIT(d)->manager)) {
376+ DeviceFound n, previous;
377+
378+ /* When we are already running, then apply the new mask right-away, and trigger state changes
379diff --git a/debian/patches/series b/debian/patches/series
380index 9fa4a07..a249981 100644
381--- a/debian/patches/series
382+++ b/debian/patches/series
383@@ -194,3 +194,8 @@ lp2002445-sd-netlink-restore-altname-on-error-in-rtnl_set_link_name.patch
384 lp2002445-udev-attempt-device-rename-even-if-interface-is-up.patch
385 lp1933090-test-seccomp-accept-ENOSYS-from-sysctl-2-too.patch
386 lp2012943-resolve-fix-potential-memleak-and-use-after-free.patch
387+lp2037281-core-device-ignore-DEVICE_FOUND_UDEV-bit-on-switching-roo.patch
388+lp1837227-core-mount-adjust-deserialized-state-based-on-proc-self-m.patch
389+lp2024009-dns-query-bump-CNAME_MAX-to-16.patch
390+lp1969365-Fall-back-to-kexec-when-no-kexec-binary-exists.patch
391+lp2029352-test-ignore-LXC-filesystem-when-checking-for-writable-loc.patch

Subscribers

People subscribed via source and target branches