Compare commits
No commits in common. "imports/c9/systemd-250-12.el9_1.1" and "c8" have entirely different histories.
imports/c9
...
c8
2
.gitignore
vendored
2
.gitignore
vendored
@ -1 +1 @@
|
|||||||
SOURCES/systemd-250.tar.gz
|
SOURCES/systemd-239.tar.gz
|
||||||
|
@ -1 +1 @@
|
|||||||
3b9db821b29a577d004c8823f4ff7a054c81a39c SOURCES/systemd-250.tar.gz
|
8803baa484cbe36680463c8c5e6febeff074b8e7 SOURCES/systemd-239.tar.gz
|
||||||
|
@ -0,0 +1,105 @@
|
|||||||
|
From 79df4db3fd122f5040bdf2225c3047375de3b0d2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Filipe Brandenburger <filbranden@google.com>
|
||||||
|
Date: Sun, 15 Jul 2018 22:43:35 -0700
|
||||||
|
Subject: [PATCH] build-sys: Detect whether struct statx is defined in
|
||||||
|
sys/stat.h
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
Starting with glibc 2.27.9000-36.fc29, include file sys/stat.h will have a
|
||||||
|
definition for struct statx, in which case include file linux/stat.h should be
|
||||||
|
avoided, in order to prevent a duplicate definition.
|
||||||
|
|
||||||
|
In file included from ../src/basic/missing.h:18,
|
||||||
|
from ../src/basic/util.h:28,
|
||||||
|
from ../src/basic/hashmap.h:10,
|
||||||
|
from ../src/shared/bus-util.h:12,
|
||||||
|
from ../src/libsystemd/sd-bus/bus-creds.c:11:
|
||||||
|
/usr/include/linux/stat.h:99:8: error: redefinition of ‘struct statx’
|
||||||
|
struct statx {
|
||||||
|
^~~~~
|
||||||
|
In file included from /usr/include/sys/stat.h:446,
|
||||||
|
from ../src/basic/util.h:19,
|
||||||
|
from ../src/basic/hashmap.h:10,
|
||||||
|
from ../src/shared/bus-util.h:12,
|
||||||
|
from ../src/libsystemd/sd-bus/bus-creds.c:11:
|
||||||
|
/usr/include/bits/statx.h:36:8: note: originally defined here
|
||||||
|
struct statx
|
||||||
|
^~~~~
|
||||||
|
|
||||||
|
Extend our meson.build to look for struct statx when only sys/stat.h is
|
||||||
|
included and, in that case, do not include linux/stat.h anymore.
|
||||||
|
|
||||||
|
Tested that systemd builds correctly when using a glibc version that includes a
|
||||||
|
definition for struct statx.
|
||||||
|
|
||||||
|
glibc Fedora RPM update:
|
||||||
|
https://src.fedoraproject.org/rpms/glibc/c/28cb5d31fc1e5887912283c889689c47076278ae
|
||||||
|
|
||||||
|
glibc upstream commit:
|
||||||
|
https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=fd70af45528d59a00eb3190ef6706cb299488fcd
|
||||||
|
---
|
||||||
|
meson.build | 5 +++++
|
||||||
|
src/basic/missing.h | 5 ++++-
|
||||||
|
src/basic/xattr-util.c | 1 -
|
||||||
|
3 files changed, 9 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/meson.build b/meson.build
|
||||||
|
index 04331dd41a..a0e7240708 100644
|
||||||
|
--- a/meson.build
|
||||||
|
+++ b/meson.build
|
||||||
|
@@ -425,6 +425,7 @@ decl_headers = '''
|
||||||
|
#include <sys/stat.h>
|
||||||
|
'''
|
||||||
|
# FIXME: key_serial_t is only defined in keyutils.h, this is bound to fail
|
||||||
|
+# FIXME: these should use -D_GNU_SOURCE, since that is defined at build time
|
||||||
|
|
||||||
|
foreach decl : ['char16_t',
|
||||||
|
'char32_t',
|
||||||
|
@@ -439,6 +440,10 @@ foreach decl : ['char16_t',
|
||||||
|
conf.set10('HAVE_' + decl.underscorify().to_upper(), have)
|
||||||
|
endforeach
|
||||||
|
|
||||||
|
+conf.set10('HAVE_STRUCT_STATX_IN_SYS_STAT_H', cc.sizeof('struct statx', prefix : '''
|
||||||
|
+#include <sys/stat.h>
|
||||||
|
+''', args : '-D_GNU_SOURCE') > 0)
|
||||||
|
+
|
||||||
|
foreach decl : [['IFLA_INET6_ADDR_GEN_MODE', 'linux/if_link.h'],
|
||||||
|
['IN6_ADDR_GEN_MODE_STABLE_PRIVACY', 'linux/if_link.h'],
|
||||||
|
['IFLA_VRF_TABLE', 'linux/if_link.h'],
|
||||||
|
diff --git a/src/basic/missing.h b/src/basic/missing.h
|
||||||
|
index 71a07d0574..14ad3d4914 100644
|
||||||
|
--- a/src/basic/missing.h
|
||||||
|
+++ b/src/basic/missing.h
|
||||||
|
@@ -15,7 +15,6 @@
|
||||||
|
#include <linux/neighbour.h>
|
||||||
|
#include <linux/oom.h>
|
||||||
|
#include <linux/rtnetlink.h>
|
||||||
|
-#include <linux/stat.h>
|
||||||
|
#include <net/ethernet.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <sys/resource.h>
|
||||||
|
@@ -25,6 +24,10 @@
|
||||||
|
#include <uchar.h>
|
||||||
|
#include <unistd.h>
|
||||||
|
|
||||||
|
+#if !HAVE_STRUCT_STATX_IN_SYS_STAT_H
|
||||||
|
+#include <linux/stat.h>
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
#if HAVE_AUDIT
|
||||||
|
#include <libaudit.h>
|
||||||
|
#endif
|
||||||
|
diff --git a/src/basic/xattr-util.c b/src/basic/xattr-util.c
|
||||||
|
index c5c55ea846..0ee0979837 100644
|
||||||
|
--- a/src/basic/xattr-util.c
|
||||||
|
+++ b/src/basic/xattr-util.c
|
||||||
|
@@ -2,7 +2,6 @@
|
||||||
|
|
||||||
|
#include <errno.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
-#include <linux/stat.h>
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
#include <string.h>
|
@ -1,11 +1,9 @@
|
|||||||
From 5a66d993a5be88524d9952193b053eac607a5c17 Mon Sep 17 00:00:00 2001
|
From 0b3833d6c3b751c6dfb40eeb2ef852984c58f546 Mon Sep 17 00:00:00 2001
|
||||||
From: rpm-build <rpm-build>
|
From: rpm-build <rpm-build>
|
||||||
Date: Wed, 1 Aug 2018 10:58:28 +0200
|
Date: Wed, 1 Aug 2018 10:58:28 +0200
|
||||||
Subject: [PATCH] logind: set RemoveIPC to false by default
|
Subject: [PATCH] logind: set RemoveIPC to false by default
|
||||||
|
|
||||||
RHEL-only
|
Resolves: #1523233
|
||||||
|
|
||||||
Resolves: #1959836
|
|
||||||
---
|
---
|
||||||
man/logind.conf.xml | 2 +-
|
man/logind.conf.xml | 2 +-
|
||||||
src/login/logind-core.c | 2 +-
|
src/login/logind-core.c | 2 +-
|
||||||
@ -13,10 +11,10 @@ Resolves: #1959836
|
|||||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
diff --git a/man/logind.conf.xml b/man/logind.conf.xml
|
diff --git a/man/logind.conf.xml b/man/logind.conf.xml
|
||||||
index 3045c1b9ba..96fa076239 100644
|
index 9e88764c6f..7d7e869a26 100644
|
||||||
--- a/man/logind.conf.xml
|
--- a/man/logind.conf.xml
|
||||||
+++ b/man/logind.conf.xml
|
+++ b/man/logind.conf.xml
|
||||||
@@ -354,7 +354,7 @@
|
@@ -319,7 +319,7 @@
|
||||||
user fully logs out. Takes a boolean argument. If enabled, the user may not consume IPC resources after the
|
user fully logs out. Takes a boolean argument. If enabled, the user may not consume IPC resources after the
|
||||||
last of the user's sessions terminated. This covers System V semaphores, shared memory and message queues, as
|
last of the user's sessions terminated. This covers System V semaphores, shared memory and message queues, as
|
||||||
well as POSIX shared memory and message queues. Note that IPC objects of the root user and other system users
|
well as POSIX shared memory and message queues. Note that IPC objects of the root user and other system users
|
||||||
@ -26,26 +24,26 @@ index 3045c1b9ba..96fa076239 100644
|
|||||||
|
|
||||||
</variablelist>
|
</variablelist>
|
||||||
diff --git a/src/login/logind-core.c b/src/login/logind-core.c
|
diff --git a/src/login/logind-core.c b/src/login/logind-core.c
|
||||||
index 254a1a69fb..616c08132a 100644
|
index dbae4bf5af..511e3acf8f 100644
|
||||||
--- a/src/login/logind-core.c
|
--- a/src/login/logind-core.c
|
||||||
+++ b/src/login/logind-core.c
|
+++ b/src/login/logind-core.c
|
||||||
@@ -34,7 +34,7 @@ void manager_reset_config(Manager *m) {
|
@@ -25,7 +25,7 @@ void manager_reset_config(Manager *m) {
|
||||||
|
|
||||||
m->n_autovts = 6;
|
m->n_autovts = 6;
|
||||||
m->reserve_vt = 6;
|
m->reserve_vt = 6;
|
||||||
- m->remove_ipc = true;
|
- m->remove_ipc = true;
|
||||||
+ m->remove_ipc = false;
|
+ m->remove_ipc = false;
|
||||||
m->inhibit_delay_max = 5 * USEC_PER_SEC;
|
m->inhibit_delay_max = 5 * USEC_PER_SEC;
|
||||||
m->user_stop_delay = 10 * USEC_PER_SEC;
|
m->handle_power_key = HANDLE_POWEROFF;
|
||||||
|
m->handle_suspend_key = HANDLE_SUSPEND;
|
||||||
diff --git a/src/login/logind.conf.in b/src/login/logind.conf.in
|
diff --git a/src/login/logind.conf.in b/src/login/logind.conf.in
|
||||||
index 2d084e134d..79d685b3de 100644
|
index 1029e29bc7..c7346f9819 100644
|
||||||
--- a/src/login/logind.conf.in
|
--- a/src/login/logind.conf.in
|
||||||
+++ b/src/login/logind.conf.in
|
+++ b/src/login/logind.conf.in
|
||||||
@@ -40,6 +40,6 @@
|
@@ -32,6 +32,6 @@
|
||||||
|
#IdleAction=ignore
|
||||||
#IdleActionSec=30min
|
#IdleActionSec=30min
|
||||||
#RuntimeDirectorySize=10%
|
#RuntimeDirectorySize=10%
|
||||||
#RuntimeDirectoryInodes=400k
|
|
||||||
-#RemoveIPC=yes
|
-#RemoveIPC=yes
|
||||||
+#RemoveIPC=no
|
+#RemoveIPC=no
|
||||||
#InhibitorsMax=8192
|
#InhibitorsMax=8192
|
@ -1,43 +0,0 @@
|
|||||||
From 92b6ae2097ae90355775217529d2fd55f7b84e31 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michal Sekletar <msekleta@redhat.com>
|
|
||||||
Date: Thu, 5 Aug 2021 17:11:47 +0200
|
|
||||||
Subject: [PATCH] tmpfiles: don't create resolv.conf -> stub-resolv.conf
|
|
||||||
symlink
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #1989472
|
|
||||||
---
|
|
||||||
tmpfiles.d/meson.build | 1 -
|
|
||||||
tmpfiles.d/systemd-resolve.conf | 10 ----------
|
|
||||||
2 files changed, 11 deletions(-)
|
|
||||||
delete mode 100644 tmpfiles.d/systemd-resolve.conf
|
|
||||||
|
|
||||||
diff --git a/tmpfiles.d/meson.build b/tmpfiles.d/meson.build
|
|
||||||
index b8d3919025..6ae9e3e0b8 100644
|
|
||||||
--- a/tmpfiles.d/meson.build
|
|
||||||
+++ b/tmpfiles.d/meson.build
|
|
||||||
@@ -7,7 +7,6 @@ files = [['README', ''],
|
|
||||||
['journal-nocow.conf', ''],
|
|
||||||
['systemd-nologin.conf', 'HAVE_PAM'],
|
|
||||||
['systemd-nspawn.conf', 'ENABLE_MACHINED'],
|
|
||||||
- ['systemd-resolve.conf', 'ENABLE_RESOLVE'],
|
|
||||||
['systemd-tmp.conf', ''],
|
|
||||||
['portables.conf', 'ENABLE_PORTABLED'],
|
|
||||||
['systemd-pstore.conf', 'ENABLE_PSTORE'],
|
|
||||||
diff --git a/tmpfiles.d/systemd-resolve.conf b/tmpfiles.d/systemd-resolve.conf
|
|
||||||
deleted file mode 100644
|
|
||||||
index cb1c56d6a6..0000000000
|
|
||||||
--- a/tmpfiles.d/systemd-resolve.conf
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,10 +0,0 @@
|
|
||||||
-# This file is part of systemd.
|
|
||||||
-#
|
|
||||||
-# systemd is free software; you can redistribute it and/or modify it
|
|
||||||
-# under the terms of the GNU Lesser General Public License as published by
|
|
||||||
-# the Free Software Foundation; either version 2.1 of the License, or
|
|
||||||
-# (at your option) any later version.
|
|
||||||
-
|
|
||||||
-# See tmpfiles.d(5) for details
|
|
||||||
-
|
|
||||||
-L! /etc/resolv.conf - - - - ../run/systemd/resolve/stub-resolv.conf
|
|
@ -1,78 +0,0 @@
|
|||||||
From 24f033a2a5c03848ae518278c8025e13130146af Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Tardon <dtardon@redhat.com>
|
|
||||||
Date: Fri, 2 Jul 2021 13:25:51 +0200
|
|
||||||
Subject: [PATCH] Copy 40-redhat.rules from RHEL-8
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #1978639
|
|
||||||
---
|
|
||||||
rules.d/40-redhat.rules | 46 +++++++++++++++++++++++++++++++++++++++++
|
|
||||||
rules.d/meson.build | 1 +
|
|
||||||
2 files changed, 47 insertions(+)
|
|
||||||
create mode 100644 rules.d/40-redhat.rules
|
|
||||||
|
|
||||||
diff --git a/rules.d/40-redhat.rules b/rules.d/40-redhat.rules
|
|
||||||
new file mode 100644
|
|
||||||
index 0000000000..3c95cd2df0
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/rules.d/40-redhat.rules
|
|
||||||
@@ -0,0 +1,46 @@
|
|
||||||
+# do not edit this file, it will be overwritten on update
|
|
||||||
+
|
|
||||||
+# CPU hotadd request
|
|
||||||
+SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
|
|
||||||
+
|
|
||||||
+# Memory hotadd request
|
|
||||||
+SUBSYSTEM!="memory", GOTO="memory_hotplug_end"
|
|
||||||
+ACTION!="add", GOTO="memory_hotplug_end"
|
|
||||||
+CONST{arch}=="s390*", GOTO="memory_hotplug_end"
|
|
||||||
+CONST{arch}=="ppc64*", GOTO="memory_hotplug_end"
|
|
||||||
+
|
|
||||||
+ENV{.state}="online"
|
|
||||||
+CONST{virt}=="none", ENV{.state}="online_movable"
|
|
||||||
+ATTR{state}=="offline", ATTR{state}="$env{.state}"
|
|
||||||
+
|
|
||||||
+LABEL="memory_hotplug_end"
|
|
||||||
+
|
|
||||||
+# reload sysctl.conf / sysctl.conf.d settings when the bridge module is loaded
|
|
||||||
+ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"
|
|
||||||
+
|
|
||||||
+# load SCSI generic (sg) driver
|
|
||||||
+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -bv sg"
|
|
||||||
+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_target", TEST!="[module/sg]", RUN+="/sbin/modprobe -bv sg"
|
|
||||||
+
|
|
||||||
+# Rule for prandom character device node permissions
|
|
||||||
+KERNEL=="prandom", MODE="0644"
|
|
||||||
+
|
|
||||||
+# Rules for creating the ID_PATH for SCSI devices based on the CCW bus
|
|
||||||
+# using the form: ccw-<BUS_ID>-zfcp-<WWPN>:<LUN>
|
|
||||||
+#
|
|
||||||
+ACTION=="remove", GOTO="zfcp_scsi_device_end"
|
|
||||||
+
|
|
||||||
+#
|
|
||||||
+# Set environment variable "ID_ZFCP_BUS" to "1" if the devices
|
|
||||||
+# (both disk and partition) are SCSI devices based on FCP devices
|
|
||||||
+#
|
|
||||||
+KERNEL=="sd*", SUBSYSTEMS=="ccw", DRIVERS=="zfcp", ENV{.ID_ZFCP_BUS}="1"
|
|
||||||
+
|
|
||||||
+# For SCSI disks
|
|
||||||
+KERNEL=="sd*[!0-9]", SUBSYSTEMS=="scsi", ENV{.ID_ZFCP_BUS}=="1", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-path/ccw-$attr{hba_id}-zfcp-$attr{wwpn}:$attr{fcp_lun}"
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+# For partitions on a SCSI disk
|
|
||||||
+KERNEL=="sd*[0-9]", SUBSYSTEMS=="scsi", ENV{.ID_ZFCP_BUS}=="1", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-path/ccw-$attr{hba_id}-zfcp-$attr{wwpn}:$attr{fcp_lun}-part%n"
|
|
||||||
+
|
|
||||||
+LABEL="zfcp_scsi_device_end"
|
|
||||||
diff --git a/rules.d/meson.build b/rules.d/meson.build
|
|
||||||
index 5cecddb34f..c5c3590b29 100644
|
|
||||||
--- a/rules.d/meson.build
|
|
||||||
+++ b/rules.d/meson.build
|
|
||||||
@@ -5,6 +5,7 @@ install_data(
|
|
||||||
install_dir : udevrulesdir)
|
|
||||||
|
|
||||||
rules = files('''
|
|
||||||
+ 40-redhat.rules
|
|
||||||
60-autosuspend.rules
|
|
||||||
60-block.rules
|
|
||||||
60-cdrom_id.rules
|
|
@ -0,0 +1,53 @@
|
|||||||
|
From b924c79720cc2bf2edf75fa3ff43bb4954fccf1f Mon Sep 17 00:00:00 2001
|
||||||
|
From: rpm-build <rpm-build>
|
||||||
|
Date: Wed, 1 Aug 2018 13:19:39 +0200
|
||||||
|
Subject: [PATCH] pid1: bump DefaultTasksMax to 80% of the kernel pid.max value
|
||||||
|
|
||||||
|
This should be hopefully high enough even for the very big deployments.
|
||||||
|
|
||||||
|
Resolves: #1523236
|
||||||
|
---
|
||||||
|
man/systemd-system.conf.xml | 2 +-
|
||||||
|
src/basic/cgroup-util.h | 2 +-
|
||||||
|
src/core/system.conf.in | 2 +-
|
||||||
|
3 files changed, 3 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
|
||||||
|
index a914ef2523..085086200a 100644
|
||||||
|
--- a/man/systemd-system.conf.xml
|
||||||
|
+++ b/man/systemd-system.conf.xml
|
||||||
|
@@ -339,7 +339,7 @@
|
||||||
|
<listitem><para>Configure the default value for the per-unit <varname>TasksMax=</varname> setting. See
|
||||||
|
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
||||||
|
for details. This setting applies to all unit types that support resource control settings, with the exception
|
||||||
|
- of slice units. Defaults to 15%, which equals 4915 with the kernel's defaults on the host, but might be smaller
|
||||||
|
+ of slice units. Defaults to 80%, which equals 26214 with the kernel's defaults on the host, but might be smaller
|
||||||
|
in OS containers.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h
|
||||||
|
index 1a28a8163a..f10c26ad51 100644
|
||||||
|
--- a/src/basic/cgroup-util.h
|
||||||
|
+++ b/src/basic/cgroup-util.h
|
||||||
|
@@ -100,7 +100,7 @@ static inline bool CGROUP_BLKIO_WEIGHT_IS_OK(uint64_t x) {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Default resource limits */
|
||||||
|
-#define DEFAULT_TASKS_MAX_PERCENTAGE 15U /* 15% of PIDs, 4915 on default settings */
|
||||||
|
+#define DEFAULT_TASKS_MAX_PERCENTAGE 80U /* 80% of PIDs, 26214 on default settings */
|
||||||
|
#define DEFAULT_USER_TASKS_MAX_PERCENTAGE 33U /* 33% of PIDs, 10813 on default settings */
|
||||||
|
|
||||||
|
typedef enum CGroupUnified {
|
||||||
|
diff --git a/src/core/system.conf.in b/src/core/system.conf.in
|
||||||
|
index f0a59a79a5..653ec6b8c9 100644
|
||||||
|
--- a/src/core/system.conf.in
|
||||||
|
+++ b/src/core/system.conf.in
|
||||||
|
@@ -45,7 +45,7 @@
|
||||||
|
#DefaultBlockIOAccounting=no
|
||||||
|
#DefaultMemoryAccounting=@MEMORY_ACCOUNTING_DEFAULT@
|
||||||
|
#DefaultTasksAccounting=yes
|
||||||
|
-#DefaultTasksMax=15%
|
||||||
|
+#DefaultTasksMax=80%
|
||||||
|
#DefaultLimitCPU=
|
||||||
|
#DefaultLimitFSIZE=
|
||||||
|
#DefaultLimitDATA=
|
@ -1,4 +1,4 @@
|
|||||||
From c9ca30a1debbdf24ab6fcbe1aa1ec7ac5f222cb4 Mon Sep 17 00:00:00 2001
|
From f58c5ced373c2532b5cc44ba2e0c3a28b41472f2 Mon Sep 17 00:00:00 2001
|
||||||
From: Jan Synacek <jsynacek@redhat.com>
|
From: Jan Synacek <jsynacek@redhat.com>
|
||||||
Date: Tue, 15 May 2018 09:24:20 +0200
|
Date: Tue, 15 May 2018 09:24:20 +0200
|
||||||
Subject: [PATCH] Avoid /tmp being mounted as tmpfs without the user's will
|
Subject: [PATCH] Avoid /tmp being mounted as tmpfs without the user's will
|
||||||
@ -6,34 +6,40 @@ Subject: [PATCH] Avoid /tmp being mounted as tmpfs without the user's will
|
|||||||
Ensure PrivateTmp doesn't require tmpfs through tmp.mount, but rather
|
Ensure PrivateTmp doesn't require tmpfs through tmp.mount, but rather
|
||||||
adds an After relationship.
|
adds an After relationship.
|
||||||
|
|
||||||
RHEL-only
|
rhel-only
|
||||||
|
|
||||||
Resolves: #1959826
|
Resolves: #1578772
|
||||||
---
|
---
|
||||||
src/core/unit.c | 7 +------
|
src/core/unit.c | 12 ++++++------
|
||||||
units/basic.target | 3 ++-
|
units/basic.target | 3 ++-
|
||||||
2 files changed, 3 insertions(+), 7 deletions(-)
|
2 files changed, 8 insertions(+), 7 deletions(-)
|
||||||
|
|
||||||
diff --git a/src/core/unit.c b/src/core/unit.c
|
diff --git a/src/core/unit.c b/src/core/unit.c
|
||||||
index b1f1f5c82c..3a8251e2b8 100644
|
index 113205bf25..c9f756c9c7 100644
|
||||||
--- a/src/core/unit.c
|
--- a/src/core/unit.c
|
||||||
+++ b/src/core/unit.c
|
+++ b/src/core/unit.c
|
||||||
@@ -1280,12 +1280,7 @@ int unit_add_exec_dependencies(Unit *u, ExecContext *c) {
|
@@ -982,13 +982,13 @@ int unit_add_exec_dependencies(Unit *u, ExecContext *c) {
|
||||||
}
|
return 0;
|
||||||
|
|
||||||
if (c->private_tmp) {
|
if (c->private_tmp) {
|
||||||
-
|
- const char *p;
|
||||||
- /* FIXME: for now we make a special case for /tmp and add a weak dependency on
|
+ r = unit_add_dependency_by_name(u, UNIT_AFTER, "tmp.mount", NULL, true, UNIT_DEPENDENCY_FILE);
|
||||||
- * tmp.mount so /tmp being masked is supported. However there's no reason to treat
|
+ if (r < 0)
|
||||||
- * /tmp specifically and masking other mount units should be handled more
|
+ return r;
|
||||||
- * gracefully too, see PR#16894. */
|
|
||||||
- r = unit_add_two_dependencies_by_name(u, UNIT_AFTER, UNIT_WANTS, "tmp.mount", true, UNIT_DEPENDENCY_FILE);
|
|
||||||
+ r = unit_add_dependency_by_name(u, UNIT_AFTER, "tmp.mount", true, UNIT_DEPENDENCY_FILE);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
|
- FOREACH_STRING(p, "/tmp", "/var/tmp") {
|
||||||
|
- r = unit_require_mounts_for(u, p, UNIT_DEPENDENCY_FILE);
|
||||||
|
- if (r < 0)
|
||||||
|
- return r;
|
||||||
|
- }
|
||||||
|
+ r = unit_require_mounts_for(u, "/var/tmp", UNIT_DEPENDENCY_FILE);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
|
||||||
|
r = unit_add_dependency_by_name(u, UNIT_AFTER, SPECIAL_TMPFILES_SETUP_SERVICE, NULL, true, UNIT_DEPENDENCY_FILE);
|
||||||
|
if (r < 0)
|
||||||
diff --git a/units/basic.target b/units/basic.target
|
diff --git a/units/basic.target b/units/basic.target
|
||||||
index d8cdd5ac14..9eae0782a2 100644
|
index 4f44292249..8fc7c73ef2 100644
|
||||||
--- a/units/basic.target
|
--- a/units/basic.target
|
||||||
+++ b/units/basic.target
|
+++ b/units/basic.target
|
||||||
@@ -19,4 +19,5 @@ After=sysinit.target sockets.target paths.target slices.target tmp.mount
|
@@ -19,4 +19,5 @@ After=sysinit.target sockets.target paths.target slices.target tmp.mount
|
||||||
|
@ -0,0 +1,35 @@
|
|||||||
|
From c7f77dfd2bfa593bfbbdf82eea8b600ca1b46f4c Mon Sep 17 00:00:00 2001
|
||||||
|
From: rpm-build <rpm-build>
|
||||||
|
Date: Wed, 1 Aug 2018 17:17:07 +0200
|
||||||
|
Subject: [PATCH] pid1: bump maximum number of process in user slice to 80% of
|
||||||
|
pid_max
|
||||||
|
|
||||||
|
Related: #1523236
|
||||||
|
---
|
||||||
|
src/basic/cgroup-util.h | 2 +-
|
||||||
|
units/user-.slice.d/10-defaults.conf | 2 +-
|
||||||
|
2 files changed, 2 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/basic/cgroup-util.h b/src/basic/cgroup-util.h
|
||||||
|
index f10c26ad51..26e3ae0404 100644
|
||||||
|
--- a/src/basic/cgroup-util.h
|
||||||
|
+++ b/src/basic/cgroup-util.h
|
||||||
|
@@ -101,7 +101,7 @@ static inline bool CGROUP_BLKIO_WEIGHT_IS_OK(uint64_t x) {
|
||||||
|
|
||||||
|
/* Default resource limits */
|
||||||
|
#define DEFAULT_TASKS_MAX_PERCENTAGE 80U /* 80% of PIDs, 26214 on default settings */
|
||||||
|
-#define DEFAULT_USER_TASKS_MAX_PERCENTAGE 33U /* 33% of PIDs, 10813 on default settings */
|
||||||
|
+#define DEFAULT_USER_TASKS_MAX_PERCENTAGE 80U /* 80% of PIDs, 26214 on default settings */
|
||||||
|
|
||||||
|
typedef enum CGroupUnified {
|
||||||
|
CGROUP_UNIFIED_UNKNOWN = -1,
|
||||||
|
diff --git a/units/user-.slice.d/10-defaults.conf b/units/user-.slice.d/10-defaults.conf
|
||||||
|
index 95ab11b30b..efc9d37c8e 100644
|
||||||
|
--- a/units/user-.slice.d/10-defaults.conf
|
||||||
|
+++ b/units/user-.slice.d/10-defaults.conf
|
||||||
|
@@ -12,4 +12,4 @@ Description=User Slice of UID %j
|
||||||
|
After=systemd-user-sessions.service
|
||||||
|
|
||||||
|
[Slice]
|
||||||
|
-TasksMax=33%
|
||||||
|
+TasksMax=80%
|
@ -1,38 +0,0 @@
|
|||||||
From ba6b7f1b4409b337b5b4ffc47259ad5c43c436c4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lukas Nykryn <lnykryn@redhat.com>
|
|
||||||
Date: Mon, 5 Sep 2016 12:47:09 +0200
|
|
||||||
Subject: [PATCH] unit: don't add Requires for tmp.mount
|
|
||||||
|
|
||||||
rhel-only
|
|
||||||
Resolves: #1619292
|
|
||||||
---
|
|
||||||
src/core/mount.c | 2 +-
|
|
||||||
src/core/unit.c | 2 +-
|
|
||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/mount.c b/src/core/mount.c
|
|
||||||
index 0170406351..4d407ca4e5 100644
|
|
||||||
--- a/src/core/mount.c
|
|
||||||
+++ b/src/core/mount.c
|
|
||||||
@@ -335,7 +335,7 @@ static int mount_add_mount_dependencies(Mount *m) {
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
- if (UNIT(m)->fragment_path) {
|
|
||||||
+ if (UNIT(m)->fragment_path && !streq(UNIT(m)->id, "tmp.mount")) {
|
|
||||||
/* If we have fragment configuration, then make this dependency required */
|
|
||||||
r = unit_add_dependency(other, UNIT_REQUIRES, UNIT(m), true, UNIT_DEPENDENCY_PATH);
|
|
||||||
if (r < 0)
|
|
||||||
diff --git a/src/core/unit.c b/src/core/unit.c
|
|
||||||
index 3a8251e2b8..d2adb447b6 100644
|
|
||||||
--- a/src/core/unit.c
|
|
||||||
+++ b/src/core/unit.c
|
|
||||||
@@ -1520,7 +1520,7 @@ static int unit_add_mount_dependencies(Unit *u) {
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
- if (m->fragment_path) {
|
|
||||||
+ if (m->fragment_path && !streq(m->id, "tmp.mount")) {
|
|
||||||
r = unit_add_dependency(u, UNIT_REQUIRES, m, true, di.origin_mask);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From 787420ac2ba9c404e13db08601946bde263523f8 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Mon, 22 Sep 2014 07:41:06 +0200
|
||||||
|
Subject: [PATCH] rules: automatically online hot-plugged CPUs
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 3 +++
|
||||||
|
rules/meson.build | 1 +
|
||||||
|
2 files changed, 4 insertions(+)
|
||||||
|
create mode 100644 rules/40-redhat.rules
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..2b494e57cf
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -0,0 +1,3 @@
|
||||||
|
+# do not edit this file, it will be overwritten on update
|
||||||
|
+
|
||||||
|
+SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
|
||||||
|
diff --git a/rules/meson.build b/rules/meson.build
|
||||||
|
index b6a32ba77e..e7e4362c0c 100644
|
||||||
|
--- a/rules/meson.build
|
||||||
|
+++ b/rules/meson.build
|
||||||
|
@@ -1,6 +1,7 @@
|
||||||
|
# SPDX-License-Identifier: LGPL-2.1+
|
||||||
|
|
||||||
|
rules = files('''
|
||||||
|
+ 40-redhat.rules
|
||||||
|
60-block.rules
|
||||||
|
60-cdrom_id.rules
|
||||||
|
60-drm.rules
|
@ -0,0 +1,37 @@
|
|||||||
|
From 2991b22f5f40a66ad1cc088e502e7f40ae1806c2 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Mon, 22 Sep 2014 07:53:52 +0200
|
||||||
|
Subject: [PATCH] rules: add rule for naming Dell iDRAC USB Virtual NIC as
|
||||||
|
'idrac'
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/73-idrac.rules | 6 ++++++
|
||||||
|
rules/meson.build | 1 +
|
||||||
|
2 files changed, 7 insertions(+)
|
||||||
|
create mode 100644 rules/73-idrac.rules
|
||||||
|
|
||||||
|
diff --git a/rules/73-idrac.rules b/rules/73-idrac.rules
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..d67fc425b1
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/rules/73-idrac.rules
|
||||||
|
@@ -0,0 +1,6 @@
|
||||||
|
+# do not edit this file, it will be overwritten on update
|
||||||
|
+
|
||||||
|
+# On Dell PowerEdge systems, the iDRAC7 and later support a USB Virtual NIC
|
||||||
|
+# with terminates in the iDRAC. Help identify this with 'idrac'
|
||||||
|
+
|
||||||
|
+ACTION=="add", SUBSYSTEM=="net", SUBSYSTEMS=="usb", ATTRS{idVendor}=="413c", ATTRS{idProduct}=="a102", NAME="idrac"
|
||||||
|
diff --git a/rules/meson.build b/rules/meson.build
|
||||||
|
index e7e4362c0c..e04a18aca6 100644
|
||||||
|
--- a/rules/meson.build
|
||||||
|
+++ b/rules/meson.build
|
||||||
|
@@ -17,6 +17,7 @@ rules = files('''
|
||||||
|
70-joystick.rules
|
||||||
|
70-mouse.rules
|
||||||
|
70-touchpad.rules
|
||||||
|
+ 73-idrac.rules
|
||||||
|
75-net-description.rules
|
||||||
|
75-probe_mtd.rules
|
||||||
|
78-sound-card.rules
|
@ -1,298 +0,0 @@
|
|||||||
From b9c7cd794733257a17b2eb9eadc716007e509ca9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Sun, 18 Apr 2021 20:46:06 +0200
|
|
||||||
Subject: [PATCH] ci: drop CIs irrelevant for downstream
|
|
||||||
|
|
||||||
* CIFuzz would need a separate project in oss-fuzz
|
|
||||||
* Coverity would also need a separate project
|
|
||||||
* the Labeler action is superfluous, since we already have a bot for
|
|
||||||
that
|
|
||||||
* mkosi testing on other distros is irrelevant for downstream RHEL
|
|
||||||
repo
|
|
||||||
|
|
||||||
Resolves: #1960703
|
|
||||||
rhel-only
|
|
||||||
---
|
|
||||||
.github/labeler.yml | 40 -----------------
|
|
||||||
.github/workflows/cifuzz.yml | 55 -----------------------
|
|
||||||
.github/workflows/coverity.yml | 43 ------------------
|
|
||||||
.github/workflows/labeler.yml | 23 ----------
|
|
||||||
.github/workflows/mkosi.yml | 80 ----------------------------------
|
|
||||||
5 files changed, 241 deletions(-)
|
|
||||||
delete mode 100644 .github/labeler.yml
|
|
||||||
delete mode 100644 .github/workflows/cifuzz.yml
|
|
||||||
delete mode 100644 .github/workflows/coverity.yml
|
|
||||||
delete mode 100644 .github/workflows/labeler.yml
|
|
||||||
delete mode 100644 .github/workflows/mkosi.yml
|
|
||||||
|
|
||||||
diff --git a/.github/labeler.yml b/.github/labeler.yml
|
|
||||||
deleted file mode 100644
|
|
||||||
index 7d128f42d6..0000000000
|
|
||||||
--- a/.github/labeler.yml
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,40 +0,0 @@
|
|
||||||
-# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
-
|
|
||||||
-hwdb:
|
|
||||||
- - hwdb.d/**/*
|
|
||||||
-units:
|
|
||||||
- - units/**/*
|
|
||||||
-documentation:
|
|
||||||
- - NEWS
|
|
||||||
- - docs/*
|
|
||||||
-network:
|
|
||||||
- - src/libsystemd-network/**/*
|
|
||||||
- - src/network/**/*
|
|
||||||
-udev:
|
|
||||||
- - src/udev/**/*
|
|
||||||
- - src/libudev/*
|
|
||||||
-selinux:
|
|
||||||
- - '**/*selinux*'
|
|
||||||
-apparmor:
|
|
||||||
- - '**/*apparmor*'
|
|
||||||
-meson:
|
|
||||||
- - meson_option.txt
|
|
||||||
-mkosi:
|
|
||||||
- - .mkosi/*
|
|
||||||
- - mkosi.build
|
|
||||||
-busctl:
|
|
||||||
- - src/busctl/*
|
|
||||||
-systemctl:
|
|
||||||
- - src/systemctl/*
|
|
||||||
-journal:
|
|
||||||
- - src/journal/*
|
|
||||||
-journal-remote:
|
|
||||||
- - src/journal-remote/*
|
|
||||||
-portable:
|
|
||||||
- - src/portable/**/*
|
|
||||||
-resolve:
|
|
||||||
- - src/resolve/*
|
|
||||||
-timedate:
|
|
||||||
- - src/timedate/*
|
|
||||||
-timesync:
|
|
||||||
- - src/timesync/*
|
|
||||||
diff --git a/.github/workflows/cifuzz.yml b/.github/workflows/cifuzz.yml
|
|
||||||
deleted file mode 100644
|
|
||||||
index 11ea788a47..0000000000
|
|
||||||
--- a/.github/workflows/cifuzz.yml
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,55 +0,0 @@
|
|
||||||
----
|
|
||||||
-# vi: ts=2 sw=2 et:
|
|
||||||
-# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
-# See: https://google.github.io/oss-fuzz/getting-started/continuous-integration/
|
|
||||||
-
|
|
||||||
-name: CIFuzz
|
|
||||||
-
|
|
||||||
-permissions:
|
|
||||||
- contents: read
|
|
||||||
-
|
|
||||||
-on:
|
|
||||||
- pull_request:
|
|
||||||
- paths:
|
|
||||||
- - '**/meson.build'
|
|
||||||
- - '.github/workflows/**'
|
|
||||||
- - 'meson_options.txt'
|
|
||||||
- - 'src/**'
|
|
||||||
- - 'test/fuzz/**'
|
|
||||||
- - 'tools/oss-fuzz.sh'
|
|
||||||
- push:
|
|
||||||
- branches:
|
|
||||||
- - main
|
|
||||||
-jobs:
|
|
||||||
- Fuzzing:
|
|
||||||
- runs-on: ubuntu-latest
|
|
||||||
- if: github.repository == 'systemd/systemd'
|
|
||||||
- concurrency:
|
|
||||||
- group: ${{ github.workflow }}-${{ matrix.sanitizer }}-${{ github.ref }}
|
|
||||||
- cancel-in-progress: true
|
|
||||||
- strategy:
|
|
||||||
- fail-fast: false
|
|
||||||
- matrix:
|
|
||||||
- sanitizer: [address, undefined, memory]
|
|
||||||
- steps:
|
|
||||||
- - name: Build Fuzzers (${{ matrix.sanitizer }})
|
|
||||||
- id: build
|
|
||||||
- uses: google/oss-fuzz/infra/cifuzz/actions/build_fuzzers@master
|
|
||||||
- with:
|
|
||||||
- oss-fuzz-project-name: 'systemd'
|
|
||||||
- dry-run: false
|
|
||||||
- allowed-broken-targets-percentage: 0
|
|
||||||
- sanitizer: ${{ matrix.sanitizer }}
|
|
||||||
- - name: Run Fuzzers (${{ matrix.sanitizer }})
|
|
||||||
- uses: google/oss-fuzz/infra/cifuzz/actions/run_fuzzers@master
|
|
||||||
- with:
|
|
||||||
- oss-fuzz-project-name: 'systemd'
|
|
||||||
- fuzz-seconds: 600
|
|
||||||
- dry-run: false
|
|
||||||
- sanitizer: ${{ matrix.sanitizer }}
|
|
||||||
- - name: Upload Crash
|
|
||||||
- uses: actions/upload-artifact@82c141cc518b40d92cc801eee768e7aafc9c2fa2
|
|
||||||
- if: failure() && steps.build.outcome == 'success'
|
|
||||||
- with:
|
|
||||||
- name: ${{ matrix.sanitizer }}-artifacts
|
|
||||||
- path: ./out/artifacts
|
|
||||||
diff --git a/.github/workflows/coverity.yml b/.github/workflows/coverity.yml
|
|
||||||
deleted file mode 100644
|
|
||||||
index a164d16fbf..0000000000
|
|
||||||
--- a/.github/workflows/coverity.yml
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,43 +0,0 @@
|
|
||||||
----
|
|
||||||
-# vi: ts=2 sw=2 et:
|
|
||||||
-# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
-#
|
|
||||||
-name: Coverity
|
|
||||||
-
|
|
||||||
-on:
|
|
||||||
- schedule:
|
|
||||||
- # Run Coverity daily at midnight
|
|
||||||
- - cron: '0 0 * * *'
|
|
||||||
-
|
|
||||||
-permissions:
|
|
||||||
- contents: read
|
|
||||||
-
|
|
||||||
-jobs:
|
|
||||||
- build:
|
|
||||||
- runs-on: ubuntu-20.04
|
|
||||||
- if: github.repository == 'systemd/systemd'
|
|
||||||
- env:
|
|
||||||
- COVERITY_SCAN_BRANCH_PATTERN: "${{ github.ref}}"
|
|
||||||
- COVERITY_SCAN_NOTIFICATION_EMAIL: ""
|
|
||||||
- COVERITY_SCAN_PROJECT_NAME: "${{ github.repository }}"
|
|
||||||
- # Set in repo settings -> secrets -> repository secrets
|
|
||||||
- COVERITY_SCAN_TOKEN: "${{ secrets.COVERITY_SCAN_TOKEN }}"
|
|
||||||
- CURRENT_REF: "${{ github.ref }}"
|
|
||||||
- steps:
|
|
||||||
- - name: Repository checkout
|
|
||||||
- uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
|
|
||||||
- # https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-commands-for-github-actions#setting-an-environment-variable
|
|
||||||
- - name: Set the $COVERITY_SCAN_NOTIFICATION_EMAIL env variable
|
|
||||||
- run: echo "COVERITY_SCAN_NOTIFICATION_EMAIL=$(git log -1 ${{ github.sha }} --pretty=\"%aE\")" >> $GITHUB_ENV
|
|
||||||
- - name: Install Coverity tools
|
|
||||||
- run: tools/get-coverity.sh
|
|
||||||
- # Reuse the setup phase of the unit test script to avoid code duplication
|
|
||||||
- - name: Install build dependencies
|
|
||||||
- run: sudo -E .github/workflows/unit_tests.sh SETUP
|
|
||||||
- # Preconfigure with meson to prevent Coverity from capturing meson metadata
|
|
||||||
- - name: Preconfigure the build directory
|
|
||||||
- run: meson cov-build -Dman=false
|
|
||||||
- - name: Build
|
|
||||||
- run: tools/coverity.sh build
|
|
||||||
- - name: Upload the results
|
|
||||||
- run: tools/coverity.sh upload
|
|
||||||
diff --git a/.github/workflows/labeler.yml b/.github/workflows/labeler.yml
|
|
||||||
deleted file mode 100644
|
|
||||||
index 34d9d63d42..0000000000
|
|
||||||
--- a/.github/workflows/labeler.yml
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,23 +0,0 @@
|
|
||||||
----
|
|
||||||
-# vi: ts=2 sw=2 et:
|
|
||||||
-# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
-#
|
|
||||||
-name: "Pull Request Labeler"
|
|
||||||
-
|
|
||||||
-on:
|
|
||||||
-- pull_request_target
|
|
||||||
-
|
|
||||||
-permissions:
|
|
||||||
- contents: read
|
|
||||||
-
|
|
||||||
-jobs:
|
|
||||||
- triage:
|
|
||||||
- runs-on: ubuntu-latest
|
|
||||||
- permissions:
|
|
||||||
- pull-requests: write
|
|
||||||
- steps:
|
|
||||||
- - uses: actions/labeler@69da01b8e0929f147b8943611bee75ee4175a49e
|
|
||||||
- with:
|
|
||||||
- repo-token: "${{ secrets.GITHUB_TOKEN }}"
|
|
||||||
- configuration-path: .github/labeler.yml
|
|
||||||
- sync-labels: "" # This is a workaround for issue 18671
|
|
||||||
diff --git a/.github/workflows/mkosi.yml b/.github/workflows/mkosi.yml
|
|
||||||
deleted file mode 100644
|
|
||||||
index 8fd6c72e26..0000000000
|
|
||||||
--- a/.github/workflows/mkosi.yml
|
|
||||||
+++ /dev/null
|
|
||||||
@@ -1,80 +0,0 @@
|
|
||||||
----
|
|
||||||
-# vi: ts=2 sw=2 et:
|
|
||||||
-# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
-# Simple boot tests that build and boot the mkosi images generated by the mkosi config files in mkosi.default.d/.
|
|
||||||
-name: mkosi
|
|
||||||
-
|
|
||||||
-on:
|
|
||||||
- push:
|
|
||||||
- branches:
|
|
||||||
- - main
|
|
||||||
- - v[0-9]+-stable
|
|
||||||
- pull_request:
|
|
||||||
- branches:
|
|
||||||
- - main
|
|
||||||
- - v[0-9]+-stable
|
|
||||||
-
|
|
||||||
-permissions:
|
|
||||||
- contents: read
|
|
||||||
-
|
|
||||||
-env:
|
|
||||||
- # Enable debug logging in systemd, but keep udev's log level to info,
|
|
||||||
- # since it's _very_ verbose in the QEMU task
|
|
||||||
- KERNEL_CMDLINE: "systemd.unit=mkosi-check-and-shutdown.service !quiet systemd.log_level=debug systemd.log_target=console udev.log_level=info systemd.default_standard_output=journal+console"
|
|
||||||
-
|
|
||||||
-jobs:
|
|
||||||
- ci:
|
|
||||||
- runs-on: ubuntu-20.04
|
|
||||||
- concurrency:
|
|
||||||
- group: ${{ github.workflow }}-${{ matrix.distro }}-${{ github.ref }}
|
|
||||||
- cancel-in-progress: true
|
|
||||||
- strategy:
|
|
||||||
- fail-fast: false
|
|
||||||
- matrix:
|
|
||||||
- distro:
|
|
||||||
- - arch
|
|
||||||
- - debian
|
|
||||||
- - ubuntu
|
|
||||||
- - fedora
|
|
||||||
- - opensuse
|
|
||||||
-
|
|
||||||
- steps:
|
|
||||||
- - uses: actions/checkout@ec3a7ce113134d7a93b817d10a8272cb61118579
|
|
||||||
- - uses: systemd/mkosi@4d64fc8134f93d87ac584183e7762ac1d0efa0e5
|
|
||||||
-
|
|
||||||
- - name: Install
|
|
||||||
- run: sudo apt-get update && sudo apt-get install --no-install-recommends python3-pexpect python3-jinja2
|
|
||||||
-
|
|
||||||
- - name: Configure
|
|
||||||
- run: echo -e "[Distribution]\nDistribution=${{ matrix.distro }}\n" >mkosi.default
|
|
||||||
-
|
|
||||||
- # Ubuntu's systemd-nspawn doesn't support faccessat2() syscall, which is
|
|
||||||
- # required, since current Arch's glibc implements faccessat() via faccessat2().
|
|
||||||
- - name: Update systemd-nspawn
|
|
||||||
- if: ${{ matrix.distro == 'arch' }}
|
|
||||||
- run: |
|
|
||||||
- echo "deb-src http://archive.ubuntu.com/ubuntu/ $(lsb_release -cs) main restricted universe multiverse" | sudo tee -a /etc/apt/sources.list
|
|
||||||
- sudo apt update
|
|
||||||
- sudo apt build-dep systemd
|
|
||||||
- meson build
|
|
||||||
- ninja -C build
|
|
||||||
- sudo ln -svf $PWD/build/systemd-nspawn `which systemd-nspawn`
|
|
||||||
- systemd-nspawn --version
|
|
||||||
-
|
|
||||||
- - name: Build ${{ matrix.distro }}
|
|
||||||
- run: ./.github/workflows/run_mkosi.sh --build-environment=CI_BUILD=1 --kernel-command-line "${{ env.KERNEL_CMDLINE }}" build
|
|
||||||
-
|
|
||||||
- - name: Show ${{ matrix.distro }} image summary
|
|
||||||
- run: ./.github/workflows/run_mkosi.sh summary
|
|
||||||
-
|
|
||||||
- - name: Boot ${{ matrix.distro }} systemd-nspawn
|
|
||||||
- run: ./.github/workflows/run_mkosi.sh boot ${{ env.KERNEL_CMDLINE }}
|
|
||||||
-
|
|
||||||
- - name: Check ${{ matrix.distro }} systemd-nspawn
|
|
||||||
- run: ./.github/workflows/run_mkosi.sh shell bash -c "[[ -e /testok ]] || { cat /failed-services; exit 1; }"
|
|
||||||
-
|
|
||||||
- - name: Boot ${{ matrix.distro }} QEMU
|
|
||||||
- run: ./.github/workflows/run_mkosi.sh qemu
|
|
||||||
-
|
|
||||||
- - name: Check ${{ matrix.distro }} QEMU
|
|
||||||
- run: ./.github/workflows/run_mkosi.sh shell bash -c "[[ -e /testok ]] || { cat /failed-services; exit 1; }"
|
|
22
SOURCES/0008-rules-enable-memory-hotplug.patch
Normal file
22
SOURCES/0008-rules-enable-memory-hotplug.patch
Normal file
@ -0,0 +1,22 @@
|
|||||||
|
From d5215083fa1d10f1624ab2f0fb5ba420a2594938 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukas Nykryn <lnykryn@redhat.com>
|
||||||
|
Date: Wed, 13 May 2015 16:56:44 +0200
|
||||||
|
Subject: [PATCH] rules: enable memory hotplug
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 4 ++++
|
||||||
|
1 file changed, 4 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
index 2b494e57cf..8231caae98 100644
|
||||||
|
--- a/rules/40-redhat.rules
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -1,3 +1,7 @@
|
||||||
|
# do not edit this file, it will be overwritten on update
|
||||||
|
|
||||||
|
+# CPU hotadd request
|
||||||
|
SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
|
||||||
|
+
|
||||||
|
+# Memory hotadd request
|
||||||
|
+SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online"
|
@ -1,61 +0,0 @@
|
|||||||
From d931821a263e34805f825cf12a0a0fcde9beda99 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Wed, 9 Jun 2021 15:23:59 +0200
|
|
||||||
Subject: [PATCH] ci: reconfigure Packit for RHEL 9
|
|
||||||
|
|
||||||
Resolves: #1960703
|
|
||||||
rhel-only
|
|
||||||
---
|
|
||||||
.packit.yml | 28 ++++++++++++++++++----------
|
|
||||||
1 file changed, 18 insertions(+), 10 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/.packit.yml b/.packit.yml
|
|
||||||
index 962c77913e..3461bccbc5 100644
|
|
||||||
--- a/.packit.yml
|
|
||||||
+++ b/.packit.yml
|
|
||||||
@@ -16,14 +16,12 @@ upstream_tag_template: "v{version}"
|
|
||||||
|
|
||||||
actions:
|
|
||||||
post-upstream-clone:
|
|
||||||
- # Use the Fedora Rawhide specfile
|
|
||||||
- - "git clone https://src.fedoraproject.org/rpms/systemd .packit_rpm --depth=1"
|
|
||||||
+ # Use the CentOS Stream specfile
|
|
||||||
+ - "git clone https://gitlab.com/redhat/centos-stream/rpms/systemd.git .packit_rpm --depth=1"
|
|
||||||
# Drop the "sources" file so rebase-helper doesn't think we're a dist-git
|
|
||||||
- "rm -fv .packit_rpm/sources"
|
|
||||||
- # Drop backported patches from the specfile, but keep the downstream-only ones
|
|
||||||
- # - Patch0000-0499: backported patches from upstream
|
|
||||||
- # - Patch0500-9999: downstream-only patches
|
|
||||||
- - "sed -ri '/^Patch0[0-4]?[0-9]{0,2}\\:.+\\.patch/d' .packit_rpm/systemd.spec"
|
|
||||||
+ # Drop all patches, since they're already included in the tarball
|
|
||||||
+ - "sed -ri '/^Patch[0-9]+:/d' .packit_rpm/systemd.spec"
|
|
||||||
# Build the RPM with --werror. Even though --werror doesn't work in all
|
|
||||||
# cases (see [0]), we can't use -Dc_args=/-Dcpp_args= here because of the
|
|
||||||
# RPM hardening macros, that use $CFLAGS/$CPPFLAGS (see [1]).
|
|
||||||
@@ -32,12 +30,22 @@ actions:
|
|
||||||
# [1] https://github.com/systemd/systemd/pull/18908#issuecomment-792250110
|
|
||||||
- 'sed -i "/^CONFIGURE_OPTS=(/a--werror" .packit_rpm/systemd.spec'
|
|
||||||
|
|
||||||
+# Available targets can be listed via `copr-cli list-chroots`
|
|
||||||
jobs:
|
|
||||||
+# Build test
|
|
||||||
- job: copr_build
|
|
||||||
trigger: pull_request
|
|
||||||
metadata:
|
|
||||||
targets:
|
|
||||||
- - fedora-rawhide-aarch64
|
|
||||||
- - fedora-rawhide-i386
|
|
||||||
- - fedora-rawhide-ppc64le
|
|
||||||
- - fedora-rawhide-x86_64
|
|
||||||
+ # FIXME: change to CentOS 9 once it's available
|
|
||||||
+ - fedora-34-x86_64
|
|
||||||
+ - fedora-34-aarch64
|
|
||||||
+
|
|
||||||
+# TODO: can't use TFT yet due to https://pagure.io/fedora-ci/general/issue/184
|
|
||||||
+# Run tests (via testing farm)
|
|
||||||
+#- job: tests
|
|
||||||
+# trigger: pull_request
|
|
||||||
+# metadata:
|
|
||||||
+# targets:
|
|
||||||
+# # FIXME: change to CentOS 9 once it's available
|
|
||||||
+# - fedora-34-x86_64
|
|
@ -0,0 +1,22 @@
|
|||||||
|
From 4a7602e27a50828ac8a0eb6b83a1c2c722af652d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukas Nykryn <lnykryn@redhat.com>
|
||||||
|
Date: Wed, 13 May 2015 17:11:48 +0200
|
||||||
|
Subject: [PATCH] rules: reload sysctl settings when the bridge module is
|
||||||
|
loaded
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
index 8231caae98..556a3a3a90 100644
|
||||||
|
--- a/rules/40-redhat.rules
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -5,3 +5,6 @@ SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}
|
||||||
|
|
||||||
|
# Memory hotadd request
|
||||||
|
SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online"
|
||||||
|
+
|
||||||
|
+# reload sysctl.conf / sysctl.conf.d settings when the bridge module is loaded
|
||||||
|
+ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"
|
@ -1,28 +0,0 @@
|
|||||||
From 785b53d7b16c6c56638029e8b4f59c436f1394b8 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Thu, 15 Jul 2021 12:23:27 +0200
|
|
||||||
Subject: [PATCH] ci: run unit tests on z-stream branches as well
|
|
||||||
|
|
||||||
Resolves: #1960703
|
|
||||||
rhel-only
|
|
||||||
---
|
|
||||||
.github/workflows/unit_tests.yml | 6 +-----
|
|
||||||
1 file changed, 1 insertion(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/.github/workflows/unit_tests.yml b/.github/workflows/unit_tests.yml
|
|
||||||
index d4a4f3c723..2afde5d59d 100644
|
|
||||||
--- a/.github/workflows/unit_tests.yml
|
|
||||||
+++ b/.github/workflows/unit_tests.yml
|
|
||||||
@@ -3,11 +3,7 @@
|
|
||||||
# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
#
|
|
||||||
name: Unit tests
|
|
||||||
-on:
|
|
||||||
- pull_request:
|
|
||||||
- branches:
|
|
||||||
- - main
|
|
||||||
- - v[0-9]+-stable
|
|
||||||
+on: [pull_request]
|
|
||||||
|
|
||||||
permissions:
|
|
||||||
contents: read
|
|
21
SOURCES/0010-rules-load-sg-module.patch
Normal file
21
SOURCES/0010-rules-load-sg-module.patch
Normal file
@ -0,0 +1,21 @@
|
|||||||
|
From a42b57dc8b265f183a8fb6fe9ae32a9d77cbb7c5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukas Nykryn <lnykryn@redhat.com>
|
||||||
|
Date: Wed, 20 May 2015 12:34:18 +0200
|
||||||
|
Subject: [PATCH] rules: load sg module
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
index 556a3a3a90..305e752285 100644
|
||||||
|
--- a/rules/40-redhat.rules
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -8,3 +8,6 @@ SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online"
|
||||||
|
|
||||||
|
# reload sysctl.conf / sysctl.conf.d settings when the bridge module is loaded
|
||||||
|
ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"
|
||||||
|
+
|
||||||
|
+# load SCSI generic (sg) driver
|
||||||
|
+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -bv sg"
|
@ -1,25 +0,0 @@
|
|||||||
From c1555a7d38235cca32492c4606e30028dc008b35 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Tardon <dtardon@redhat.com>
|
|
||||||
Date: Thu, 15 Jul 2021 11:15:17 +0200
|
|
||||||
Subject: [PATCH] random-util: increase random seed size to 1024
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #1982603
|
|
||||||
---
|
|
||||||
src/basic/random-util.h | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/basic/random-util.h b/src/basic/random-util.h
|
|
||||||
index e6528ddc7f..fda78552f6 100644
|
|
||||||
--- a/src/basic/random-util.h
|
|
||||||
+++ b/src/basic/random-util.h
|
|
||||||
@@ -34,7 +34,7 @@ static inline uint32_t random_u32(void) {
|
|
||||||
int rdrand(unsigned long *ret);
|
|
||||||
|
|
||||||
/* Some limits on the pool sizes when we deal with the kernel random pool */
|
|
||||||
-#define RANDOM_POOL_SIZE_MIN 512U
|
|
||||||
+#define RANDOM_POOL_SIZE_MIN 1024U
|
|
||||||
#define RANDOM_POOL_SIZE_MAX (10U*1024U*1024U)
|
|
||||||
|
|
||||||
size_t random_pool_size(void);
|
|
@ -0,0 +1,21 @@
|
|||||||
|
From 21c96c3781f473cdbfe7acdb1affba75b50081f1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukas Nykryn <lnykryn@redhat.com>
|
||||||
|
Date: Tue, 22 Sep 2015 12:28:28 +0200
|
||||||
|
Subject: [PATCH] rules: prandom character device node permissions
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
index 305e752285..9a48adde19 100644
|
||||||
|
--- a/rules/40-redhat.rules
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -11,3 +11,6 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/sys
|
||||||
|
|
||||||
|
# load SCSI generic (sg) driver
|
||||||
|
SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -bv sg"
|
||||||
|
+
|
||||||
|
+# Rule for prandom character device node permissions
|
||||||
|
+KERNEL=="prandom", MODE="0644"
|
@ -0,0 +1,22 @@
|
|||||||
|
From fab2dff96f59e0851884b4ef32dccab763f5eef1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Luk=C3=A1=C5=A1=20Nykr=C3=BDn?= <lnykryn@redhat.com>
|
||||||
|
Date: Thu, 18 Aug 2016 14:51:19 +0200
|
||||||
|
Subject: [PATCH] rules: load sg driver also when scsi_target appears (#45)
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
index 9a48adde19..3335fe5075 100644
|
||||||
|
--- a/rules/40-redhat.rules
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -11,6 +11,7 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/sys
|
||||||
|
|
||||||
|
# load SCSI generic (sg) driver
|
||||||
|
SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST!="[module/sg]", RUN+="/sbin/modprobe -bv sg"
|
||||||
|
+SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_target", TEST!="[module/sg]", RUN+="/sbin/modprobe -bv sg"
|
||||||
|
|
||||||
|
# Rule for prandom character device node permissions
|
||||||
|
KERNEL=="prandom", MODE="0644"
|
@ -1,22 +0,0 @@
|
|||||||
From 56d9b62ce456e8c0e520bda3447db38864983173 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Tardon <dtardon@redhat.com>
|
|
||||||
Date: Thu, 5 Aug 2021 15:26:13 +0200
|
|
||||||
Subject: [PATCH] journald.conf: don't touch current audit settings
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Related: #1973856
|
|
||||||
---
|
|
||||||
src/journal/journald.conf | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/journal/journald.conf b/src/journal/journald.conf
|
|
||||||
index 5a60a9d39c..3544da2112 100644
|
|
||||||
--- a/src/journal/journald.conf
|
|
||||||
+++ b/src/journal/journald.conf
|
|
||||||
@@ -44,4 +44,4 @@
|
|
||||||
#MaxLevelWall=emerg
|
|
||||||
#LineMax=48K
|
|
||||||
#ReadKMsg=yes
|
|
||||||
-#Audit=yes
|
|
||||||
+Audit=
|
|
23
SOURCES/0013-rules-don-t-hoplug-memory-on-s390x.patch
Normal file
23
SOURCES/0013-rules-don-t-hoplug-memory-on-s390x.patch
Normal file
@ -0,0 +1,23 @@
|
|||||||
|
From fd091394e52cd652ff5163735b2a91a8c0efe415 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukas Nykryn <lnykryn@redhat.com>
|
||||||
|
Date: Tue, 13 Sep 2016 13:18:38 +0200
|
||||||
|
Subject: [PATCH] rules: don't hoplug memory on s390x
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
index 3335fe5075..4c56950dab 100644
|
||||||
|
--- a/rules/40-redhat.rules
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
|
||||||
|
|
||||||
|
# Memory hotadd request
|
||||||
|
-SUBSYSTEM=="memory", ACTION=="add", ATTR{state}=="offline", ATTR{state}="online"
|
||||||
|
+SUBSYSTEM=="memory", ACTION=="add", PROGRAM="/usr/bin/systemd-detect-virt", RESULT!="zvm", ATTR{state}=="offline", ATTR{state}="online"
|
||||||
|
|
||||||
|
# reload sysctl.conf / sysctl.conf.d settings when the bridge module is loaded
|
||||||
|
ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"
|
@ -1,137 +0,0 @@
|
|||||||
From 2843766767452a69dade1ef8ab2d1d3e5e68a1d3 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Tardon <dtardon@redhat.com>
|
|
||||||
Date: Tue, 10 Aug 2021 14:46:16 +0200
|
|
||||||
Subject: [PATCH] Revert "udev: remove WAIT_FOR key"
|
|
||||||
|
|
||||||
This reverts commit f2b8052fb648b788936dd3e85be6a9aca90fbb2f.
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #1982666
|
|
||||||
---
|
|
||||||
man/udev.xml | 9 +++++++
|
|
||||||
src/udev/udev-rules.c | 56 +++++++++++++++++++++++++++++++++++++++
|
|
||||||
test/rule-syntax-check.py | 2 +-
|
|
||||||
3 files changed, 66 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/man/udev.xml b/man/udev.xml
|
|
||||||
index f6ea2abc12..ce96e201e4 100644
|
|
||||||
--- a/man/udev.xml
|
|
||||||
+++ b/man/udev.xml
|
|
||||||
@@ -592,6 +592,15 @@
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
+ <varlistentry>
|
|
||||||
+ <term><varname>WAIT_FOR</varname></term>
|
|
||||||
+ <listitem>
|
|
||||||
+ <para>Wait for a file to become available or until a timeout of
|
|
||||||
+ 10 seconds expires. The path is relative to the sysfs device;
|
|
||||||
+ if no path is specified, this waits for an attribute to appear.</para>
|
|
||||||
+ </listitem>
|
|
||||||
+ </varlistentry>
|
|
||||||
+
|
|
||||||
<varlistentry>
|
|
||||||
<term><varname>OPTIONS</varname></term>
|
|
||||||
<listitem>
|
|
||||||
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
|
|
||||||
index 1a384d6b38..243a792662 100644
|
|
||||||
--- a/src/udev/udev-rules.c
|
|
||||||
+++ b/src/udev/udev-rules.c
|
|
||||||
@@ -79,6 +79,7 @@ typedef enum {
|
|
||||||
TK_M_TAG, /* strv, sd_device_get_tag_first(), sd_device_get_tag_next() */
|
|
||||||
TK_M_SUBSYSTEM, /* string, sd_device_get_subsystem() */
|
|
||||||
TK_M_DRIVER, /* string, sd_device_get_driver() */
|
|
||||||
+ TK_M_WAITFOR,
|
|
||||||
TK_M_ATTR, /* string, takes filename through attribute, sd_device_get_sysattr_value(), udev_resolve_subsys_kernel(), etc. */
|
|
||||||
TK_M_SYSCTL, /* string, takes kernel parameter through attribute */
|
|
||||||
|
|
||||||
@@ -416,6 +417,47 @@ static void rule_line_append_token(UdevRuleLine *rule_line, UdevRuleToken *token
|
|
||||||
rule_line->current_token = token;
|
|
||||||
}
|
|
||||||
|
|
||||||
+#define WAIT_LOOP_PER_SECOND 50
|
|
||||||
+static int wait_for_file(sd_device *dev, const char *file, int timeout) {
|
|
||||||
+ char filepath[UDEV_PATH_SIZE];
|
|
||||||
+ char devicepath[UDEV_PATH_SIZE];
|
|
||||||
+ struct stat stats;
|
|
||||||
+ int loop = timeout * WAIT_LOOP_PER_SECOND;
|
|
||||||
+
|
|
||||||
+ /* a relative path is a device attribute */
|
|
||||||
+ devicepath[0] = '\0';
|
|
||||||
+ if (file[0] != '/') {
|
|
||||||
+ const char *val;
|
|
||||||
+ int r;
|
|
||||||
+
|
|
||||||
+ r = sd_device_get_syspath(dev, &val);
|
|
||||||
+ if (r < 0)
|
|
||||||
+ return r;
|
|
||||||
+ strscpyl(devicepath, sizeof(devicepath), val, NULL);
|
|
||||||
+ strscpyl(filepath, sizeof(filepath), devicepath, "/", file, NULL);
|
|
||||||
+ file = filepath;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+ while (--loop) {
|
|
||||||
+ const struct timespec duration = { 0, 1000 * 1000 * 1000 / WAIT_LOOP_PER_SECOND };
|
|
||||||
+
|
|
||||||
+ /* lookup file */
|
|
||||||
+ if (stat(file, &stats) == 0) {
|
|
||||||
+ log_debug("file '%s' appeared after %i loops", file, (timeout * WAIT_LOOP_PER_SECOND) - loop-1);
|
|
||||||
+ return 0;
|
|
||||||
+ }
|
|
||||||
+ /* make sure, the device did not disappear in the meantime */
|
|
||||||
+ if (devicepath[0] != '\0' && stat(devicepath, &stats) != 0) {
|
|
||||||
+ log_debug("device disappeared while waiting for '%s'", file);
|
|
||||||
+ return -2;
|
|
||||||
+ }
|
|
||||||
+ log_debug("wait for '%s' for %i mseconds", file, 1000 / WAIT_LOOP_PER_SECOND);
|
|
||||||
+ nanosleep(&duration, NULL);
|
|
||||||
+ }
|
|
||||||
+ log_debug("waiting for '%s' failed", file);
|
|
||||||
+ return -1;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
static int rule_line_add_token(UdevRuleLine *rule_line, UdevRuleTokenType type, UdevRuleOperatorType op, char *value, void *data) {
|
|
||||||
UdevRuleToken *token;
|
|
||||||
UdevRuleMatchType match_type = _MATCH_TYPE_INVALID;
|
|
||||||
@@ -958,6 +1000,12 @@ static int parse_token(UdevRules *rules, const char *key, char *attr, UdevRuleOp
|
|
||||||
r = rule_line_add_token(rule_line, TK_A_RUN_BUILTIN, op, value, UDEV_BUILTIN_CMD_TO_PTR(cmd));
|
|
||||||
} else
|
|
||||||
return log_token_invalid_attr(rules, key);
|
|
||||||
+ } else if (streq(key, "WAIT_FOR") || streq(key, "WAIT_FOR_SYSFS")) {
|
|
||||||
+ if (op == OP_REMOVE)
|
|
||||||
+ return log_token_invalid_op(rules, key);
|
|
||||||
+
|
|
||||||
+ rule_line_add_token(rule_line, TK_M_WAITFOR, 0, value, NULL);
|
|
||||||
+ return 1;
|
|
||||||
} else if (streq(key, "GOTO")) {
|
|
||||||
if (attr)
|
|
||||||
return log_token_invalid_attr(rules, key);
|
|
||||||
@@ -1643,6 +1691,14 @@ static int udev_rule_apply_token_to_event(
|
|
||||||
|
|
||||||
return token_match_string(token, val);
|
|
||||||
}
|
|
||||||
+ case TK_M_WAITFOR: {
|
|
||||||
+ char filename[UDEV_PATH_SIZE];
|
|
||||||
+ int found;
|
|
||||||
+
|
|
||||||
+ udev_event_apply_format(event, token->value, filename, sizeof(filename), false);
|
|
||||||
+ found = (wait_for_file(event->dev, filename, 10) == 0);
|
|
||||||
+ return found || (token->op == OP_NOMATCH);
|
|
||||||
+ }
|
|
||||||
case TK_M_ATTR:
|
|
||||||
case TK_M_PARENTS_ATTR:
|
|
||||||
return token_match_attr(token, dev, event);
|
|
||||||
diff --git a/test/rule-syntax-check.py b/test/rule-syntax-check.py
|
|
||||||
index 9a9e4d1658..0649bcf58e 100755
|
|
||||||
--- a/test/rule-syntax-check.py
|
|
||||||
+++ b/test/rule-syntax-check.py
|
|
||||||
@@ -20,7 +20,7 @@ no_args_tests = re.compile(r'(ACTION|DEVPATH|KERNELS?|NAME|SYMLINK|SUBSYSTEMS?|D
|
|
||||||
# PROGRAM can also be specified as an assignment.
|
|
||||||
program_assign = re.compile(r'PROGRAM\s*=\s*' + quoted_string_re + '$')
|
|
||||||
args_tests = re.compile(r'(ATTRS?|ENV|CONST|TEST){([a-zA-Z0-9/_.*%-]+)}\s*(?:=|!)=\s*' + quoted_string_re + '$')
|
|
||||||
-no_args_assign = re.compile(r'(NAME|SYMLINK|OWNER|GROUP|MODE|TAG|RUN|LABEL|GOTO|OPTIONS|IMPORT)\s*(?:\+=|:=|=)\s*' + quoted_string_re + '$')
|
|
||||||
+no_args_assign = re.compile(r'(NAME|SYMLINK|OWNER|GROUP|MODE|TAG|RUN|LABEL|GOTO|WAIT_FOR|OPTIONS|IMPORT)\s*(?:\+=|:=|=)\s*' + quoted_string_re + '$')
|
|
||||||
args_assign = re.compile(r'(ATTR|ENV|IMPORT|RUN){([a-zA-Z0-9/_.*%-]+)}\s*(=|\+=)\s*' + quoted_string_re + '$')
|
|
||||||
# Find comma-separated groups, but allow commas that are inside quoted strings.
|
|
||||||
# Using quoted_string_re + '?' so that strings missing the last double quote
|
|
@ -0,0 +1,24 @@
|
|||||||
|
From a0802638f02b964cb9d2d68bad009561b2bcc910 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Fri, 16 Sep 2016 14:45:01 +0200
|
||||||
|
Subject: [PATCH] rules: disable auto-online of hot-plugged memory on IBM z
|
||||||
|
Systems
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
index 4c56950dab..c3df320234 100644
|
||||||
|
--- a/rules/40-redhat.rules
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -4,7 +4,7 @@
|
||||||
|
SUBSYSTEM=="cpu", ACTION=="add", TEST=="online", ATTR{online}=="0", ATTR{online}="1"
|
||||||
|
|
||||||
|
# Memory hotadd request
|
||||||
|
-SUBSYSTEM=="memory", ACTION=="add", PROGRAM="/usr/bin/systemd-detect-virt", RESULT!="zvm", ATTR{state}=="offline", ATTR{state}="online"
|
||||||
|
+SUBSYSTEM=="memory", ACTION=="add", PROGRAM=="/bin/uname -p", RESULT!="s390*", ATTR{state}=="offline", ATTR{state}="online"
|
||||||
|
|
||||||
|
# reload sysctl.conf / sysctl.conf.d settings when the bridge module is loaded
|
||||||
|
ACTION=="add", SUBSYSTEM=="module", KERNEL=="bridge", RUN+="/usr/lib/systemd/systemd-sysctl --prefix=/proc/sys/net/bridge"
|
@ -1,25 +0,0 @@
|
|||||||
From 9a0acc0b292d283b4507c6b749396c019af7e4ab Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Tardon <dtardon@redhat.com>
|
|
||||||
Date: Wed, 25 Aug 2021 16:03:04 +0200
|
|
||||||
Subject: [PATCH] Really don't enable systemd-journald-audit.socket
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #1973856
|
|
||||||
---
|
|
||||||
units/systemd-journald.service.in | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in
|
|
||||||
index d981273b07..f190dff5fb 100644
|
|
||||||
--- a/units/systemd-journald.service.in
|
|
||||||
+++ b/units/systemd-journald.service.in
|
|
||||||
@@ -33,7 +33,7 @@ RestrictRealtime=yes
|
|
||||||
RestrictSUIDSGID=yes
|
|
||||||
RuntimeDirectory=systemd/journal
|
|
||||||
RuntimeDirectoryPreserve=yes
|
|
||||||
-Sockets=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket
|
|
||||||
+Sockets=systemd-journald.socket systemd-journald-dev-log.socket
|
|
||||||
StandardOutput=null
|
|
||||||
SystemCallArchitectures=native
|
|
||||||
SystemCallErrorNumber=EPERM
|
|
@ -0,0 +1,39 @@
|
|||||||
|
From 0c5b8096cb23701f8048dba33a38e1b55249cab3 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Wed, 28 Mar 2018 17:22:30 +0200
|
||||||
|
Subject: [PATCH] rules: introduce old-style by-path symlinks for FCP based
|
||||||
|
SCSI devices
|
||||||
|
|
||||||
|
Related: #1523227
|
||||||
|
---
|
||||||
|
rules/40-redhat.rules | 20 ++++++++++++++++++++
|
||||||
|
1 file changed, 20 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/rules/40-redhat.rules b/rules/40-redhat.rules
|
||||||
|
index c3df320234..8ac96933c3 100644
|
||||||
|
--- a/rules/40-redhat.rules
|
||||||
|
+++ b/rules/40-redhat.rules
|
||||||
|
@@ -15,3 +15,23 @@ SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_target", TEST!="[module/sg]", RUN+="/sbin
|
||||||
|
|
||||||
|
# Rule for prandom character device node permissions
|
||||||
|
KERNEL=="prandom", MODE="0644"
|
||||||
|
+
|
||||||
|
+# Rules for creating the ID_PATH for SCSI devices based on the CCW bus
|
||||||
|
+# using the form: ccw-<BUS_ID>-zfcp-<WWPN>:<LUN>
|
||||||
|
+#
|
||||||
|
+ACTION=="remove", GOTO="zfcp_scsi_device_end"
|
||||||
|
+
|
||||||
|
+#
|
||||||
|
+# Set environment variable "ID_ZFCP_BUS" to "1" if the devices
|
||||||
|
+# (both disk and partition) are SCSI devices based on FCP devices
|
||||||
|
+#
|
||||||
|
+KERNEL=="sd*", SUBSYSTEMS=="ccw", DRIVERS=="zfcp", ENV{.ID_ZFCP_BUS}="1"
|
||||||
|
+
|
||||||
|
+# For SCSI disks
|
||||||
|
+KERNEL=="sd*[!0-9]", SUBSYSTEMS=="scsi", ENV{.ID_ZFCP_BUS}=="1", ENV{DEVTYPE}=="disk", SYMLINK+="disk/by-path/ccw-$attr{hba_id}-zfcp-$attr{wwpn}:$attr{fcp_lun}"
|
||||||
|
+
|
||||||
|
+
|
||||||
|
+# For partitions on a SCSI disk
|
||||||
|
+KERNEL=="sd*[0-9]", SUBSYSTEMS=="scsi", ENV{.ID_ZFCP_BUS}=="1", ENV{DEVTYPE}=="partition", SYMLINK+="disk/by-path/ccw-$attr{hba_id}-zfcp-$attr{wwpn}:$attr{fcp_lun}-part%n"
|
||||||
|
+
|
||||||
|
+LABEL="zfcp_scsi_device_end"
|
123
SOURCES/0016-Revert-udev-remove-WAIT_FOR-key.patch
Normal file
123
SOURCES/0016-Revert-udev-remove-WAIT_FOR-key.patch
Normal file
@ -0,0 +1,123 @@
|
|||||||
|
From 1bb734a44952a51285057409ba7b1c3e7a162cea Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Thu, 2 Aug 2018 13:16:49 +0200
|
||||||
|
Subject: [PATCH] Revert "udev: remove WAIT_FOR key"
|
||||||
|
|
||||||
|
This reverts commit f2b8052fb648b788936dd3e85be6a9aca90fbb2f.
|
||||||
|
|
||||||
|
Resolves: #1523213
|
||||||
|
---
|
||||||
|
man/udev.xml | 9 +++++++
|
||||||
|
src/udev/udev-rules.c | 50 +++++++++++++++++++++++++++++++++++++++
|
||||||
|
test/rule-syntax-check.py | 2 +-
|
||||||
|
3 files changed, 60 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/man/udev.xml b/man/udev.xml
|
||||||
|
index 15e6d8eae1..bdf901a8f0 100644
|
||||||
|
--- a/man/udev.xml
|
||||||
|
+++ b/man/udev.xml
|
||||||
|
@@ -515,6 +515,15 @@
|
||||||
|
</listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
+ <varlistentry>
|
||||||
|
+ <term><varname>WAIT_FOR</varname></term>
|
||||||
|
+ <listitem>
|
||||||
|
+ <para>Wait for a file to become available or until a timeout of
|
||||||
|
+ 10 seconds expires. The path is relative to the sysfs device;
|
||||||
|
+ if no path is specified, this waits for an attribute to appear.</para>
|
||||||
|
+ </listitem>
|
||||||
|
+ </varlistentry>
|
||||||
|
+
|
||||||
|
<varlistentry>
|
||||||
|
<term><varname>OPTIONS</varname></term>
|
||||||
|
<listitem>
|
||||||
|
diff --git a/src/udev/udev-rules.c b/src/udev/udev-rules.c
|
||||||
|
index f029395884..58af863f3d 100644
|
||||||
|
--- a/src/udev/udev-rules.c
|
||||||
|
+++ b/src/udev/udev-rules.c
|
||||||
|
@@ -676,6 +676,41 @@ static int import_parent_into_properties(struct udev_device *dev, const char *fi
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
+#define WAIT_LOOP_PER_SECOND 50
|
||||||
|
+static int wait_for_file(struct udev_device *dev, const char *file, int timeout) {
|
||||||
|
+ char filepath[UTIL_PATH_SIZE];
|
||||||
|
+ char devicepath[UTIL_PATH_SIZE];
|
||||||
|
+ struct stat stats;
|
||||||
|
+ int loop = timeout * WAIT_LOOP_PER_SECOND;
|
||||||
|
+
|
||||||
|
+ /* a relative path is a device attribute */
|
||||||
|
+ devicepath[0] = '\0';
|
||||||
|
+ if (file[0] != '/') {
|
||||||
|
+ strscpyl(devicepath, sizeof(devicepath), udev_device_get_syspath(dev), NULL);
|
||||||
|
+ strscpyl(filepath, sizeof(filepath), devicepath, "/", file, NULL);
|
||||||
|
+ file = filepath;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ while (--loop) {
|
||||||
|
+ const struct timespec duration = { 0, 1000 * 1000 * 1000 / WAIT_LOOP_PER_SECOND };
|
||||||
|
+
|
||||||
|
+ /* lookup file */
|
||||||
|
+ if (stat(file, &stats) == 0) {
|
||||||
|
+ log_debug("file '%s' appeared after %i loops", file, (timeout * WAIT_LOOP_PER_SECOND) - loop-1);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+ /* make sure, the device did not disappear in the meantime */
|
||||||
|
+ if (devicepath[0] != '\0' && stat(devicepath, &stats) != 0) {
|
||||||
|
+ log_debug("device disappeared while waiting for '%s'", file);
|
||||||
|
+ return -2;
|
||||||
|
+ }
|
||||||
|
+ log_debug("wait for '%s' for %i mseconds", file, 1000 / WAIT_LOOP_PER_SECOND);
|
||||||
|
+ nanosleep(&duration, NULL);
|
||||||
|
+ }
|
||||||
|
+ log_debug("waiting for '%s' failed", file);
|
||||||
|
+ return -1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void attr_subst_subdir(char *attr, size_t len) {
|
||||||
|
const char *pos, *tail, *path;
|
||||||
|
_cleanup_closedir_ DIR *dir = NULL;
|
||||||
|
@@ -1284,7 +1319,12 @@ static void add_rule(struct udev_rules *rules, char *line,
|
||||||
|
rule_add_key(&rule_tmp, TK_A_RUN_PROGRAM, op, value, &cmd);
|
||||||
|
} else
|
||||||
|
LOG_RULE_ERROR("ignoring unknown %s{} type '%s'", "RUN", attr);
|
||||||
|
+ } else if (streq(key, "WAIT_FOR") || streq(key, "WAIT_FOR_SYSFS")) {
|
||||||
|
+ if (op == OP_REMOVE)
|
||||||
|
+ LOG_AND_RETURN("invalid %s operation", key);
|
||||||
|
|
||||||
|
+ rule_add_key(&rule_tmp, TK_M_WAITFOR, 0, value, NULL);
|
||||||
|
+ continue;
|
||||||
|
} else if (streq(key, "LABEL")) {
|
||||||
|
if (op == OP_REMOVE)
|
||||||
|
LOG_AND_RETURN("invalid %s operation", key);
|
||||||
|
@@ -1838,6 +1878,16 @@ void udev_rules_apply_to_event(struct udev_rules *rules,
|
||||||
|
if (match_key(rules, cur, udev_device_get_driver(event->dev)) != 0)
|
||||||
|
goto nomatch;
|
||||||
|
break;
|
||||||
|
+ case TK_M_WAITFOR: {
|
||||||
|
+ char filename[UTIL_PATH_SIZE];
|
||||||
|
+ int found;
|
||||||
|
+
|
||||||
|
+ udev_event_apply_format(event, rules_str(rules, cur->key.value_off), filename, sizeof(filename), false);
|
||||||
|
+ found = (wait_for_file(event->dev, filename, 10) == 0);
|
||||||
|
+ if (!found && (cur->key.op != OP_NOMATCH))
|
||||||
|
+ goto nomatch;
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
case TK_M_ATTR:
|
||||||
|
if (match_attr(rules, event->dev, event, cur) != 0)
|
||||||
|
goto nomatch;
|
||||||
|
diff --git a/test/rule-syntax-check.py b/test/rule-syntax-check.py
|
||||||
|
index dfb06d9ed9..706d93632e 100755
|
||||||
|
--- a/test/rule-syntax-check.py
|
||||||
|
+++ b/test/rule-syntax-check.py
|
||||||
|
@@ -18,7 +18,7 @@ if not rules_files:
|
||||||
|
quoted_string_re = r'"(?:[^\\"]|\\.)*"'
|
||||||
|
no_args_tests = re.compile(r'(ACTION|DEVPATH|KERNELS?|NAME|SYMLINK|SUBSYSTEMS?|DRIVERS?|TAG|PROGRAM|RESULT|TEST)\s*(?:=|!)=\s*' + quoted_string_re + '$')
|
||||||
|
args_tests = re.compile(r'(ATTRS?|ENV|TEST){([a-zA-Z0-9/_.*%-]+)}\s*(?:=|!)=\s*' + quoted_string_re + '$')
|
||||||
|
-no_args_assign = re.compile(r'(NAME|SYMLINK|OWNER|GROUP|MODE|TAG|RUN|LABEL|GOTO|OPTIONS|IMPORT)\s*(?:\+=|:=|=)\s*' + quoted_string_re + '$')
|
||||||
|
+no_args_assign = re.compile(r'(NAME|SYMLINK|OWNER|GROUP|MODE|TAG|RUN|LABEL|GOTO|WAIT_FOR|OPTIONS|IMPORT)\s*(?:\+=|:=|=)\s*' + quoted_string_re + '$')
|
||||||
|
args_assign = re.compile(r'(ATTR|ENV|IMPORT|RUN){([a-zA-Z0-9/_.*%-]+)}\s*(=|\+=)\s*' + quoted_string_re + '$')
|
||||||
|
# Find comma-separated groups, but allow commas that are inside quoted strings.
|
||||||
|
# Using quoted_string_re + '?' so that strings missing the last double quote
|
@ -0,0 +1,22 @@
|
|||||||
|
From ab0228c3d6ceba20cf89ceb1b16b7e314aaaf989 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Tue, 7 Aug 2018 10:38:33 +0200
|
||||||
|
Subject: [PATCH] net_setup_link: allow renaming interfaces that were renamed
|
||||||
|
previously
|
||||||
|
|
||||||
|
---
|
||||||
|
src/udev/net/link-config.c | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/udev/net/link-config.c b/src/udev/net/link-config.c
|
||||||
|
index cec4f4f779..5113586457 100644
|
||||||
|
--- a/src/udev/net/link-config.c
|
||||||
|
+++ b/src/udev/net/link-config.c
|
||||||
|
@@ -306,7 +306,6 @@ static bool should_rename(struct udev_device *device, bool respect_predictable)
|
||||||
|
|
||||||
|
switch (type) {
|
||||||
|
case NET_NAME_USER:
|
||||||
|
- case NET_NAME_RENAMED:
|
||||||
|
/* these were already named by userspace, do not touch again */
|
||||||
|
return false;
|
||||||
|
case NET_NAME_PREDICTABLE:
|
@ -1,26 +0,0 @@
|
|||||||
From 41ccc595538752f04f88c80fe7a9e283d4ef12c4 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michal Sekletar <msekleta@redhat.com>
|
|
||||||
Date: Wed, 22 Sep 2021 14:38:00 +0200
|
|
||||||
Subject: [PATCH] units: don't enable tmp.mount statically in local-fs.target
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Related: #2000927
|
|
||||||
---
|
|
||||||
units/meson.build | 3 +--
|
|
||||||
1 file changed, 1 insertion(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/units/meson.build b/units/meson.build
|
|
||||||
index 69d53f4259..9eb535858a 100644
|
|
||||||
--- a/units/meson.build
|
|
||||||
+++ b/units/meson.build
|
|
||||||
@@ -159,8 +159,7 @@ units = [
|
|
||||||
['time-set.target', ''],
|
|
||||||
['time-sync.target', ''],
|
|
||||||
['timers.target', ''],
|
|
||||||
- ['tmp.mount', '',
|
|
||||||
- 'local-fs.target.wants/'],
|
|
||||||
+ ['tmp.mount', ''],
|
|
||||||
['umount.target', ''],
|
|
||||||
['usb-gadget.target', ''],
|
|
||||||
['user.slice', ''],
|
|
@ -1,59 +0,0 @@
|
|||||||
From 4ec48c87803916e90a8f30afae6c8bdee5bb9ba5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: rpm-build <rpm-build>
|
|
||||||
Date: Wed, 1 Aug 2018 13:19:39 +0200
|
|
||||||
Subject: [PATCH] pid1: bump DefaultTasksMax to 80% of the kernel pid.max value
|
|
||||||
|
|
||||||
This should be hopefully high enough even for the very big deployments.
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #2003031
|
|
||||||
---
|
|
||||||
man/systemd-system.conf.xml | 4 ++--
|
|
||||||
src/core/main.c | 2 +-
|
|
||||||
src/core/system.conf.in | 2 +-
|
|
||||||
3 files changed, 4 insertions(+), 4 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemd-system.conf.xml b/man/systemd-system.conf.xml
|
|
||||||
index 3805a010e2..b8e2b65625 100644
|
|
||||||
--- a/man/systemd-system.conf.xml
|
|
||||||
+++ b/man/systemd-system.conf.xml
|
|
||||||
@@ -404,10 +404,10 @@
|
|
||||||
<listitem><para>Configure the default value for the per-unit <varname>TasksMax=</varname> setting. See
|
|
||||||
<citerefentry><refentrytitle>systemd.resource-control</refentrytitle><manvolnum>5</manvolnum></citerefentry>
|
|
||||||
for details. This setting applies to all unit types that support resource control settings, with the exception
|
|
||||||
- of slice units. Defaults to 15% of the minimum of <varname>kernel.pid_max=</varname>, <varname>kernel.threads-max=</varname>
|
|
||||||
+ of slice units. Defaults to 80% of the minimum of <varname>kernel.pid_max=</varname>, <varname>kernel.threads-max=</varname>
|
|
||||||
and root cgroup <varname>pids.max</varname>.
|
|
||||||
Kernel has a default value for <varname>kernel.pid_max=</varname> and an algorithm of counting in case of more than 32 cores.
|
|
||||||
- For example with the default <varname>kernel.pid_max=</varname>, <varname>DefaultTasksMax=</varname> defaults to 4915,
|
|
||||||
+ For example with the default <varname>kernel.pid_max=</varname>, <varname>DefaultTasksMax=</varname> defaults to 26214,
|
|
||||||
but might be greater in other systems or smaller in OS containers.</para></listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
diff --git a/src/core/main.c b/src/core/main.c
|
|
||||||
index 57aedb9b93..7ea848ebeb 100644
|
|
||||||
--- a/src/core/main.c
|
|
||||||
+++ b/src/core/main.c
|
|
||||||
@@ -98,7 +98,7 @@
|
|
||||||
#include <sanitizer/lsan_interface.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
-#define DEFAULT_TASKS_MAX ((TasksMax) { 15U, 100U }) /* 15% */
|
|
||||||
+#define DEFAULT_TASKS_MAX ((TasksMax) { 80U, 100U }) /* 80% */
|
|
||||||
|
|
||||||
static enum {
|
|
||||||
ACTION_RUN,
|
|
||||||
diff --git a/src/core/system.conf.in b/src/core/system.conf.in
|
|
||||||
index 96fb64d2c1..c0dc6a7e17 100644
|
|
||||||
--- a/src/core/system.conf.in
|
|
||||||
+++ b/src/core/system.conf.in
|
|
||||||
@@ -54,7 +54,7 @@
|
|
||||||
#DefaultBlockIOAccounting=no
|
|
||||||
#DefaultMemoryAccounting={{ 'yes' if MEMORY_ACCOUNTING_DEFAULT else 'no' }}
|
|
||||||
#DefaultTasksAccounting=yes
|
|
||||||
-#DefaultTasksMax=15%
|
|
||||||
+#DefaultTasksMax=80%
|
|
||||||
#DefaultLimitCPU=
|
|
||||||
#DefaultLimitFSIZE=
|
|
||||||
#DefaultLimitDATA=
|
|
@ -0,0 +1,23 @@
|
|||||||
|
From b61e8046ebcb28225423fc0073183d68d4c577c4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Thu, 9 Aug 2018 15:28:44 +0200
|
||||||
|
Subject: [PATCH] units: drop DynamicUser=yes from systemd-resolved.service
|
||||||
|
|
||||||
|
We don't really need DynamicUser since we add systemd-resolve user
|
||||||
|
from rpm script
|
||||||
|
---
|
||||||
|
units/systemd-resolved.service.in | 1 -
|
||||||
|
1 file changed, 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/units/systemd-resolved.service.in b/units/systemd-resolved.service.in
|
||||||
|
index 9982ecebff..aaed406ab2 100644
|
||||||
|
--- a/units/systemd-resolved.service.in
|
||||||
|
+++ b/units/systemd-resolved.service.in
|
||||||
|
@@ -26,7 +26,6 @@ RestartSec=0
|
||||||
|
ExecStart=!!@rootlibexecdir@/systemd-resolved
|
||||||
|
WatchdogSec=3min
|
||||||
|
User=systemd-resolve
|
||||||
|
-DynamicUser=yes
|
||||||
|
CapabilityBoundingSet=CAP_SETPCAP CAP_NET_RAW CAP_NET_BIND_SERVICE
|
||||||
|
AmbientCapabilities=CAP_SETPCAP CAP_NET_RAW CAP_NET_BIND_SERVICE
|
||||||
|
PrivateDevices=yes
|
73
SOURCES/0019-journal-remove-journal-audit-socket.patch
Normal file
73
SOURCES/0019-journal-remove-journal-audit-socket.patch
Normal file
@ -0,0 +1,73 @@
|
|||||||
|
From 8618ef2fb30b4139c9bec4e45fb499cd8192a87f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Thu, 9 Aug 2018 23:23:00 +0200
|
||||||
|
Subject: [PATCH] journal: remove journal audit socket
|
||||||
|
|
||||||
|
Resolves: #1614554
|
||||||
|
---
|
||||||
|
units/meson.build | 2 --
|
||||||
|
units/systemd-journald-audit.socket | 22 ----------------------
|
||||||
|
units/systemd-journald.service.in | 4 ++--
|
||||||
|
3 files changed, 2 insertions(+), 26 deletions(-)
|
||||||
|
delete mode 100644 units/systemd-journald-audit.socket
|
||||||
|
|
||||||
|
diff --git a/units/meson.build b/units/meson.build
|
||||||
|
index e4ac6ced64..e54a84ccbf 100644
|
||||||
|
--- a/units/meson.build
|
||||||
|
+++ b/units/meson.build
|
||||||
|
@@ -89,8 +89,6 @@ units = [
|
||||||
|
'sockets.target.wants/'],
|
||||||
|
['systemd-journal-gatewayd.socket', 'ENABLE_REMOTE HAVE_MICROHTTPD'],
|
||||||
|
['systemd-journal-remote.socket', 'ENABLE_REMOTE HAVE_MICROHTTPD'],
|
||||||
|
- ['systemd-journald-audit.socket', '',
|
||||||
|
- 'sockets.target.wants/'],
|
||||||
|
['systemd-journald-dev-log.socket', '',
|
||||||
|
'sockets.target.wants/'],
|
||||||
|
['systemd-journald.socket', '',
|
||||||
|
diff --git a/units/systemd-journald-audit.socket b/units/systemd-journald-audit.socket
|
||||||
|
deleted file mode 100644
|
||||||
|
index cb8b774963..0000000000
|
||||||
|
--- a/units/systemd-journald-audit.socket
|
||||||
|
+++ /dev/null
|
||||||
|
@@ -1,22 +0,0 @@
|
||||||
|
-# SPDX-License-Identifier: LGPL-2.1+
|
||||||
|
-#
|
||||||
|
-# This file is part of systemd.
|
||||||
|
-#
|
||||||
|
-# systemd is free software; you can redistribute it and/or modify it
|
||||||
|
-# under the terms of the GNU Lesser General Public License as published by
|
||||||
|
-# the Free Software Foundation; either version 2.1 of the License, or
|
||||||
|
-# (at your option) any later version.
|
||||||
|
-
|
||||||
|
-[Unit]
|
||||||
|
-Description=Journal Audit Socket
|
||||||
|
-Documentation=man:systemd-journald.service(8) man:journald.conf(5)
|
||||||
|
-DefaultDependencies=no
|
||||||
|
-Before=sockets.target
|
||||||
|
-ConditionSecurity=audit
|
||||||
|
-ConditionCapability=CAP_AUDIT_READ
|
||||||
|
-
|
||||||
|
-[Socket]
|
||||||
|
-Service=systemd-journald.service
|
||||||
|
-ReceiveBuffer=128M
|
||||||
|
-ListenNetlink=audit 1
|
||||||
|
-PassCredentials=yes
|
||||||
|
diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in
|
||||||
|
index 52939e6820..8f5021d0de 100644
|
||||||
|
--- a/units/systemd-journald.service.in
|
||||||
|
+++ b/units/systemd-journald.service.in
|
||||||
|
@@ -12,12 +12,12 @@ Description=Journal Service
|
||||||
|
Documentation=man:systemd-journald.service(8) man:journald.conf(5)
|
||||||
|
DefaultDependencies=no
|
||||||
|
Requires=systemd-journald.socket
|
||||||
|
-After=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket syslog.socket
|
||||||
|
+After=systemd-journald.socket systemd-journald-dev-log.socket syslog.socket
|
||||||
|
Before=sysinit.target
|
||||||
|
|
||||||
|
[Service]
|
||||||
|
Type=notify
|
||||||
|
-Sockets=systemd-journald.socket systemd-journald-dev-log.socket systemd-journald-audit.socket
|
||||||
|
+Sockets=systemd-journald.socket systemd-journald-dev-log.socket
|
||||||
|
ExecStart=@rootlibexecdir@/systemd-journald
|
||||||
|
Restart=always
|
||||||
|
RestartSec=0
|
117
SOURCES/0020-bus-move-BUS_DONT_DESTROY-calls-after-asserts.patch
Normal file
117
SOURCES/0020-bus-move-BUS_DONT_DESTROY-calls-after-asserts.patch
Normal file
@ -0,0 +1,117 @@
|
|||||||
|
From c6903d1b42d1773fda4df6676618489ad760a2a1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||||
|
Date: Wed, 18 Jul 2018 12:16:33 +0200
|
||||||
|
Subject: [PATCH] bus: move BUS_DONT_DESTROY calls after asserts
|
||||||
|
|
||||||
|
It's not useful to bump the reference count before checking if the object is
|
||||||
|
NULL. Thanks to d40f5cc498 we can do this ;).
|
||||||
|
|
||||||
|
Related to https://bugzilla.redhat.com/show_bug.cgi?id=1576084,
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1575340,
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1575350. I'm not sure why those two
|
||||||
|
people hit this code path, while most people don't. At least we won't abort.
|
||||||
|
|
||||||
|
(cherry picked from commit 7ae8edcd03f74da123298330b76c3fc5425042ef)
|
||||||
|
|
||||||
|
Resolves: #1610397
|
||||||
|
---
|
||||||
|
src/libsystemd/sd-bus/bus-objects.c | 15 ++++++++-------
|
||||||
|
src/libsystemd/sd-bus/sd-bus.c | 3 ++-
|
||||||
|
2 files changed, 10 insertions(+), 8 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/libsystemd/sd-bus/bus-objects.c b/src/libsystemd/sd-bus/bus-objects.c
|
||||||
|
index 9609834fa9..a18ff88b07 100644
|
||||||
|
--- a/src/libsystemd/sd-bus/bus-objects.c
|
||||||
|
+++ b/src/libsystemd/sd-bus/bus-objects.c
|
||||||
|
@@ -2090,7 +2090,6 @@ _public_ int sd_bus_emit_properties_changed_strv(
|
||||||
|
const char *interface,
|
||||||
|
char **names) {
|
||||||
|
|
||||||
|
- BUS_DONT_DESTROY(bus);
|
||||||
|
bool found_interface = false;
|
||||||
|
char *prefix;
|
||||||
|
int r;
|
||||||
|
@@ -2111,6 +2110,8 @@ _public_ int sd_bus_emit_properties_changed_strv(
|
||||||
|
if (names && names[0] == NULL)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
+ BUS_DONT_DESTROY(bus);
|
||||||
|
+
|
||||||
|
do {
|
||||||
|
bus->nodes_modified = false;
|
||||||
|
|
||||||
|
@@ -2310,8 +2311,6 @@ static int object_added_append_all(sd_bus *bus, sd_bus_message *m, const char *p
|
||||||
|
}
|
||||||
|
|
||||||
|
_public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) {
|
||||||
|
- BUS_DONT_DESTROY(bus);
|
||||||
|
-
|
||||||
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||||
|
struct node *object_manager;
|
||||||
|
int r;
|
||||||
|
@@ -2341,6 +2340,8 @@ _public_ int sd_bus_emit_object_added(sd_bus *bus, const char *path) {
|
||||||
|
if (r == 0)
|
||||||
|
return -ESRCH;
|
||||||
|
|
||||||
|
+ BUS_DONT_DESTROY(bus);
|
||||||
|
+
|
||||||
|
do {
|
||||||
|
bus->nodes_modified = false;
|
||||||
|
m = sd_bus_message_unref(m);
|
||||||
|
@@ -2481,8 +2482,6 @@ static int object_removed_append_all(sd_bus *bus, sd_bus_message *m, const char
|
||||||
|
}
|
||||||
|
|
||||||
|
_public_ int sd_bus_emit_object_removed(sd_bus *bus, const char *path) {
|
||||||
|
- BUS_DONT_DESTROY(bus);
|
||||||
|
-
|
||||||
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||||
|
struct node *object_manager;
|
||||||
|
int r;
|
||||||
|
@@ -2512,6 +2511,8 @@ _public_ int sd_bus_emit_object_removed(sd_bus *bus, const char *path) {
|
||||||
|
if (r == 0)
|
||||||
|
return -ESRCH;
|
||||||
|
|
||||||
|
+ BUS_DONT_DESTROY(bus);
|
||||||
|
+
|
||||||
|
do {
|
||||||
|
bus->nodes_modified = false;
|
||||||
|
m = sd_bus_message_unref(m);
|
||||||
|
@@ -2645,8 +2646,6 @@ static int interfaces_added_append_one(
|
||||||
|
}
|
||||||
|
|
||||||
|
_public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, char **interfaces) {
|
||||||
|
- BUS_DONT_DESTROY(bus);
|
||||||
|
-
|
||||||
|
_cleanup_(sd_bus_message_unrefp) sd_bus_message *m = NULL;
|
||||||
|
struct node *object_manager;
|
||||||
|
char **i;
|
||||||
|
@@ -2669,6 +2668,8 @@ _public_ int sd_bus_emit_interfaces_added_strv(sd_bus *bus, const char *path, ch
|
||||||
|
if (r == 0)
|
||||||
|
return -ESRCH;
|
||||||
|
|
||||||
|
+ BUS_DONT_DESTROY(bus);
|
||||||
|
+
|
||||||
|
do {
|
||||||
|
bus->nodes_modified = false;
|
||||||
|
m = sd_bus_message_unref(m);
|
||||||
|
diff --git a/src/libsystemd/sd-bus/sd-bus.c b/src/libsystemd/sd-bus/sd-bus.c
|
||||||
|
index 089b51a6d9..7f03528b89 100644
|
||||||
|
--- a/src/libsystemd/sd-bus/sd-bus.c
|
||||||
|
+++ b/src/libsystemd/sd-bus/sd-bus.c
|
||||||
|
@@ -2883,7 +2883,6 @@ finish:
|
||||||
|
}
|
||||||
|
|
||||||
|
static int bus_process_internal(sd_bus *bus, bool hint_priority, int64_t priority, sd_bus_message **ret) {
|
||||||
|
- BUS_DONT_DESTROY(bus);
|
||||||
|
int r;
|
||||||
|
|
||||||
|
/* Returns 0 when we didn't do anything. This should cause the
|
||||||
|
@@ -2899,6 +2898,8 @@ static int bus_process_internal(sd_bus *bus, bool hint_priority, int64_t priorit
|
||||||
|
assert_return(!bus->current_message, -EBUSY);
|
||||||
|
assert(!bus->current_slot);
|
||||||
|
|
||||||
|
+ BUS_DONT_DESTROY(bus);
|
||||||
|
+
|
||||||
|
switch (bus->state) {
|
||||||
|
|
||||||
|
case BUS_UNSET:
|
@ -1,27 +0,0 @@
|
|||||||
From 402595e7b0668b8fe44b5b00b1dd45ba9cc42b82 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Thu, 4 Nov 2021 12:31:32 +0100
|
|
||||||
Subject: [PATCH] ci: use C9S chroots in Packit
|
|
||||||
|
|
||||||
rhel-only
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
.packit.yml | 5 ++---
|
|
||||||
1 file changed, 2 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/.packit.yml b/.packit.yml
|
|
||||||
index 3461bccbc5..ce8782aae2 100644
|
|
||||||
--- a/.packit.yml
|
|
||||||
+++ b/.packit.yml
|
|
||||||
@@ -37,9 +37,8 @@ jobs:
|
|
||||||
trigger: pull_request
|
|
||||||
metadata:
|
|
||||||
targets:
|
|
||||||
- # FIXME: change to CentOS 9 once it's available
|
|
||||||
- - fedora-34-x86_64
|
|
||||||
- - fedora-34-aarch64
|
|
||||||
+ - centos-stream-9-x86_64
|
|
||||||
+ - centos-stream-9-aarch64
|
|
||||||
|
|
||||||
# TODO: can't use TFT yet due to https://pagure.io/fedora-ci/general/issue/184
|
|
||||||
# Run tests (via testing farm)
|
|
@ -0,0 +1,23 @@
|
|||||||
|
From 56f614a5d6305dc1d304c30438db5b394d16e2da Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Fri, 12 Oct 2018 13:58:34 +0000
|
||||||
|
Subject: [PATCH] random-seed: raise POOL_SIZE_MIN constant to 1024
|
||||||
|
|
||||||
|
Resolves: #1619268
|
||||||
|
---
|
||||||
|
src/random-seed/random-seed.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/random-seed/random-seed.c b/src/random-seed/random-seed.c
|
||||||
|
index 223b56306c..adc9f298c1 100644
|
||||||
|
--- a/src/random-seed/random-seed.c
|
||||||
|
+++ b/src/random-seed/random-seed.c
|
||||||
|
@@ -14,7 +14,7 @@
|
||||||
|
#include "string-util.h"
|
||||||
|
#include "util.h"
|
||||||
|
|
||||||
|
-#define POOL_SIZE_MIN 512
|
||||||
|
+#define POOL_SIZE_MIN 1024
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
_cleanup_close_ int seed_fd = -1, random_fd = -1;
|
@ -1,30 +0,0 @@
|
|||||||
From 3c54c67a7fc65dc5b49b2452739c19b94eeb98a9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: David Tardon <dtardon@redhat.com>
|
|
||||||
Date: Tue, 21 Dec 2021 10:46:17 +0100
|
|
||||||
Subject: [PATCH] Treat EPERM as "not available" too
|
|
||||||
|
|
||||||
We need to do this because idmapped mounts habe been disabled in RHEL-9
|
|
||||||
kernel: https://bugzilla.redhat.com/show_bug.cgi?id=2018141 .
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Fixes #55
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/nspawn/nspawn.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/nspawn/nspawn.c b/src/nspawn/nspawn.c
|
|
||||||
index 8f17ab8810..9225c8f162 100644
|
|
||||||
--- a/src/nspawn/nspawn.c
|
|
||||||
+++ b/src/nspawn/nspawn.c
|
|
||||||
@@ -3780,7 +3780,7 @@ static int outer_child(
|
|
||||||
arg_uid_shift != 0) {
|
|
||||||
|
|
||||||
r = remount_idmap(directory, arg_uid_shift, arg_uid_range);
|
|
||||||
- if (r == -EINVAL || ERRNO_IS_NOT_SUPPORTED(r)) {
|
|
||||||
+ if (IN_SET(r, -EINVAL, -EPERM) || ERRNO_IS_NOT_SUPPORTED(r)) {
|
|
||||||
/* This might fail because the kernel or file system doesn't support idmapping. We
|
|
||||||
* can't really distinguish this nicely, nor do we have any guarantees about the
|
|
||||||
* error codes we see, could be EOPNOTSUPP or EINVAL. */
|
|
@ -0,0 +1,119 @@
|
|||||||
|
From a046230cfb7e02938e3ad2ac85515636b319651e Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dimitri John Ledkov <xnox@ubuntu.com>
|
||||||
|
Date: Wed, 29 Aug 2018 15:38:09 +0100
|
||||||
|
Subject: [PATCH] cryptsetup: add support for sector-size= option (#9936)
|
||||||
|
|
||||||
|
Bug-Ubuntu: https://launchpad.net/bugs/1776626
|
||||||
|
|
||||||
|
Closes #8881.
|
||||||
|
|
||||||
|
(cherry picked from commit a9fc640671ef60ac949f1ace6fa687ff242fc233)
|
||||||
|
|
||||||
|
Resolves: #1572563
|
||||||
|
---
|
||||||
|
man/crypttab.xml | 9 +++++++++
|
||||||
|
meson.build | 6 ++++++
|
||||||
|
src/cryptsetup/cryptsetup.c | 30 ++++++++++++++++++++++++++++++
|
||||||
|
3 files changed, 45 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/man/crypttab.xml b/man/crypttab.xml
|
||||||
|
index dcaf03d2ca..3574ce00da 100644
|
||||||
|
--- a/man/crypttab.xml
|
||||||
|
+++ b/man/crypttab.xml
|
||||||
|
@@ -250,6 +250,15 @@
|
||||||
|
option.</para></listitem>
|
||||||
|
</varlistentry>
|
||||||
|
|
||||||
|
+ <varlistentry>
|
||||||
|
+ <term><option>sector-size=</option></term>
|
||||||
|
+
|
||||||
|
+ <listitem><para>Specifies the sector size in bytes. See
|
||||||
|
+ <citerefentry project='die-net'><refentrytitle>cryptsetup</refentrytitle><manvolnum>8</manvolnum></citerefentry>
|
||||||
|
+ for possible values and the default value of this
|
||||||
|
+ option.</para></listitem>
|
||||||
|
+ </varlistentry>
|
||||||
|
+
|
||||||
|
<varlistentry>
|
||||||
|
<term><option>swap</option></term>
|
||||||
|
|
||||||
|
diff --git a/meson.build b/meson.build
|
||||||
|
index a0e7240708..f308db2631 100644
|
||||||
|
--- a/meson.build
|
||||||
|
+++ b/meson.build
|
||||||
|
@@ -927,11 +927,17 @@ if want_libcryptsetup != 'false' and not fuzzer_build
|
||||||
|
version : '>= 1.6.0',
|
||||||
|
required : want_libcryptsetup == 'true')
|
||||||
|
have = libcryptsetup.found()
|
||||||
|
+ have_sector = cc.has_member(
|
||||||
|
+ 'struct crypt_params_plain',
|
||||||
|
+ 'sector_size',
|
||||||
|
+ prefix : '#include <libcryptsetup.h>')
|
||||||
|
else
|
||||||
|
have = false
|
||||||
|
+ have_sector = false
|
||||||
|
libcryptsetup = []
|
||||||
|
endif
|
||||||
|
conf.set10('HAVE_LIBCRYPTSETUP', have)
|
||||||
|
+conf.set10('HAVE_LIBCRYPTSETUP_SECTOR_SIZE', have_sector)
|
||||||
|
|
||||||
|
want_libcurl = get_option('libcurl')
|
||||||
|
if want_libcurl != 'false' and not fuzzer_build
|
||||||
|
diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
|
||||||
|
index 832168184a..87008cb969 100644
|
||||||
|
--- a/src/cryptsetup/cryptsetup.c
|
||||||
|
+++ b/src/cryptsetup/cryptsetup.c
|
||||||
|
@@ -23,10 +23,14 @@
|
||||||
|
|
||||||
|
/* internal helper */
|
||||||
|
#define ANY_LUKS "LUKS"
|
||||||
|
+/* as in src/cryptsetup.h */
|
||||||
|
+#define CRYPT_SECTOR_SIZE 512
|
||||||
|
+#define CRYPT_MAX_SECTOR_SIZE 4096
|
||||||
|
|
||||||
|
static const char *arg_type = NULL; /* ANY_LUKS, CRYPT_LUKS1, CRYPT_LUKS2, CRYPT_TCRYPT or CRYPT_PLAIN */
|
||||||
|
static char *arg_cipher = NULL;
|
||||||
|
static unsigned arg_key_size = 0;
|
||||||
|
+static unsigned arg_sector_size = CRYPT_SECTOR_SIZE;
|
||||||
|
static int arg_key_slot = CRYPT_ANY_SLOT;
|
||||||
|
static unsigned arg_keyfile_size = 0;
|
||||||
|
static uint64_t arg_keyfile_offset = 0;
|
||||||
|
@@ -86,6 +90,29 @@ static int parse_one_option(const char *option) {
|
||||||
|
|
||||||
|
arg_key_size /= 8;
|
||||||
|
|
||||||
|
+ } else if ((val = startswith(option, "sector-size="))) {
|
||||||
|
+
|
||||||
|
+#if HAVE_LIBCRYPTSETUP_SECTOR_SIZE
|
||||||
|
+ r = safe_atou(val, &arg_sector_size);
|
||||||
|
+ if (r < 0) {
|
||||||
|
+ log_error_errno(r, "Failed to parse %s, ignoring: %m", option);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (arg_sector_size % 2) {
|
||||||
|
+ log_error("sector-size= not a multiple of 2, ignoring.");
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ if (arg_sector_size < CRYPT_SECTOR_SIZE || arg_sector_size > CRYPT_MAX_SECTOR_SIZE) {
|
||||||
|
+ log_error("sector-size= is outside of %u and %u, ignoring.", CRYPT_SECTOR_SIZE, CRYPT_MAX_SECTOR_SIZE);
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+#else
|
||||||
|
+ log_error("sector-size= is not supported, compiled with old libcryptsetup.");
|
||||||
|
+ return 0;
|
||||||
|
+#endif
|
||||||
|
+
|
||||||
|
} else if ((val = startswith(option, "key-slot="))) {
|
||||||
|
|
||||||
|
arg_type = ANY_LUKS;
|
||||||
|
@@ -471,6 +498,9 @@ static int attach_luks_or_plain(struct crypt_device *cd,
|
||||||
|
struct crypt_params_plain params = {
|
||||||
|
.offset = arg_offset,
|
||||||
|
.skip = arg_skip,
|
||||||
|
+#if HAVE_LIBCRYPTSETUP_SECTOR_SIZE
|
||||||
|
+ .sector_size = arg_sector_size,
|
||||||
|
+#endif
|
||||||
|
};
|
||||||
|
const char *cipher, *cipher_mode;
|
||||||
|
_cleanup_free_ char *truncated_cipher = NULL;
|
@ -0,0 +1,29 @@
|
|||||||
|
From 96b6171376bfdb7417143a2026beda059fe3e22f Mon Sep 17 00:00:00 2001
|
||||||
|
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
||||||
|
Date: Sat, 1 Sep 2018 23:47:46 +0900
|
||||||
|
Subject: [PATCH] cryptsetup: do not define arg_sector_size if libgcrypt is
|
||||||
|
v1.x (#9990)
|
||||||
|
|
||||||
|
Follow-up for #9936.
|
||||||
|
|
||||||
|
(cherry picked from commit 645461f0cf6ec91e5b0b571559fb4cc4898192bc)
|
||||||
|
|
||||||
|
Related: #1572563
|
||||||
|
---
|
||||||
|
src/cryptsetup/cryptsetup.c | 2 ++
|
||||||
|
1 file changed, 2 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/cryptsetup/cryptsetup.c b/src/cryptsetup/cryptsetup.c
|
||||||
|
index 87008cb969..abeba44ee8 100644
|
||||||
|
--- a/src/cryptsetup/cryptsetup.c
|
||||||
|
+++ b/src/cryptsetup/cryptsetup.c
|
||||||
|
@@ -30,7 +30,9 @@
|
||||||
|
static const char *arg_type = NULL; /* ANY_LUKS, CRYPT_LUKS1, CRYPT_LUKS2, CRYPT_TCRYPT or CRYPT_PLAIN */
|
||||||
|
static char *arg_cipher = NULL;
|
||||||
|
static unsigned arg_key_size = 0;
|
||||||
|
+#if HAVE_LIBCRYPTSETUP_SECTOR_SIZE
|
||||||
|
static unsigned arg_sector_size = CRYPT_SECTOR_SIZE;
|
||||||
|
+#endif
|
||||||
|
static int arg_key_slot = CRYPT_ANY_SLOT;
|
||||||
|
static unsigned arg_keyfile_size = 0;
|
||||||
|
static uint64_t arg_keyfile_offset = 0;
|
@ -1,39 +0,0 @@
|
|||||||
From 324d99159e1e64d78a580073626f5b645f1c3639 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Mon, 31 Jan 2022 14:19:09 +0100
|
|
||||||
Subject: [PATCH] test: copy portable profiles into the image if they don't
|
|
||||||
exist there
|
|
||||||
|
|
||||||
If we're built with `-Dportable=false`, the portable profiles won't get
|
|
||||||
installed into the image. Since we need only the profile files and
|
|
||||||
nothing else, let's copy them into the image explicitly in such case.
|
|
||||||
|
|
||||||
(cherry picked from commit 6f73ef8b30803ac1be1b2607aec1a89d778caa9a)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
test/test-functions | 11 +++++++++++
|
|
||||||
1 file changed, 11 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/test/test-functions b/test/test-functions
|
|
||||||
index 218d0e6888..35d8f074a9 100644
|
|
||||||
--- a/test/test-functions
|
|
||||||
+++ b/test/test-functions
|
|
||||||
@@ -1151,6 +1151,17 @@ install_systemd() {
|
|
||||||
mkdir -p "$initdir/etc/systemd/system/service.d/"
|
|
||||||
echo -e "[Service]\nProtectSystem=no\nProtectHome=no\n" >"$initdir/etc/systemd/system/service.d/gcov-override.conf"
|
|
||||||
fi
|
|
||||||
+
|
|
||||||
+ # If we're built with -Dportabled=false, tests with systemd-analyze
|
|
||||||
+ # --profile will fail. Since we need just the profile (text) files, let's
|
|
||||||
+ # copy them into the image if they don't exist there.
|
|
||||||
+ local portable_dir="${initdir:?}${ROOTLIBDIR:?}/portable"
|
|
||||||
+ if [[ ! -d "$portable_dir/profile/strict" ]]; then
|
|
||||||
+ dinfo "Couldn't find portable profiles in the test image"
|
|
||||||
+ dinfo "Copying them directly from the source tree"
|
|
||||||
+ mkdir -p "$portable_dir"
|
|
||||||
+ cp -frv "${SOURCE_DIR:?}/src/portable/profile" "$portable_dir"
|
|
||||||
+ fi
|
|
||||||
}
|
|
||||||
|
|
||||||
get_ldpath() {
|
|
@ -1,43 +0,0 @@
|
|||||||
From 16908e1ec833d857cb418712c382c6f604426b36 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Tue, 1 Feb 2022 20:18:29 +0100
|
|
||||||
Subject: [PATCH] test: introduce `get_cgroup_hierarchy() helper
|
|
||||||
|
|
||||||
which returns the host's cgroup hierarchy (unified, hybrid, or legacy).
|
|
||||||
|
|
||||||
(cherry picked from commit f723740871bd3eb89d16a526a1ff77c04bb3787a)
|
|
||||||
|
|
||||||
Related: #2047768
|
|
||||||
---
|
|
||||||
test/test-functions | 18 ++++++++++++++++++
|
|
||||||
1 file changed, 18 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/test/test-functions b/test/test-functions
|
|
||||||
index 35d8f074a9..4827b6bedf 100644
|
|
||||||
--- a/test/test-functions
|
|
||||||
+++ b/test/test-functions
|
|
||||||
@@ -1996,6 +1996,24 @@ import_initdir() {
|
|
||||||
export initdir
|
|
||||||
}
|
|
||||||
|
|
||||||
+get_cgroup_hierarchy() {
|
|
||||||
+ case "$(stat -c '%T' -f /sys/fs/cgroup)" in
|
|
||||||
+ cgroup2fs)
|
|
||||||
+ echo "unified"
|
|
||||||
+ ;;
|
|
||||||
+ tmpfs)
|
|
||||||
+ if [[ -d /sys/fs/cgroup/unified && "$(stat -c '%T' -f /sys/fs/cgroup/unified)" == cgroup2fs ]]; then
|
|
||||||
+ echo "hybrid"
|
|
||||||
+ else
|
|
||||||
+ echo "legacy"
|
|
||||||
+ fi
|
|
||||||
+ ;;
|
|
||||||
+ *)
|
|
||||||
+ dfatal "Failed to determine host's cgroup hierarchy"
|
|
||||||
+ exit 1
|
|
||||||
+ esac
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
## @brief Converts numeric logging level to the first letter of level name.
|
|
||||||
#
|
|
||||||
# @param lvl Numeric logging level in range from 1 to 6.
|
|
@ -0,0 +1,112 @@
|
|||||||
|
From e143339ac712f745727951973417ce93b5d06d78 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Fri, 12 Oct 2018 14:50:09 +0000
|
||||||
|
Subject: [PATCH] units: don't enable per-service IP firewall by default
|
||||||
|
|
||||||
|
Resolves: #1630219
|
||||||
|
---
|
||||||
|
units/systemd-coredump@.service.in | 1 -
|
||||||
|
units/systemd-hostnamed.service.in | 1 -
|
||||||
|
units/systemd-journald.service.in | 1 -
|
||||||
|
units/systemd-localed.service.in | 1 -
|
||||||
|
units/systemd-logind.service.in | 1 -
|
||||||
|
units/systemd-machined.service.in | 1 -
|
||||||
|
units/systemd-portabled.service.in | 1 -
|
||||||
|
units/systemd-timedated.service.in | 1 -
|
||||||
|
units/systemd-udevd.service.in | 1 -
|
||||||
|
9 files changed, 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/units/systemd-coredump@.service.in b/units/systemd-coredump@.service.in
|
||||||
|
index 215696ecd1..68a68a5055 100644
|
||||||
|
--- a/units/systemd-coredump@.service.in
|
||||||
|
+++ b/units/systemd-coredump@.service.in
|
||||||
|
@@ -37,5 +37,4 @@ SystemCallFilter=@system-service
|
||||||
|
SystemCallErrorNumber=EPERM
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
||||||
|
StateDirectory=systemd/coredump
|
||||||
|
diff --git a/units/systemd-hostnamed.service.in b/units/systemd-hostnamed.service.in
|
||||||
|
index da74b4fe8b..4e5470dd29 100644
|
||||||
|
--- a/units/systemd-hostnamed.service.in
|
||||||
|
+++ b/units/systemd-hostnamed.service.in
|
||||||
|
@@ -33,5 +33,4 @@ SystemCallFilter=@system-service sethostname
|
||||||
|
SystemCallErrorNumber=EPERM
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
||||||
|
ReadWritePaths=/etc
|
||||||
|
diff --git a/units/systemd-journald.service.in b/units/systemd-journald.service.in
|
||||||
|
index 8f5021d0de..2d5fd0120d 100644
|
||||||
|
--- a/units/systemd-journald.service.in
|
||||||
|
+++ b/units/systemd-journald.service.in
|
||||||
|
@@ -33,7 +33,6 @@ SystemCallFilter=@system-service
|
||||||
|
SystemCallErrorNumber=EPERM
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
||||||
|
|
||||||
|
# Increase the default a bit in order to allow many simultaneous
|
||||||
|
# services being run since we keep one fd open per service. Also, when
|
||||||
|
diff --git a/units/systemd-localed.service.in b/units/systemd-localed.service.in
|
||||||
|
index a24e61a0cd..ce043db154 100644
|
||||||
|
--- a/units/systemd-localed.service.in
|
||||||
|
+++ b/units/systemd-localed.service.in
|
||||||
|
@@ -33,5 +33,4 @@ SystemCallFilter=@system-service
|
||||||
|
SystemCallErrorNumber=EPERM
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
||||||
|
ReadWritePaths=/etc
|
||||||
|
diff --git a/units/systemd-logind.service.in b/units/systemd-logind.service.in
|
||||||
|
index 5e090bcf23..6953fac55b 100644
|
||||||
|
--- a/units/systemd-logind.service.in
|
||||||
|
+++ b/units/systemd-logind.service.in
|
||||||
|
@@ -34,7 +34,6 @@ SystemCallFilter=@system-service
|
||||||
|
SystemCallErrorNumber=EPERM
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
||||||
|
FileDescriptorStoreMax=512
|
||||||
|
|
||||||
|
# Increase the default a bit in order to allow many simultaneous
|
||||||
|
diff --git a/units/systemd-machined.service.in b/units/systemd-machined.service.in
|
||||||
|
index 1200a90a61..dec2c4b0dc 100644
|
||||||
|
--- a/units/systemd-machined.service.in
|
||||||
|
+++ b/units/systemd-machined.service.in
|
||||||
|
@@ -27,7 +27,6 @@ SystemCallFilter=@system-service @mount
|
||||||
|
SystemCallErrorNumber=EPERM
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
||||||
|
|
||||||
|
# Note that machined cannot be placed in a mount namespace, since it
|
||||||
|
# needs access to the host's mount namespace in order to implement the
|
||||||
|
diff --git a/units/systemd-portabled.service.in b/units/systemd-portabled.service.in
|
||||||
|
index a868f61dba..64f14071e8 100644
|
||||||
|
--- a/units/systemd-portabled.service.in
|
||||||
|
+++ b/units/systemd-portabled.service.in
|
||||||
|
@@ -23,4 +23,3 @@ RestrictAddressFamilies=AF_UNIX AF_NETLINK AF_INET AF_INET6
|
||||||
|
SystemCallFilter=~@clock @cpu-emulation @debug @keyring @module @obsolete @raw-io @reboot @swap
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
||||||
|
diff --git a/units/systemd-timedated.service.in b/units/systemd-timedated.service.in
|
||||||
|
index 906bb4326c..662b39557a 100644
|
||||||
|
--- a/units/systemd-timedated.service.in
|
||||||
|
+++ b/units/systemd-timedated.service.in
|
||||||
|
@@ -31,5 +31,4 @@ SystemCallFilter=@system-service @clock
|
||||||
|
SystemCallErrorNumber=EPERM
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
||||||
|
ReadWritePaths=/etc
|
||||||
|
diff --git a/units/systemd-udevd.service.in b/units/systemd-udevd.service.in
|
||||||
|
index 6a3814e5d9..fd9ead3bb8 100644
|
||||||
|
--- a/units/systemd-udevd.service.in
|
||||||
|
+++ b/units/systemd-udevd.service.in
|
||||||
|
@@ -33,4 +33,3 @@ SystemCallFilter=@system-service @module @raw-io
|
||||||
|
SystemCallErrorNumber=EPERM
|
||||||
|
SystemCallArchitectures=native
|
||||||
|
LockPersonality=yes
|
||||||
|
-IPAddressDeny=any
|
@ -0,0 +1,45 @@
|
|||||||
|
From 87922b7adc47f311e89b21e37b26ee300a401e1d Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||||
|
Date: Mon, 9 Jul 2018 13:21:44 +0200
|
||||||
|
Subject: [PATCH] bus-message: do not crash on message with a string of zero
|
||||||
|
length
|
||||||
|
|
||||||
|
We'd calculate the "real" length of the string as 'item_size - 1', which does
|
||||||
|
not work out well when item_size == 0.
|
||||||
|
|
||||||
|
(cherry picked from commit 81b6e63029eefcb0ec03a3a7c248490e38106073)
|
||||||
|
|
||||||
|
Resolves: #1635439
|
||||||
|
---
|
||||||
|
src/libsystemd/sd-bus/bus-message.c | 6 ++++++
|
||||||
|
.../crash-29ed3c202e0ffade3cad42c8bbeb6cc68a21eb8e | Bin 0 -> 51 bytes
|
||||||
|
2 files changed, 6 insertions(+)
|
||||||
|
create mode 100644 test/fuzz/fuzz-bus-message/crash-29ed3c202e0ffade3cad42c8bbeb6cc68a21eb8e
|
||||||
|
|
||||||
|
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
index 8d92bc2002..381034f5f8 100644
|
||||||
|
--- a/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
+++ b/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
@@ -3312,6 +3312,12 @@ _public_ int sd_bus_message_read_basic(sd_bus_message *m, char type, void *p) {
|
||||||
|
if (IN_SET(type, SD_BUS_TYPE_STRING, SD_BUS_TYPE_OBJECT_PATH, SD_BUS_TYPE_SIGNATURE)) {
|
||||||
|
bool ok;
|
||||||
|
|
||||||
|
+ /* D-Bus spec: The marshalling formats for the string-like types all end
|
||||||
|
+ * with a single zero (NUL) byte, but that byte is not considered to be part
|
||||||
|
+ * of the text. */
|
||||||
|
+ if (c->item_size == 0)
|
||||||
|
+ return -EBADMSG;
|
||||||
|
+
|
||||||
|
r = message_peek_body(m, &rindex, 1, c->item_size, &q);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
diff --git a/test/fuzz/fuzz-bus-message/crash-29ed3c202e0ffade3cad42c8bbeb6cc68a21eb8e b/test/fuzz/fuzz-bus-message/crash-29ed3c202e0ffade3cad42c8bbeb6cc68a21eb8e
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..4488f0a6c685b5d43eddbe41a0c6a3b6be9b02e2
|
||||||
|
GIT binary patch
|
||||||
|
literal 51
|
||||||
|
fcmc~1WMC4sJpJnr13KV`0|t%6q+%$@&=ddw)CUPg
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
@ -1,30 +0,0 @@
|
|||||||
From 523e72e97d7c945114b54b726eaab0d379fb35fb Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Tue, 1 Feb 2022 20:25:00 +0100
|
|
||||||
Subject: [PATCH] test: require unified cgroup hierarchy for TEST-56
|
|
||||||
|
|
||||||
since cgroup empty notifications are unreliable in legacy cgroups.
|
|
||||||
|
|
||||||
See: systemd/systemd#22320
|
|
||||||
Complements: systemd/systemd#22344
|
|
||||||
(cherry picked from commit e2620820188428de7086f5e8ac41305177f70954)
|
|
||||||
|
|
||||||
Related: #2047768
|
|
||||||
---
|
|
||||||
test/TEST-56-EXIT-TYPE/test.sh | 5 +++++
|
|
||||||
1 file changed, 5 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/test/TEST-56-EXIT-TYPE/test.sh b/test/TEST-56-EXIT-TYPE/test.sh
|
|
||||||
index 0f84dca1ba..37475e817e 100755
|
|
||||||
--- a/test/TEST-56-EXIT-TYPE/test.sh
|
|
||||||
+++ b/test/TEST-56-EXIT-TYPE/test.sh
|
|
||||||
@@ -6,4 +6,9 @@ TEST_DESCRIPTION="test ExitType=cgroup"
|
|
||||||
# shellcheck source=test/test-functions
|
|
||||||
. "${TEST_BASE_DIR:?}/test-functions"
|
|
||||||
|
|
||||||
+if [[ "$(get_cgroup_hierarchy)" != unified ]]; then
|
|
||||||
+ echo "This test requires unified cgroup hierarchy, skipping..."
|
|
||||||
+ exit 0
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
do_test "$@"
|
|
@ -0,0 +1,279 @@
|
|||||||
|
From 26de3af817b0c5746cb61b798ae8e138e01ea17c Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||||
|
Date: Mon, 9 Jul 2018 07:03:01 +0200
|
||||||
|
Subject: [PATCH] Introduce free_and_strndup and use it in bus-message.c
|
||||||
|
|
||||||
|
v2: fix error in free_and_strndup()
|
||||||
|
|
||||||
|
When the orignal and copied message were the same, but shorter than specified
|
||||||
|
length l, memory read past the end of the buffer would be performed. A test
|
||||||
|
case is included: a string that had an embedded NUL ("q\0") is used to replace
|
||||||
|
"q".
|
||||||
|
|
||||||
|
v3: Fix one more bug in free_and_strndup and add tests.
|
||||||
|
|
||||||
|
v4: Some style fixed based on review, one more use of free_and_replace, and
|
||||||
|
make the tests more comprehensive.
|
||||||
|
|
||||||
|
(cherry picked from commit 7f546026abbdc56c453a577e52d57159458c3e9c)
|
||||||
|
|
||||||
|
Resolves: #1635428
|
||||||
|
---
|
||||||
|
src/basic/string-util.c | 28 +++++++-
|
||||||
|
src/basic/string-util.h | 1 +
|
||||||
|
src/libsystemd/sd-bus/bus-message.c | 34 ++++------
|
||||||
|
src/test/test-string-util.c | 62 ++++++++++++++++++
|
||||||
|
...h-b88ad9ecf4aacf4a0caca5b5543953265367f084 | Bin 0 -> 32 bytes
|
||||||
|
5 files changed, 103 insertions(+), 22 deletions(-)
|
||||||
|
create mode 100644 test/fuzz/fuzz-bus-message/crash-b88ad9ecf4aacf4a0caca5b5543953265367f084
|
||||||
|
|
||||||
|
diff --git a/src/basic/string-util.c b/src/basic/string-util.c
|
||||||
|
index 0a40683493..dfa739996f 100644
|
||||||
|
--- a/src/basic/string-util.c
|
||||||
|
+++ b/src/basic/string-util.c
|
||||||
|
@@ -1004,7 +1004,7 @@ int free_and_strdup(char **p, const char *s) {
|
||||||
|
|
||||||
|
assert(p);
|
||||||
|
|
||||||
|
- /* Replaces a string pointer with an strdup()ed new string,
|
||||||
|
+ /* Replaces a string pointer with a strdup()ed new string,
|
||||||
|
* possibly freeing the old one. */
|
||||||
|
|
||||||
|
if (streq_ptr(*p, s))
|
||||||
|
@@ -1023,6 +1023,32 @@ int free_and_strdup(char **p, const char *s) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
+int free_and_strndup(char **p, const char *s, size_t l) {
|
||||||
|
+ char *t;
|
||||||
|
+
|
||||||
|
+ assert(p);
|
||||||
|
+ assert(s || l == 0);
|
||||||
|
+
|
||||||
|
+ /* Replaces a string pointer with a strndup()ed new string,
|
||||||
|
+ * freeing the old one. */
|
||||||
|
+
|
||||||
|
+ if (!*p && !s)
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (*p && s && strneq(*p, s, l) && (l > strlen(*p) || (*p)[l] == '\0'))
|
||||||
|
+ return 0;
|
||||||
|
+
|
||||||
|
+ if (s) {
|
||||||
|
+ t = strndup(s, l);
|
||||||
|
+ if (!t)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+ } else
|
||||||
|
+ t = NULL;
|
||||||
|
+
|
||||||
|
+ free_and_replace(*p, t);
|
||||||
|
+ return 1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
#if !HAVE_EXPLICIT_BZERO
|
||||||
|
/*
|
||||||
|
* Pointer to memset is volatile so that compiler must de-reference
|
||||||
|
diff --git a/src/basic/string-util.h b/src/basic/string-util.h
|
||||||
|
index c0cc4e78d7..96a9260f93 100644
|
||||||
|
--- a/src/basic/string-util.h
|
||||||
|
+++ b/src/basic/string-util.h
|
||||||
|
@@ -176,6 +176,7 @@ char *strrep(const char *s, unsigned n);
|
||||||
|
int split_pair(const char *s, const char *sep, char **l, char **r);
|
||||||
|
|
||||||
|
int free_and_strdup(char **p, const char *s);
|
||||||
|
+int free_and_strndup(char **p, const char *s, size_t l);
|
||||||
|
|
||||||
|
/* Normal memmem() requires haystack to be nonnull, which is annoying for zero-length buffers */
|
||||||
|
static inline void *memmem_safe(const void *haystack, size_t haystacklen, const void *needle, size_t needlelen) {
|
||||||
|
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
index 381034f5f8..7c8bad2bdd 100644
|
||||||
|
--- a/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
+++ b/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
@@ -4175,20 +4175,19 @@ _public_ int sd_bus_message_peek_type(sd_bus_message *m, char *type, const char
|
||||||
|
|
||||||
|
if (contents) {
|
||||||
|
size_t l;
|
||||||
|
- char *sig;
|
||||||
|
|
||||||
|
r = signature_element_length(c->signature+c->index+1, &l);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
- assert(l >= 1);
|
||||||
|
+ /* signature_element_length does verification internally */
|
||||||
|
|
||||||
|
- sig = strndup(c->signature + c->index + 1, l);
|
||||||
|
- if (!sig)
|
||||||
|
+ assert(l >= 1);
|
||||||
|
+ if (free_and_strndup(&c->peeked_signature,
|
||||||
|
+ c->signature + c->index + 1, l) < 0)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- free(c->peeked_signature);
|
||||||
|
- *contents = c->peeked_signature = sig;
|
||||||
|
+ *contents = c->peeked_signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type)
|
||||||
|
@@ -4201,19 +4200,17 @@ _public_ int sd_bus_message_peek_type(sd_bus_message *m, char *type, const char
|
||||||
|
|
||||||
|
if (contents) {
|
||||||
|
size_t l;
|
||||||
|
- char *sig;
|
||||||
|
|
||||||
|
r = signature_element_length(c->signature+c->index, &l);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
assert(l >= 2);
|
||||||
|
- sig = strndup(c->signature + c->index + 1, l - 2);
|
||||||
|
- if (!sig)
|
||||||
|
+ if (free_and_strndup(&c->peeked_signature,
|
||||||
|
+ c->signature + c->index + 1, l - 2) < 0)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
- free(c->peeked_signature);
|
||||||
|
- *contents = c->peeked_signature = sig;
|
||||||
|
+ *contents = c->peeked_signature;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (type)
|
||||||
|
@@ -4253,9 +4250,8 @@ _public_ int sd_bus_message_peek_type(sd_bus_message *m, char *type, const char
|
||||||
|
if (k > c->item_size)
|
||||||
|
return -EBADMSG;
|
||||||
|
|
||||||
|
- free(c->peeked_signature);
|
||||||
|
- c->peeked_signature = strndup((char*) q + 1, k - 1);
|
||||||
|
- if (!c->peeked_signature)
|
||||||
|
+ if (free_and_strndup(&c->peeked_signature,
|
||||||
|
+ (char*) q + 1, k - 1) < 0)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
if (!signature_is_valid(c->peeked_signature, true))
|
||||||
|
@@ -5085,25 +5081,21 @@ int bus_message_parse_fields(sd_bus_message *m) {
|
||||||
|
|
||||||
|
if (*p == 0) {
|
||||||
|
size_t l;
|
||||||
|
- char *c;
|
||||||
|
|
||||||
|
/* We found the beginning of the signature
|
||||||
|
* string, yay! We require the body to be a
|
||||||
|
* structure, so verify it and then strip the
|
||||||
|
* opening/closing brackets. */
|
||||||
|
|
||||||
|
- l = ((char*) m->footer + m->footer_accessible) - p - (1 + sz);
|
||||||
|
+ l = (char*) m->footer + m->footer_accessible - p - (1 + sz);
|
||||||
|
if (l < 2 ||
|
||||||
|
p[1] != SD_BUS_TYPE_STRUCT_BEGIN ||
|
||||||
|
p[1 + l - 1] != SD_BUS_TYPE_STRUCT_END)
|
||||||
|
return -EBADMSG;
|
||||||
|
|
||||||
|
- c = strndup(p + 1 + 1, l - 2);
|
||||||
|
- if (!c)
|
||||||
|
+ if (free_and_strndup(&m->root_container.signature,
|
||||||
|
+ p + 1 + 1, l - 2) < 0)
|
||||||
|
return -ENOMEM;
|
||||||
|
-
|
||||||
|
- free(m->root_container.signature);
|
||||||
|
- m->root_container.signature = c;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/test/test-string-util.c b/src/test/test-string-util.c
|
||||||
|
index 3e72ce2c0a..43a6b14c34 100644
|
||||||
|
--- a/src/test/test-string-util.c
|
||||||
|
+++ b/src/test/test-string-util.c
|
||||||
|
@@ -5,6 +5,7 @@
|
||||||
|
#include "macro.h"
|
||||||
|
#include "string-util.h"
|
||||||
|
#include "strv.h"
|
||||||
|
+#include "tests.h"
|
||||||
|
#include "utf8.h"
|
||||||
|
|
||||||
|
static void test_string_erase(void) {
|
||||||
|
@@ -30,6 +31,64 @@ static void test_string_erase(void) {
|
||||||
|
assert_se(x[9] == '\0');
|
||||||
|
}
|
||||||
|
|
||||||
|
+static void test_free_and_strndup_one(char **t, const char *src, size_t l, const char *expected, bool change) {
|
||||||
|
+ int r;
|
||||||
|
+
|
||||||
|
+ log_debug("%s: \"%s\", \"%s\", %zd (expect \"%s\", %s)",
|
||||||
|
+ __func__, strnull(*t), strnull(src), l, strnull(expected), yes_no(change));
|
||||||
|
+
|
||||||
|
+ r = free_and_strndup(t, src, l);
|
||||||
|
+ assert_se(streq_ptr(*t, expected));
|
||||||
|
+ assert_se(r == change); /* check that change occurs only when necessary */
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void test_free_and_strndup(void) {
|
||||||
|
+ static const struct test_case {
|
||||||
|
+ const char *src;
|
||||||
|
+ size_t len;
|
||||||
|
+ const char *expected;
|
||||||
|
+ } cases[] = {
|
||||||
|
+ {"abc", 0, ""},
|
||||||
|
+ {"abc", 0, ""},
|
||||||
|
+ {"abc", 1, "a"},
|
||||||
|
+ {"abc", 2, "ab"},
|
||||||
|
+ {"abc", 3, "abc"},
|
||||||
|
+ {"abc", 4, "abc"},
|
||||||
|
+ {"abc", 5, "abc"},
|
||||||
|
+ {"abc", 5, "abc"},
|
||||||
|
+ {"abc", 4, "abc"},
|
||||||
|
+ {"abc", 3, "abc"},
|
||||||
|
+ {"abc", 2, "ab"},
|
||||||
|
+ {"abc", 1, "a"},
|
||||||
|
+ {"abc", 0, ""},
|
||||||
|
+
|
||||||
|
+ {"", 0, ""},
|
||||||
|
+ {"", 1, ""},
|
||||||
|
+ {"", 2, ""},
|
||||||
|
+ {"", 0, ""},
|
||||||
|
+ {"", 1, ""},
|
||||||
|
+ {"", 2, ""},
|
||||||
|
+ {"", 2, ""},
|
||||||
|
+ {"", 1, ""},
|
||||||
|
+ {"", 0, ""},
|
||||||
|
+
|
||||||
|
+ {NULL, 0, NULL},
|
||||||
|
+
|
||||||
|
+ {"foo", 3, "foo"},
|
||||||
|
+ {"foobar", 6, "foobar"},
|
||||||
|
+ };
|
||||||
|
+
|
||||||
|
+ _cleanup_free_ char *t = NULL;
|
||||||
|
+ const char *prev_expected = t;
|
||||||
|
+
|
||||||
|
+ for (unsigned i = 0; i < ELEMENTSOF(cases); i++) {
|
||||||
|
+ test_free_and_strndup_one(&t,
|
||||||
|
+ cases[i].src, cases[i].len, cases[i].expected,
|
||||||
|
+ !streq_ptr(cases[i].expected, prev_expected));
|
||||||
|
+ prev_expected = t;
|
||||||
|
+ }
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static void test_ascii_strcasecmp_n(void) {
|
||||||
|
|
||||||
|
assert_se(ascii_strcasecmp_n("", "", 0) == 0);
|
||||||
|
@@ -497,7 +556,10 @@ static void test_memory_startswith(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
int main(int argc, char *argv[]) {
|
||||||
|
+ test_setup_logging(LOG_DEBUG);
|
||||||
|
+
|
||||||
|
test_string_erase();
|
||||||
|
+ test_free_and_strndup();
|
||||||
|
test_ascii_strcasecmp_n();
|
||||||
|
test_ascii_strcasecmp_nn();
|
||||||
|
test_cellescape();
|
||||||
|
diff --git a/test/fuzz/fuzz-bus-message/crash-b88ad9ecf4aacf4a0caca5b5543953265367f084 b/test/fuzz/fuzz-bus-message/crash-b88ad9ecf4aacf4a0caca5b5543953265367f084
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..52469650b5498a45d5d95bd9d933c989cfb47ca7
|
||||||
|
GIT binary patch
|
||||||
|
literal 32
|
||||||
|
ccmd1#|DTBg0(2Mzp)7_%AVVXuuuM|`09r!?!~g&Q
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
@ -1,671 +0,0 @@
|
|||||||
From 845417e653b42b8f3928c68955bd6416f2fa4509 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Tue, 1 Feb 2022 12:06:59 +0100
|
|
||||||
Subject: [PATCH] tests: rework test macros to not take code as parameters
|
|
||||||
|
|
||||||
C macros are nasty. We use them, but we try to be conservative with
|
|
||||||
them. In particular passing literal, complex code blocks as argument is
|
|
||||||
icky, because of "," handling of C, and also because it's quite a
|
|
||||||
challange for most code highlighters and similar. Hence, let's avoid
|
|
||||||
that. Using macros for genreating functions is OK but if so, the
|
|
||||||
parameters should be simple words, not full code blocks.
|
|
||||||
|
|
||||||
hence, rework DEFINE_CUSTOM_TEST_MAIN() to take a function name instead
|
|
||||||
of code block as argument.
|
|
||||||
|
|
||||||
As side-effect this also fixes a bunch of cases where we might end up
|
|
||||||
returning a negative value from main().
|
|
||||||
|
|
||||||
Some uses of DEFINE_CUSTOM_TEST_MAIN() inserted local variables into the
|
|
||||||
main() functions, these are replaced by static variables, and their
|
|
||||||
destructors by the static destructor logic.
|
|
||||||
|
|
||||||
This doesn't fix any bugs or so, it's just supposed to make the code
|
|
||||||
easier to work with and improve it easthetically.
|
|
||||||
|
|
||||||
Or in other words: let's use macros where it really makes sense, but
|
|
||||||
let's not go overboard with it.
|
|
||||||
|
|
||||||
(And yes, FOREACH_DIRENT() is another one of those macros that take
|
|
||||||
code, and I dislike that too and regret I ever added that.)
|
|
||||||
|
|
||||||
(cherry picked from commit 99839c7ebd4b83a5b0d5982d669cfe10d1252e1f)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/shared/tests.h | 25 +++++++++++++-----
|
|
||||||
src/test/test-barrier.c | 46 +++++++++++++++++----------------
|
|
||||||
src/test/test-cgroup-setup.c | 15 ++++++-----
|
|
||||||
src/test/test-chown-rec.c | 15 ++++++-----
|
|
||||||
src/test/test-format-table.c | 14 +++++-----
|
|
||||||
src/test/test-fs-util.c | 7 ++++-
|
|
||||||
src/test/test-hashmap.c | 16 +++++++++---
|
|
||||||
src/test/test-install-root.c | 14 +++++++---
|
|
||||||
src/test/test-load-fragment.c | 21 ++++++++-------
|
|
||||||
src/test/test-mountpoint-util.c | 30 +++++++++++----------
|
|
||||||
src/test/test-namespace.c | 15 ++++++-----
|
|
||||||
src/test/test-proc-cmdline.c | 15 ++++++-----
|
|
||||||
src/test/test-process-util.c | 7 ++++-
|
|
||||||
src/test/test-sd-hwdb.c | 21 ++++++++-------
|
|
||||||
src/test/test-serialize.c | 16 ++++++------
|
|
||||||
src/test/test-sleep.c | 15 ++++++-----
|
|
||||||
src/test/test-stat-util.c | 7 ++++-
|
|
||||||
src/test/test-time-util.c | 6 +++--
|
|
||||||
src/test/test-unit-file.c | 7 ++++-
|
|
||||||
src/test/test-unit-name.c | 21 ++++++++-------
|
|
||||||
src/test/test-unit-serialize.c | 21 ++++++++-------
|
|
||||||
src/test/test-utf8.c | 7 ++++-
|
|
||||||
22 files changed, 215 insertions(+), 146 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/shared/tests.h b/src/shared/tests.h
|
|
||||||
index 3b93aab498..59448f38f6 100644
|
|
||||||
--- a/src/shared/tests.h
|
|
||||||
+++ b/src/shared/tests.h
|
|
||||||
@@ -6,6 +6,7 @@
|
|
||||||
#include "sd-daemon.h"
|
|
||||||
|
|
||||||
#include "macro.h"
|
|
||||||
+#include "static-destruct.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
static inline bool manager_errno_skip_test(int r) {
|
|
||||||
@@ -109,15 +110,27 @@ static inline int run_test_table(void) {
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
+static inline int test_nop(void) {
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
#define DEFINE_CUSTOM_TEST_MAIN(log_level, intro, outro) \
|
|
||||||
int main(int argc, char *argv[]) { \
|
|
||||||
- int _r = EXIT_SUCCESS; \
|
|
||||||
+ int _r, _q; \
|
|
||||||
test_setup_logging(log_level); \
|
|
||||||
save_argc_argv(argc, argv); \
|
|
||||||
- intro; \
|
|
||||||
- _r = run_test_table(); \
|
|
||||||
- outro; \
|
|
||||||
- return _r; \
|
|
||||||
+ _r = intro(); \
|
|
||||||
+ if (_r == EXIT_SUCCESS) \
|
|
||||||
+ _r = run_test_table(); \
|
|
||||||
+ _q = outro(); \
|
|
||||||
+ static_destruct(); \
|
|
||||||
+ if (_r < 0) \
|
|
||||||
+ return EXIT_FAILURE; \
|
|
||||||
+ if (_r != EXIT_SUCCESS) \
|
|
||||||
+ return _r; \
|
|
||||||
+ if (_q < 0) \
|
|
||||||
+ return EXIT_FAILURE; \
|
|
||||||
+ return _q; \
|
|
||||||
}
|
|
||||||
|
|
||||||
-#define DEFINE_TEST_MAIN(log_level) DEFINE_CUSTOM_TEST_MAIN(log_level, , )
|
|
||||||
+#define DEFINE_TEST_MAIN(log_level) DEFINE_CUSTOM_TEST_MAIN(log_level, test_nop, test_nop)
|
|
||||||
diff --git a/src/test/test-barrier.c b/src/test/test-barrier.c
|
|
||||||
index 8998282afb..b87538806a 100644
|
|
||||||
--- a/src/test/test-barrier.c
|
|
||||||
+++ b/src/test/test-barrier.c
|
|
||||||
@@ -421,25 +421,27 @@ TEST_BARRIER(barrier_pending_exit,
|
|
||||||
}),
|
|
||||||
TEST_BARRIER_WAIT_SUCCESS(pid2));
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_INFO,
|
|
||||||
- ({
|
|
||||||
- if (!slow_tests_enabled())
|
|
||||||
- return log_tests_skipped("slow tests are disabled");
|
|
||||||
-
|
|
||||||
- /*
|
|
||||||
- * This test uses real-time alarms and sleeps to test for CPU races
|
|
||||||
- * explicitly. This is highly fragile if your system is under load. We
|
|
||||||
- * already increased the BASE_TIME value to make the tests more robust,
|
|
||||||
- * but that just makes the test take significantly longer. Given the recent
|
|
||||||
- * issues when running the test in a virtualized environments, limit it
|
|
||||||
- * to bare metal machines only, to minimize false-positives in CIs.
|
|
||||||
- */
|
|
||||||
- int v = detect_virtualization();
|
|
||||||
- if (IN_SET(v, -EPERM, -EACCES))
|
|
||||||
- return log_tests_skipped("Cannot detect virtualization");
|
|
||||||
-
|
|
||||||
- if (v != VIRTUALIZATION_NONE)
|
|
||||||
- return log_tests_skipped("This test requires a baremetal machine");
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (!slow_tests_enabled())
|
|
||||||
+ return log_tests_skipped("slow tests are disabled");
|
|
||||||
+
|
|
||||||
+ /*
|
|
||||||
+ * This test uses real-time alarms and sleeps to test for CPU races explicitly. This is highly
|
|
||||||
+ * fragile if your system is under load. We already increased the BASE_TIME value to make the tests
|
|
||||||
+ * more robust, but that just makes the test take significantly longer. Given the recent issues when
|
|
||||||
+ * running the test in a virtualized environments, limit it to bare metal machines only, to minimize
|
|
||||||
+ * false-positives in CIs.
|
|
||||||
+ */
|
|
||||||
+
|
|
||||||
+ int v = detect_virtualization();
|
|
||||||
+ if (IN_SET(v, -EPERM, -EACCES))
|
|
||||||
+ return log_tests_skipped("Cannot detect virtualization");
|
|
||||||
+
|
|
||||||
+ if (v != VIRTUALIZATION_NONE)
|
|
||||||
+ return log_tests_skipped("This test requires a baremetal machine");
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-cgroup-setup.c b/src/test/test-cgroup-setup.c
|
|
||||||
index 018992f96d..6f93647685 100644
|
|
||||||
--- a/src/test/test-cgroup-setup.c
|
|
||||||
+++ b/src/test/test-cgroup-setup.c
|
|
||||||
@@ -64,10 +64,11 @@ TEST(is_wanted) {
|
|
||||||
test_is_wanted_print_one(false);
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_DEBUG,
|
|
||||||
- ({
|
|
||||||
- if (access("/proc/cmdline", R_OK) < 0 && ERRNO_IS_PRIVILEGE(errno))
|
|
||||||
- return log_tests_skipped("can't read /proc/cmdline");
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (access("/proc/cmdline", R_OK) < 0 && ERRNO_IS_PRIVILEGE(errno))
|
|
||||||
+ return log_tests_skipped("can't read /proc/cmdline");
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-chown-rec.c b/src/test/test-chown-rec.c
|
|
||||||
index 53d44566d5..691cfe767f 100644
|
|
||||||
--- a/src/test/test-chown-rec.c
|
|
||||||
+++ b/src/test/test-chown-rec.c
|
|
||||||
@@ -149,10 +149,11 @@ TEST(chown_recursive) {
|
|
||||||
assert_se(!has_xattr(p));
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_DEBUG,
|
|
||||||
- ({
|
|
||||||
- if (geteuid() != 0)
|
|
||||||
- return log_tests_skipped("not running as root");
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (geteuid() != 0)
|
|
||||||
+ return log_tests_skipped("not running as root");
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-format-table.c b/src/test/test-format-table.c
|
|
||||||
index a3b29ca337..7515a74c12 100644
|
|
||||||
--- a/src/test/test-format-table.c
|
|
||||||
+++ b/src/test/test-format-table.c
|
|
||||||
@@ -529,10 +529,10 @@ TEST(table) {
|
|
||||||
"5min 5min \n"));
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_INFO,
|
|
||||||
- ({
|
|
||||||
- assert_se(setenv("SYSTEMD_COLORS", "0", 1) >= 0);
|
|
||||||
- assert_se(setenv("COLUMNS", "40", 1) >= 0);
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ assert_se(setenv("SYSTEMD_COLORS", "0", 1) >= 0);
|
|
||||||
+ assert_se(setenv("COLUMNS", "40", 1) >= 0);
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
|
|
||||||
index 0e0d91d04e..da5a16b4bc 100644
|
|
||||||
--- a/src/test/test-fs-util.c
|
|
||||||
+++ b/src/test/test-fs-util.c
|
|
||||||
@@ -968,4 +968,9 @@ TEST(open_mkdir_at) {
|
|
||||||
assert_se(subsubdir_fd >= 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, arg_test_dir = argv[1], /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ arg_test_dir = saved_argv[1];
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-hashmap.c b/src/test/test-hashmap.c
|
|
||||||
index cba0c33a8a..4dc155d818 100644
|
|
||||||
--- a/src/test/test-hashmap.c
|
|
||||||
+++ b/src/test/test-hashmap.c
|
|
||||||
@@ -158,7 +158,15 @@ TEST(hashmap_put_strdup_null) {
|
|
||||||
/* This variable allows us to assert that the tests from different compilation units were actually run. */
|
|
||||||
int n_extern_tests_run = 0;
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_INFO,
|
|
||||||
- assert_se(n_extern_tests_run == 0),
|
|
||||||
- assert_se(n_extern_tests_run == 2)); /* Ensure hashmap and ordered_hashmap were tested. */
|
|
||||||
+static int intro(void) {
|
|
||||||
+ assert_se(n_extern_tests_run == 0);
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+static int outro(void) {
|
|
||||||
+ /* Ensure hashmap and ordered_hashmap were tested. */
|
|
||||||
+ assert_se(n_extern_tests_run == 2);
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, outro);
|
|
||||||
diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
|
|
||||||
index ba715e6d7e..f540a832bd 100644
|
|
||||||
--- a/src/test/test-install-root.c
|
|
||||||
+++ b/src/test/test-install-root.c
|
|
||||||
@@ -11,8 +11,11 @@
|
|
||||||
#include "special.h"
|
|
||||||
#include "string-util.h"
|
|
||||||
#include "tests.h"
|
|
||||||
+#include "tmpfile-util.h"
|
|
||||||
|
|
||||||
-static char root[] = "/tmp/rootXXXXXX";
|
|
||||||
+static char *root = NULL;
|
|
||||||
+
|
|
||||||
+STATIC_DESTRUCTOR_REGISTER(root, rm_rf_physical_and_freep);
|
|
||||||
|
|
||||||
TEST(basic_mask_and_enable) {
|
|
||||||
const char *p;
|
|
||||||
@@ -1239,10 +1242,10 @@ TEST(verify_alias) {
|
|
||||||
verify_one(&di_inst_template, "goo.target.conf/plain.service", -EXDEV, NULL);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void setup_root(void) {
|
|
||||||
+static int intro(void) {
|
|
||||||
const char *p;
|
|
||||||
|
|
||||||
- assert_se(mkdtemp(root));
|
|
||||||
+ assert_se(mkdtemp_malloc("/tmp/rootXXXXXX", &root) >= 0);
|
|
||||||
|
|
||||||
p = strjoina(root, "/usr/lib/systemd/system/");
|
|
||||||
assert_se(mkdir_p(p, 0755) >= 0);
|
|
||||||
@@ -1264,6 +1267,9 @@ static void setup_root(void) {
|
|
||||||
|
|
||||||
p = strjoina(root, "/usr/lib/systemd/system/graphical.target");
|
|
||||||
assert_se(write_string_file(p, "# pretty much empty", WRITE_STRING_FILE_CREATE) >= 0);
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, setup_root(), assert_se(rm_rf(root, REMOVE_ROOT|REMOVE_PHYSICAL) >= 0));
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c
|
|
||||||
index e878979a89..2e105df56a 100644
|
|
||||||
--- a/src/test/test-load-fragment.c
|
|
||||||
+++ b/src/test/test-load-fragment.c
|
|
||||||
@@ -30,6 +30,10 @@
|
|
||||||
/* Nontrivial value serves as a placeholder to check that parsing function (didn't) change it */
|
|
||||||
#define CGROUP_LIMIT_DUMMY 3
|
|
||||||
|
|
||||||
+static char *runtime_dir = NULL;
|
|
||||||
+
|
|
||||||
+STATIC_DESTRUCTOR_REGISTER(runtime_dir, rm_rf_physical_and_freep);
|
|
||||||
+
|
|
||||||
TEST_RET(unit_file_get_set) {
|
|
||||||
int r;
|
|
||||||
Hashmap *h;
|
|
||||||
@@ -894,15 +898,12 @@ TEST(unit_is_recursive_template_dependency) {
|
|
||||||
assert_se(unit_is_likely_recursive_template_dependency(u, "foobar@foobar@123.mount", "foobar@%n.mount") == 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_INFO,
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
|
|
||||||
+ return log_tests_skipped("cgroupfs not available");
|
|
||||||
|
|
||||||
- _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
|
|
||||||
- ({
|
|
||||||
- if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
|
|
||||||
- return log_tests_skipped("cgroupfs not available");
|
|
||||||
-
|
|
||||||
- assert_se(runtime_dir = setup_fake_runtime_dir());
|
|
||||||
- }),
|
|
||||||
+ assert_se(runtime_dir = setup_fake_runtime_dir());
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
|
|
||||||
- /* no outro */);
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-mountpoint-util.c b/src/test/test-mountpoint-util.c
|
|
||||||
index 9515d8cf7b..102d2850bf 100644
|
|
||||||
--- a/src/test/test-mountpoint-util.c
|
|
||||||
+++ b/src/test/test-mountpoint-util.c
|
|
||||||
@@ -298,17 +298,19 @@ TEST(fd_is_mount_point) {
|
|
||||||
assert_se(IN_SET(fd_is_mount_point(fd, "root/", 0), -ENOENT, 0));
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_DEBUG,
|
|
||||||
- ({
|
|
||||||
- /* let's move into our own mount namespace with all propagation from the host turned off, so
|
|
||||||
- * that /proc/self/mountinfo is static and constant for the whole time our test runs. */
|
|
||||||
- if (unshare(CLONE_NEWNS) < 0) {
|
|
||||||
- if (!ERRNO_IS_PRIVILEGE(errno))
|
|
||||||
- return log_error_errno(errno, "Failed to detach mount namespace: %m");
|
|
||||||
-
|
|
||||||
- log_notice("Lacking privilege to create separate mount namespace, proceeding in originating mount namespace.");
|
|
||||||
- } else
|
|
||||||
- assert_se(mount(NULL, "/", NULL, MS_PRIVATE | MS_REC, NULL) >= 0);
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ /* let's move into our own mount namespace with all propagation from the host turned off, so
|
|
||||||
+ * that /proc/self/mountinfo is static and constant for the whole time our test runs. */
|
|
||||||
+
|
|
||||||
+ if (unshare(CLONE_NEWNS) < 0) {
|
|
||||||
+ if (!ERRNO_IS_PRIVILEGE(errno))
|
|
||||||
+ return log_error_errno(errno, "Failed to detach mount namespace: %m");
|
|
||||||
+
|
|
||||||
+ log_notice("Lacking privilege to create separate mount namespace, proceeding in originating mount namespace.");
|
|
||||||
+ } else
|
|
||||||
+ assert_se(mount(NULL, "/", NULL, MS_PRIVATE | MS_REC, NULL) >= 0);
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-namespace.c b/src/test/test-namespace.c
|
|
||||||
index 8df5533d6e..f9e34f3bfa 100644
|
|
||||||
--- a/src/test/test-namespace.c
|
|
||||||
+++ b/src/test/test-namespace.c
|
|
||||||
@@ -220,10 +220,11 @@ TEST(protect_kernel_logs) {
|
|
||||||
assert_se(wait_for_terminate_and_check("ns-kernellogs", pid, WAIT_LOG) == EXIT_SUCCESS);
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_INFO,
|
|
||||||
- ({
|
|
||||||
- if (!have_namespaces())
|
|
||||||
- return log_tests_skipped("Don't have namespace support");
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (!have_namespaces())
|
|
||||||
+ return log_tests_skipped("Don't have namespace support");
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-proc-cmdline.c b/src/test/test-proc-cmdline.c
|
|
||||||
index 1c8c9b80b7..064b4d838f 100644
|
|
||||||
--- a/src/test/test-proc-cmdline.c
|
|
||||||
+++ b/src/test/test-proc-cmdline.c
|
|
||||||
@@ -247,10 +247,11 @@ TEST(proc_cmdline_key_startswith) {
|
|
||||||
assert_se(!proc_cmdline_key_startswith("foo-bar", "foo_xx"));
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_INFO,
|
|
||||||
- ({
|
|
||||||
- if (access("/proc/cmdline", R_OK) < 0 && ERRNO_IS_PRIVILEGE(errno))
|
|
||||||
- return log_tests_skipped("can't read /proc/cmdline");
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (access("/proc/cmdline", R_OK) < 0 && ERRNO_IS_PRIVILEGE(errno))
|
|
||||||
+ return log_tests_skipped("can't read /proc/cmdline");
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-process-util.c b/src/test/test-process-util.c
|
|
||||||
index 06a640b1cc..8661934929 100644
|
|
||||||
--- a/src/test/test-process-util.c
|
|
||||||
+++ b/src/test/test-process-util.c
|
|
||||||
@@ -895,4 +895,9 @@ TEST(set_oom_score_adjust) {
|
|
||||||
assert_se(b == a);
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, log_show_color(true), /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ log_show_color(true);
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-sd-hwdb.c b/src/test/test-sd-hwdb.c
|
|
||||||
index 7961c17c4a..88992a6c2b 100644
|
|
||||||
--- a/src/test/test-sd-hwdb.c
|
|
||||||
+++ b/src/test/test-sd-hwdb.c
|
|
||||||
@@ -52,12 +52,15 @@ TEST(basic_enumerate) {
|
|
||||||
assert_se(len1 == len2);
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_DEBUG,
|
|
||||||
- ({
|
|
||||||
- _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
|
|
||||||
- int r = sd_hwdb_new(&hwdb);
|
|
||||||
- if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r))
|
|
||||||
- return log_tests_skipped_errno(r, "cannot open hwdb");
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ _cleanup_(sd_hwdb_unrefp) sd_hwdb *hwdb = NULL;
|
|
||||||
+ int r;
|
|
||||||
+
|
|
||||||
+ r = sd_hwdb_new(&hwdb);
|
|
||||||
+ if (r == -ENOENT || ERRNO_IS_PRIVILEGE(r))
|
|
||||||
+ return log_tests_skipped_errno(r, "cannot open hwdb");
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-serialize.c b/src/test/test-serialize.c
|
|
||||||
index fb04b3e7fa..9aeb6c5920 100644
|
|
||||||
--- a/src/test/test-serialize.c
|
|
||||||
+++ b/src/test/test-serialize.c
|
|
||||||
@@ -10,7 +10,7 @@
|
|
||||||
#include "tests.h"
|
|
||||||
#include "tmpfile-util.h"
|
|
||||||
|
|
||||||
-char long_string[LONG_LINE_MAX+1];
|
|
||||||
+static char long_string[LONG_LINE_MAX+1];
|
|
||||||
|
|
||||||
TEST(serialize_item) {
|
|
||||||
_cleanup_(unlink_tempfilep) char fn[] = "/tmp/test-serialize.XXXXXX";
|
|
||||||
@@ -189,10 +189,10 @@ TEST(serialize_environment) {
|
|
||||||
assert_se(strv_equal(env, env2));
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_INFO,
|
|
||||||
- ({
|
|
||||||
- memset(long_string, 'x', sizeof(long_string)-1);
|
|
||||||
- char_array_0(long_string);
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ memset(long_string, 'x', sizeof(long_string)-1);
|
|
||||||
+ char_array_0(long_string);
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-sleep.c b/src/test/test-sleep.c
|
|
||||||
index 183ad4f7b7..f56e7e0167 100644
|
|
||||||
--- a/src/test/test-sleep.c
|
|
||||||
+++ b/src/test/test-sleep.c
|
|
||||||
@@ -118,10 +118,11 @@ TEST(sleep) {
|
|
||||||
log_info("Suspend-then-Hibernate configured and possible: %s", r >= 0 ? yes_no(r) : strerror_safe(r));
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_DEBUG,
|
|
||||||
- ({
|
|
||||||
- if (getuid() != 0)
|
|
||||||
- log_warning("This program is unlikely to work for unprivileged users");
|
|
||||||
- }),
|
|
||||||
- /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (getuid() != 0)
|
|
||||||
+ log_warning("This program is unlikely to work for unprivileged users");
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-stat-util.c b/src/test/test-stat-util.c
|
|
||||||
index 0f7b3ca3ce..2965ee679f 100644
|
|
||||||
--- a/src/test/test-stat-util.c
|
|
||||||
+++ b/src/test/test-stat-util.c
|
|
||||||
@@ -236,4 +236,9 @@ TEST(dir_is_empty) {
|
|
||||||
assert_se(dir_is_empty_at(AT_FDCWD, empty_dir) > 0);
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, log_show_color(true), /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ log_show_color(true);
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
|
|
||||||
index 4d0131827e..f21d8b7794 100644
|
|
||||||
--- a/src/test/test-time-util.c
|
|
||||||
+++ b/src/test/test-time-util.c
|
|
||||||
@@ -588,7 +588,7 @@ TEST(map_clock_usec) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-static void setup_test(void) {
|
|
||||||
+static int intro(void) {
|
|
||||||
log_info("realtime=" USEC_FMT "\n"
|
|
||||||
"monotonic=" USEC_FMT "\n"
|
|
||||||
"boottime=" USEC_FMT "\n",
|
|
||||||
@@ -603,6 +603,8 @@ static void setup_test(void) {
|
|
||||||
uintmax_t x = TIME_T_MAX;
|
|
||||||
x++;
|
|
||||||
assert_se((time_t) x < 0);
|
|
||||||
+
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, setup_test(), /* no outro */);
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
|
|
||||||
index 0f8c25c218..6c9f245c7e 100644
|
|
||||||
--- a/src/test/test-unit-file.c
|
|
||||||
+++ b/src/test/test-unit-file.c
|
|
||||||
@@ -102,4 +102,9 @@ TEST(runlevel_to_target) {
|
|
||||||
assert_se(streq_ptr(runlevel_to_target("rd.rescue"), SPECIAL_RESCUE_TARGET));
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, log_show_color(true), /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ log_show_color(true);
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c
|
|
||||||
index 6bde9e090d..1f65407e5f 100644
|
|
||||||
--- a/src/test/test-unit-name.c
|
|
||||||
+++ b/src/test/test-unit-name.c
|
|
||||||
@@ -23,6 +23,10 @@
|
|
||||||
#include "user-util.h"
|
|
||||||
#include "util.h"
|
|
||||||
|
|
||||||
+static char *runtime_dir = NULL;
|
|
||||||
+
|
|
||||||
+STATIC_DESTRUCTOR_REGISTER(runtime_dir, rm_rf_physical_and_freep);
|
|
||||||
+
|
|
||||||
static void test_unit_name_is_valid_one(const char *name, UnitNameFlags flags, bool expected) {
|
|
||||||
log_info("%s ( %s%s%s ): %s",
|
|
||||||
name,
|
|
||||||
@@ -844,15 +848,12 @@ TEST(unit_name_prefix_equal) {
|
|
||||||
assert_se(!unit_name_prefix_equal("a", "a"));
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_INFO,
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
|
|
||||||
+ return log_tests_skipped("cgroupfs not available");
|
|
||||||
|
|
||||||
- _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
|
|
||||||
- ({
|
|
||||||
- if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
|
|
||||||
- return log_tests_skipped("cgroupfs not available");
|
|
||||||
-
|
|
||||||
- assert_se(runtime_dir = setup_fake_runtime_dir());
|
|
||||||
- }),
|
|
||||||
+ assert_se(runtime_dir = setup_fake_runtime_dir());
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
|
|
||||||
- /* no outro */);
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-unit-serialize.c b/src/test/test-unit-serialize.c
|
|
||||||
index 899fdc000c..5d39176db2 100644
|
|
||||||
--- a/src/test/test-unit-serialize.c
|
|
||||||
+++ b/src/test/test-unit-serialize.c
|
|
||||||
@@ -4,6 +4,10 @@
|
|
||||||
#include "service.h"
|
|
||||||
#include "tests.h"
|
|
||||||
|
|
||||||
+static char *runtime_dir = NULL;
|
|
||||||
+
|
|
||||||
+STATIC_DESTRUCTOR_REGISTER(runtime_dir, rm_rf_physical_and_freep);
|
|
||||||
+
|
|
||||||
#define EXEC_START_ABSOLUTE \
|
|
||||||
"ExecStart 0 /bin/sh \"sh\" \"-e\" \"-x\" \"-c\" \"systemctl --state=failed --no-legend --no-pager >/failed ; systemctl daemon-reload ; echo OK >/testok\""
|
|
||||||
#define EXEC_START_RELATIVE \
|
|
||||||
@@ -48,15 +52,12 @@ TEST(deserialize_exec_command) {
|
|
||||||
test_deserialize_exec_command_one(m, "control-command", "ExecWhat 11 /a/b c d e", -EINVAL);
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(
|
|
||||||
- LOG_DEBUG,
|
|
||||||
+static int intro(void) {
|
|
||||||
+ if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
|
|
||||||
+ return log_tests_skipped("cgroupfs not available");
|
|
||||||
|
|
||||||
- _cleanup_(rm_rf_physical_and_freep) char *runtime_dir = NULL;
|
|
||||||
- ({
|
|
||||||
- if (enter_cgroup_subroot(NULL) == -ENOMEDIUM)
|
|
||||||
- return log_tests_skipped("cgroupfs not available");
|
|
||||||
-
|
|
||||||
- assert_se(runtime_dir = setup_fake_runtime_dir());
|
|
||||||
- }),
|
|
||||||
+ assert_se(runtime_dir = setup_fake_runtime_dir());
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
|
|
||||||
- /* no outro */);
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
|
|
||||||
index a21fcd6fd2..1b31d1f852 100644
|
|
||||||
--- a/src/test/test-utf8.c
|
|
||||||
+++ b/src/test/test-utf8.c
|
|
||||||
@@ -231,4 +231,9 @@ TEST(utf8_to_utf16) {
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, log_show_color(true), /* no outro */);
|
|
||||||
+static int intro(void) {
|
|
||||||
+ log_show_color(true);
|
|
||||||
+ return EXIT_SUCCESS;
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
@ -1,300 +0,0 @@
|
|||||||
From 0be677fb6663ab6bfd02eae6ad32e7f031cfde0f Mon Sep 17 00:00:00 2001
|
|
||||||
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
|
||||||
Date: Wed, 2 Feb 2022 11:06:41 +0900
|
|
||||||
Subject: [PATCH] test: allow to set NULL to intro or outro
|
|
||||||
|
|
||||||
Addresses https://github.com/systemd/systemd/pull/22338#discussion_r796741033.
|
|
||||||
|
|
||||||
(cherry picked from commit e85fdacc8ad7d91f140a135aaa3fd5372d3fa47c)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/shared/tests.h | 45 +++++++++++++++++----------------
|
|
||||||
src/test/test-barrier.c | 2 +-
|
|
||||||
src/test/test-cgroup-setup.c | 2 +-
|
|
||||||
src/test/test-chown-rec.c | 2 +-
|
|
||||||
src/test/test-format-table.c | 2 +-
|
|
||||||
src/test/test-fs-util.c | 2 +-
|
|
||||||
src/test/test-hashmap.c | 2 +-
|
|
||||||
src/test/test-install-root.c | 2 +-
|
|
||||||
src/test/test-load-fragment.c | 2 +-
|
|
||||||
src/test/test-mountpoint-util.c | 2 +-
|
|
||||||
src/test/test-namespace.c | 2 +-
|
|
||||||
src/test/test-proc-cmdline.c | 2 +-
|
|
||||||
src/test/test-process-util.c | 2 +-
|
|
||||||
src/test/test-sd-hwdb.c | 2 +-
|
|
||||||
src/test/test-serialize.c | 2 +-
|
|
||||||
src/test/test-sleep.c | 2 +-
|
|
||||||
src/test/test-stat-util.c | 2 +-
|
|
||||||
src/test/test-time-util.c | 2 +-
|
|
||||||
src/test/test-unit-file.c | 2 +-
|
|
||||||
src/test/test-unit-name.c | 2 +-
|
|
||||||
src/test/test-unit-serialize.c | 2 +-
|
|
||||||
src/test/test-utf8.c | 2 +-
|
|
||||||
22 files changed, 44 insertions(+), 43 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/shared/tests.h b/src/shared/tests.h
|
|
||||||
index 59448f38f6..ef6acd368e 100644
|
|
||||||
--- a/src/shared/tests.h
|
|
||||||
+++ b/src/shared/tests.h
|
|
||||||
@@ -110,27 +110,28 @@ static inline int run_test_table(void) {
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static inline int test_nop(void) {
|
|
||||||
- return EXIT_SUCCESS;
|
|
||||||
-}
|
|
||||||
-
|
|
||||||
-#define DEFINE_CUSTOM_TEST_MAIN(log_level, intro, outro) \
|
|
||||||
- int main(int argc, char *argv[]) { \
|
|
||||||
- int _r, _q; \
|
|
||||||
- test_setup_logging(log_level); \
|
|
||||||
- save_argc_argv(argc, argv); \
|
|
||||||
- _r = intro(); \
|
|
||||||
- if (_r == EXIT_SUCCESS) \
|
|
||||||
- _r = run_test_table(); \
|
|
||||||
- _q = outro(); \
|
|
||||||
- static_destruct(); \
|
|
||||||
- if (_r < 0) \
|
|
||||||
- return EXIT_FAILURE; \
|
|
||||||
- if (_r != EXIT_SUCCESS) \
|
|
||||||
- return _r; \
|
|
||||||
- if (_q < 0) \
|
|
||||||
- return EXIT_FAILURE; \
|
|
||||||
- return _q; \
|
|
||||||
+#define DEFINE_TEST_MAIN_FULL(log_level, intro, outro) \
|
|
||||||
+ int main(int argc, char *argv[]) { \
|
|
||||||
+ int (*_intro)(void) = intro; \
|
|
||||||
+ int (*_outro)(void) = outro; \
|
|
||||||
+ int _r, _q; \
|
|
||||||
+ test_setup_logging(log_level); \
|
|
||||||
+ save_argc_argv(argc, argv); \
|
|
||||||
+ _r = _intro ? _intro() : EXIT_SUCCESS; \
|
|
||||||
+ if (_r == EXIT_SUCCESS) \
|
|
||||||
+ _r = run_test_table(); \
|
|
||||||
+ _q = _outro ? _outro() : EXIT_SUCCESS; \
|
|
||||||
+ static_destruct(); \
|
|
||||||
+ if (_r < 0) \
|
|
||||||
+ return EXIT_FAILURE; \
|
|
||||||
+ if (_r != EXIT_SUCCESS) \
|
|
||||||
+ return _r; \
|
|
||||||
+ if (_q < 0) \
|
|
||||||
+ return EXIT_FAILURE; \
|
|
||||||
+ return _q; \
|
|
||||||
}
|
|
||||||
|
|
||||||
-#define DEFINE_TEST_MAIN(log_level) DEFINE_CUSTOM_TEST_MAIN(log_level, test_nop, test_nop)
|
|
||||||
+#define DEFINE_TEST_MAIN_WITH_INTRO(log_level, intro) \
|
|
||||||
+ DEFINE_TEST_MAIN_FULL(log_level, intro, NULL)
|
|
||||||
+#define DEFINE_TEST_MAIN(log_level) \
|
|
||||||
+ DEFINE_TEST_MAIN_FULL(log_level, NULL, NULL)
|
|
||||||
diff --git a/src/test/test-barrier.c b/src/test/test-barrier.c
|
|
||||||
index b87538806a..bbd7e2bddb 100644
|
|
||||||
--- a/src/test/test-barrier.c
|
|
||||||
+++ b/src/test/test-barrier.c
|
|
||||||
@@ -444,4 +444,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-cgroup-setup.c b/src/test/test-cgroup-setup.c
|
|
||||||
index 6f93647685..c377ff0a00 100644
|
|
||||||
--- a/src/test/test-cgroup-setup.c
|
|
||||||
+++ b/src/test/test-cgroup-setup.c
|
|
||||||
@@ -71,4 +71,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
|
|
||||||
diff --git a/src/test/test-chown-rec.c b/src/test/test-chown-rec.c
|
|
||||||
index 691cfe767f..97711f58b0 100644
|
|
||||||
--- a/src/test/test-chown-rec.c
|
|
||||||
+++ b/src/test/test-chown-rec.c
|
|
||||||
@@ -156,4 +156,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
|
|
||||||
diff --git a/src/test/test-format-table.c b/src/test/test-format-table.c
|
|
||||||
index 7515a74c12..1b4963d928 100644
|
|
||||||
--- a/src/test/test-format-table.c
|
|
||||||
+++ b/src/test/test-format-table.c
|
|
||||||
@@ -535,4 +535,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-fs-util.c b/src/test/test-fs-util.c
|
|
||||||
index da5a16b4bc..602ce75f98 100644
|
|
||||||
--- a/src/test/test-fs-util.c
|
|
||||||
+++ b/src/test/test-fs-util.c
|
|
||||||
@@ -973,4 +973,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-hashmap.c b/src/test/test-hashmap.c
|
|
||||||
index 4dc155d818..dbf762cc0b 100644
|
|
||||||
--- a/src/test/test-hashmap.c
|
|
||||||
+++ b/src/test/test-hashmap.c
|
|
||||||
@@ -169,4 +169,4 @@ static int outro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, outro);
|
|
||||||
+DEFINE_TEST_MAIN_FULL(LOG_INFO, intro, outro);
|
|
||||||
diff --git a/src/test/test-install-root.c b/src/test/test-install-root.c
|
|
||||||
index f540a832bd..f718689c3a 100644
|
|
||||||
--- a/src/test/test-install-root.c
|
|
||||||
+++ b/src/test/test-install-root.c
|
|
||||||
@@ -1272,4 +1272,4 @@ static int intro(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-load-fragment.c b/src/test/test-load-fragment.c
|
|
||||||
index 2e105df56a..1bd68c7e0a 100644
|
|
||||||
--- a/src/test/test-load-fragment.c
|
|
||||||
+++ b/src/test/test-load-fragment.c
|
|
||||||
@@ -906,4 +906,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-mountpoint-util.c b/src/test/test-mountpoint-util.c
|
|
||||||
index 102d2850bf..4d140c42b6 100644
|
|
||||||
--- a/src/test/test-mountpoint-util.c
|
|
||||||
+++ b/src/test/test-mountpoint-util.c
|
|
||||||
@@ -313,4 +313,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
|
|
||||||
diff --git a/src/test/test-namespace.c b/src/test/test-namespace.c
|
|
||||||
index f9e34f3bfa..7a634adca9 100644
|
|
||||||
--- a/src/test/test-namespace.c
|
|
||||||
+++ b/src/test/test-namespace.c
|
|
||||||
@@ -227,4 +227,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-proc-cmdline.c b/src/test/test-proc-cmdline.c
|
|
||||||
index 064b4d838f..1f43bb3eb0 100644
|
|
||||||
--- a/src/test/test-proc-cmdline.c
|
|
||||||
+++ b/src/test/test-proc-cmdline.c
|
|
||||||
@@ -254,4 +254,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-process-util.c b/src/test/test-process-util.c
|
|
||||||
index 8661934929..7a8adad50c 100644
|
|
||||||
--- a/src/test/test-process-util.c
|
|
||||||
+++ b/src/test/test-process-util.c
|
|
||||||
@@ -900,4 +900,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-sd-hwdb.c b/src/test/test-sd-hwdb.c
|
|
||||||
index 88992a6c2b..4251e2a809 100644
|
|
||||||
--- a/src/test/test-sd-hwdb.c
|
|
||||||
+++ b/src/test/test-sd-hwdb.c
|
|
||||||
@@ -63,4 +63,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
|
|
||||||
diff --git a/src/test/test-serialize.c b/src/test/test-serialize.c
|
|
||||||
index 9aeb6c5920..bcf2e843b0 100644
|
|
||||||
--- a/src/test/test-serialize.c
|
|
||||||
+++ b/src/test/test-serialize.c
|
|
||||||
@@ -195,4 +195,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-sleep.c b/src/test/test-sleep.c
|
|
||||||
index f56e7e0167..5aebcdd935 100644
|
|
||||||
--- a/src/test/test-sleep.c
|
|
||||||
+++ b/src/test/test-sleep.c
|
|
||||||
@@ -125,4 +125,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
|
|
||||||
diff --git a/src/test/test-stat-util.c b/src/test/test-stat-util.c
|
|
||||||
index 2965ee679f..7f633ab259 100644
|
|
||||||
--- a/src/test/test-stat-util.c
|
|
||||||
+++ b/src/test/test-stat-util.c
|
|
||||||
@@ -241,4 +241,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
|
|
||||||
index f21d8b7794..554693834b 100644
|
|
||||||
--- a/src/test/test-time-util.c
|
|
||||||
+++ b/src/test/test-time-util.c
|
|
||||||
@@ -607,4 +607,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-unit-file.c b/src/test/test-unit-file.c
|
|
||||||
index 6c9f245c7e..cc08a4ae4b 100644
|
|
||||||
--- a/src/test/test-unit-file.c
|
|
||||||
+++ b/src/test/test-unit-file.c
|
|
||||||
@@ -107,4 +107,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
|
|
||||||
diff --git a/src/test/test-unit-name.c b/src/test/test-unit-name.c
|
|
||||||
index 1f65407e5f..8cd0e0b4a1 100644
|
|
||||||
--- a/src/test/test-unit-name.c
|
|
||||||
+++ b/src/test/test-unit-name.c
|
|
||||||
@@ -856,4 +856,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
||||||
diff --git a/src/test/test-unit-serialize.c b/src/test/test-unit-serialize.c
|
|
||||||
index 5d39176db2..3ef15f3b1e 100644
|
|
||||||
--- a/src/test/test-unit-serialize.c
|
|
||||||
+++ b/src/test/test-unit-serialize.c
|
|
||||||
@@ -60,4 +60,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_DEBUG, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_DEBUG, intro);
|
|
||||||
diff --git a/src/test/test-utf8.c b/src/test/test-utf8.c
|
|
||||||
index 1b31d1f852..7337b81227 100644
|
|
||||||
--- a/src/test/test-utf8.c
|
|
||||||
+++ b/src/test/test-utf8.c
|
|
||||||
@@ -236,4 +236,4 @@ static int intro(void) {
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
-DEFINE_CUSTOM_TEST_MAIN(LOG_INFO, intro, test_nop);
|
|
||||||
+DEFINE_TEST_MAIN_WITH_INTRO(LOG_INFO, intro);
|
|
34
SOURCES/0027-tests-backport-test_setup_logging.patch
Normal file
34
SOURCES/0027-tests-backport-test_setup_logging.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From ab6a1bdf3519d4344dee4e0225c74fc1198c8a60 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Mon, 15 Oct 2018 10:54:11 +0000
|
||||||
|
Subject: [PATCH] tests: backport test_setup_logging()
|
||||||
|
|
||||||
|
Related: #1635428
|
||||||
|
---
|
||||||
|
src/shared/tests.c | 6 ++++++
|
||||||
|
src/shared/tests.h | 1 +
|
||||||
|
2 files changed, 7 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/shared/tests.c b/src/shared/tests.c
|
||||||
|
index 6b3df0aa07..b10343650f 100644
|
||||||
|
--- a/src/shared/tests.c
|
||||||
|
+++ b/src/shared/tests.c
|
||||||
|
@@ -54,3 +54,9 @@ const char* get_testdata_dir(const char *suffix) {
|
||||||
|
strncpy(testdir + strlen(testdir), suffix, sizeof(testdir) - strlen(testdir) - 1);
|
||||||
|
return testdir;
|
||||||
|
}
|
||||||
|
+
|
||||||
|
+void test_setup_logging(int level) {
|
||||||
|
+ log_set_max_level(level);
|
||||||
|
+ log_parse_environment();
|
||||||
|
+ log_open();
|
||||||
|
+}
|
||||||
|
diff --git a/src/shared/tests.h b/src/shared/tests.h
|
||||||
|
index b88135ed93..cad21169f8 100644
|
||||||
|
--- a/src/shared/tests.h
|
||||||
|
+++ b/src/shared/tests.h
|
||||||
|
@@ -3,3 +3,4 @@
|
||||||
|
|
||||||
|
char* setup_fake_runtime_dir(void);
|
||||||
|
const char* get_testdata_dir(const char *suffix);
|
||||||
|
+void test_setup_logging(int level);
|
@ -0,0 +1,23 @@
|
|||||||
|
From 80d5f0e2057717e9e5588edcabac95b8c238795c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Mon, 15 Oct 2018 10:55:50 +0000
|
||||||
|
Subject: [PATCH] journal: change support URL shown in the catalog entries
|
||||||
|
|
||||||
|
Resolves: #1550548
|
||||||
|
---
|
||||||
|
meson_options.txt | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/meson_options.txt b/meson_options.txt
|
||||||
|
index 16c1f2b2fa..ab2a658713 100644
|
||||||
|
--- a/meson_options.txt
|
||||||
|
+++ b/meson_options.txt
|
||||||
|
@@ -205,7 +205,7 @@ option('ntp-servers', type : 'string',
|
||||||
|
value : 'time1.google.com time2.google.com time3.google.com time4.google.com')
|
||||||
|
option('support-url', type : 'string',
|
||||||
|
description : 'the support URL to show in catalog entries included in systemd',
|
||||||
|
- value : 'https://lists.freedesktop.org/mailman/listinfo/systemd-devel')
|
||||||
|
+ value : 'https://access.redhat.com/support')
|
||||||
|
option('www-target', type : 'string',
|
||||||
|
description : 'the address and dir to upload docs too',
|
||||||
|
value : 'www.freedesktop.org:/srv/www.freedesktop.org/www/software/systemd')
|
@ -1,53 +0,0 @@
|
|||||||
From f00cbfd1cf67f28a92863c74ef64a1aedfacabc6 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michal Sekletar <msekleta@redhat.com>
|
|
||||||
Date: Tue, 21 Sep 2021 15:01:19 +0200
|
|
||||||
Subject: [PATCH] udev/net-setup-link: change the default MACAddressPolicy to
|
|
||||||
"none"
|
|
||||||
|
|
||||||
While stable MAC address for interface types that don't have the
|
|
||||||
address provided by HW could be useful it also breaks LACP based bonds.
|
|
||||||
Let's err on the side of caution and don't change the MAC address from
|
|
||||||
udev.
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #2009237
|
|
||||||
---
|
|
||||||
man/systemd.link.xml | 2 +-
|
|
||||||
network/99-default.link | 2 +-
|
|
||||||
test/fuzz/fuzz-link-parser/99-default.link | 2 +-
|
|
||||||
3 files changed, 3 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemd.link.xml b/man/systemd.link.xml
|
|
||||||
index 45cabbccf7..0033e4c28f 100644
|
|
||||||
--- a/man/systemd.link.xml
|
|
||||||
+++ b/man/systemd.link.xml
|
|
||||||
@@ -961,7 +961,7 @@
|
|
||||||
|
|
||||||
<programlisting>[Link]
|
|
||||||
NamePolicy=kernel database onboard slot path
|
|
||||||
-MACAddressPolicy=persistent</programlisting>
|
|
||||||
+MACAddressPolicy=none</programlisting>
|
|
||||||
</example>
|
|
||||||
|
|
||||||
<example>
|
|
||||||
diff --git a/network/99-default.link b/network/99-default.link
|
|
||||||
index bca660ac28..31aee37e75 100644
|
|
||||||
--- a/network/99-default.link
|
|
||||||
+++ b/network/99-default.link
|
|
||||||
@@ -13,4 +13,4 @@ OriginalName=*
|
|
||||||
[Link]
|
|
||||||
NamePolicy=keep kernel database onboard slot path
|
|
||||||
AlternativeNamesPolicy=database onboard slot path
|
|
||||||
-MACAddressPolicy=persistent
|
|
||||||
+MACAddressPolicy=none
|
|
||||||
diff --git a/test/fuzz/fuzz-link-parser/99-default.link b/test/fuzz/fuzz-link-parser/99-default.link
|
|
||||||
index feb5b1fbb0..3d755898b4 100644
|
|
||||||
--- a/test/fuzz/fuzz-link-parser/99-default.link
|
|
||||||
+++ b/test/fuzz/fuzz-link-parser/99-default.link
|
|
||||||
@@ -9,4 +9,4 @@
|
|
||||||
|
|
||||||
[Link]
|
|
||||||
NamePolicy=keep kernel database onboard slot path
|
|
||||||
-MACAddressPolicy=persistent
|
|
||||||
+MACAddressPolicy=none
|
|
@ -0,0 +1,48 @@
|
|||||||
|
From e0f2dd42fb02aa5767d38714c95ac10fb683ad67 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||||
|
Date: Fri, 11 Mar 2016 17:06:17 -0500
|
||||||
|
Subject: [PATCH] resolved: create /etc/resolv.conf symlink at runtime
|
||||||
|
|
||||||
|
If the symlink doesn't exists, and we are being started, let's
|
||||||
|
create it to provie name resolution.
|
||||||
|
|
||||||
|
If it exists, do nothing. In particular, if it is a broken symlink,
|
||||||
|
we cannot really know if the administator configured it to point to
|
||||||
|
a location used by some service that hasn't started yet, so we
|
||||||
|
don't touch it in that case either.
|
||||||
|
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1313085
|
||||||
|
---
|
||||||
|
src/resolve/resolved.c | 4 ++++
|
||||||
|
tmpfiles.d/etc.conf.m4 | 3 ---
|
||||||
|
2 files changed, 4 insertions(+), 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/resolve/resolved.c b/src/resolve/resolved.c
|
||||||
|
index c01e53e9da..f3d96df458 100644
|
||||||
|
--- a/src/resolve/resolved.c
|
||||||
|
+++ b/src/resolve/resolved.c
|
||||||
|
@@ -53,6 +53,10 @@ int main(int argc, char *argv[]) {
|
||||||
|
/* Drop privileges, but only if we have been started as root. If we are not running as root we assume all
|
||||||
|
* privileges are already dropped. */
|
||||||
|
if (getuid() == 0) {
|
||||||
|
+ r = symlink("../run/systemd/resolve/resolv.conf", "/etc/resolv.conf");
|
||||||
|
+ if (r < 0 && errno != EEXIST)
|
||||||
|
+ log_warning_errno(errno,
|
||||||
|
+ "Could not create /etc/resolv.conf symlink: %m");
|
||||||
|
|
||||||
|
/* Drop privileges, but keep three caps. Note that we drop those too, later on (see below) */
|
||||||
|
r = drop_privileges(uid, gid,
|
||||||
|
diff --git a/tmpfiles.d/etc.conf.m4 b/tmpfiles.d/etc.conf.m4
|
||||||
|
index df8d42101c..928105ea8d 100644
|
||||||
|
--- a/tmpfiles.d/etc.conf.m4
|
||||||
|
+++ b/tmpfiles.d/etc.conf.m4
|
||||||
|
@@ -13,9 +13,6 @@ L+ /etc/mtab - - - - ../proc/self/mounts
|
||||||
|
m4_ifdef(`HAVE_SMACK_RUN_LABEL',
|
||||||
|
t /etc/mtab - - - - security.SMACK64=_
|
||||||
|
)m4_dnl
|
||||||
|
-m4_ifdef(`ENABLE_RESOLVE',
|
||||||
|
-L! /etc/resolv.conf - - - - ../run/systemd/resolve/stub-resolv.conf
|
||||||
|
-)m4_dnl
|
||||||
|
C /etc/nsswitch.conf - - - -
|
||||||
|
m4_ifdef(`HAVE_PAM',
|
||||||
|
C /etc/pam.d - - - -
|
@ -1,56 +0,0 @@
|
|||||||
From 464a8fc4e0b218793105431cc71bf98b0dc97fb5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jacek Migacz <jmigacz@redhat.com>
|
|
||||||
Date: Thu, 3 Feb 2022 23:46:09 +0100
|
|
||||||
Subject: [PATCH] Net naming scheme for RHEL-9.0
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #2052106
|
|
||||||
---
|
|
||||||
man/systemd.net-naming-scheme.xml | 7 +++++++
|
|
||||||
src/shared/netif-naming-scheme.c | 1 +
|
|
||||||
src/shared/netif-naming-scheme.h | 1 +
|
|
||||||
3 files changed, 9 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/man/systemd.net-naming-scheme.xml b/man/systemd.net-naming-scheme.xml
|
|
||||||
index 41408411fc..942ef572ff 100644
|
|
||||||
--- a/man/systemd.net-naming-scheme.xml
|
|
||||||
+++ b/man/systemd.net-naming-scheme.xml
|
|
||||||
@@ -403,6 +403,13 @@
|
|
||||||
</listitem>
|
|
||||||
</varlistentry>
|
|
||||||
|
|
||||||
+ <varlistentry>
|
|
||||||
+ <term><constant>rhel-9.0</constant></term>
|
|
||||||
+
|
|
||||||
+ <listitem><para>Same as naming scheme <constant>v250</constant>.</para>
|
|
||||||
+ </listitem>
|
|
||||||
+ </varlistentry>
|
|
||||||
+
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
<para>Note that <constant>latest</constant> may be used to denote the latest scheme known (to this
|
|
||||||
diff --git a/src/shared/netif-naming-scheme.c b/src/shared/netif-naming-scheme.c
|
|
||||||
index 245466c4cb..44d011a9b7 100644
|
|
||||||
--- a/src/shared/netif-naming-scheme.c
|
|
||||||
+++ b/src/shared/netif-naming-scheme.c
|
|
||||||
@@ -23,6 +23,7 @@ static const NamingScheme naming_schemes[] = {
|
|
||||||
{ "v247", NAMING_V247 },
|
|
||||||
{ "v249", NAMING_V249 },
|
|
||||||
{ "v250", NAMING_V250 },
|
|
||||||
+ { "rhel-9.0", NAMING_RHEL_9_0 },
|
|
||||||
/* … add more schemes here, as the logic to name devices is updated … */
|
|
||||||
|
|
||||||
EXTRA_NET_NAMING_MAP
|
|
||||||
diff --git a/src/shared/netif-naming-scheme.h b/src/shared/netif-naming-scheme.h
|
|
||||||
index 16b304ce10..f765db6ef2 100644
|
|
||||||
--- a/src/shared/netif-naming-scheme.h
|
|
||||||
+++ b/src/shared/netif-naming-scheme.h
|
|
||||||
@@ -47,6 +47,7 @@ typedef enum NamingSchemeFlags {
|
|
||||||
NAMING_V247 = NAMING_V245 | NAMING_BRIDGE_NO_SLOT,
|
|
||||||
NAMING_V249 = NAMING_V247 | NAMING_SLOT_FUNCTION_ID | NAMING_16BIT_INDEX | NAMING_REPLACE_STRICTLY,
|
|
||||||
NAMING_V250 = NAMING_V249 | NAMING_XEN_VIF,
|
|
||||||
+ NAMING_RHEL_9_0 = NAMING_V250,
|
|
||||||
|
|
||||||
EXTRA_NET_NAMING_SCHEMES
|
|
||||||
|
|
@ -0,0 +1,27 @@
|
|||||||
|
From e615b80f3fda82ac7fe628800a9ff2103788bd05 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Tardon <dtardon@redhat.com>
|
||||||
|
Date: Tue, 9 Oct 2018 13:50:55 +0200
|
||||||
|
Subject: [PATCH] dissect-image: use right comparison function
|
||||||
|
|
||||||
|
fstype can be NULL here.
|
||||||
|
|
||||||
|
(cherry picked from commit 4db1879acdc0b853e1a7e6e650b6feb917175fac)
|
||||||
|
|
||||||
|
Resolves: #1602706
|
||||||
|
---
|
||||||
|
src/shared/dissect-image.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/shared/dissect-image.c b/src/shared/dissect-image.c
|
||||||
|
index fa1cf26ee1..e076c8e7db 100644
|
||||||
|
--- a/src/shared/dissect-image.c
|
||||||
|
+++ b/src/shared/dissect-image.c
|
||||||
|
@@ -230,7 +230,7 @@ int dissect_image(
|
||||||
|
.node = TAKE_PTR(n),
|
||||||
|
};
|
||||||
|
|
||||||
|
- m->encrypted = streq(fstype, "crypto_LUKS");
|
||||||
|
+ m->encrypted = streq_ptr(fstype, "crypto_LUKS");
|
||||||
|
|
||||||
|
*ret = TAKE_PTR(m);
|
||||||
|
|
@ -1,40 +0,0 @@
|
|||||||
From 16c4a3c3a826d03f60db83c8d6d809d59e6f38ad Mon Sep 17 00:00:00 2001
|
|
||||||
From: Michal Sekletar <msekleta@redhat.com>
|
|
||||||
Date: Tue, 22 Feb 2022 13:24:11 +0100
|
|
||||||
Subject: [PATCH] core: decrease log level of messages about use of
|
|
||||||
KillMode=none
|
|
||||||
|
|
||||||
RHEL-only
|
|
||||||
|
|
||||||
Resolves: #2013213
|
|
||||||
---
|
|
||||||
src/core/load-fragment.c | 2 +-
|
|
||||||
src/core/unit.c | 2 +-
|
|
||||||
2 files changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/core/load-fragment.c b/src/core/load-fragment.c
|
|
||||||
index 92a52819e2..ad5a0912fc 100644
|
|
||||||
--- a/src/core/load-fragment.c
|
|
||||||
+++ b/src/core/load-fragment.c
|
|
||||||
@@ -816,7 +816,7 @@ int config_parse_kill_mode(
|
|
||||||
}
|
|
||||||
|
|
||||||
if (m == KILL_NONE)
|
|
||||||
- log_syntax(unit, LOG_WARNING, filename, line, 0,
|
|
||||||
+ log_syntax(unit, LOG_DEBUG, filename, line, 0,
|
|
||||||
"Unit configured to use KillMode=none. "
|
|
||||||
"This is unsafe, as it disables systemd's process lifecycle management for the service. "
|
|
||||||
"Please update your service to use a safer KillMode=, such as 'mixed' or 'control-group'. "
|
|
||||||
diff --git a/src/core/unit.c b/src/core/unit.c
|
|
||||||
index d2adb447b6..9cbed08987 100644
|
|
||||||
--- a/src/core/unit.c
|
|
||||||
+++ b/src/core/unit.c
|
|
||||||
@@ -5458,7 +5458,7 @@ int unit_log_leftover_process_start(pid_t pid, int sig, void *userdata) {
|
|
||||||
|
|
||||||
/* During start we print a warning */
|
|
||||||
|
|
||||||
- log_unit_warning(userdata,
|
|
||||||
+ log_unit_debug(userdata,
|
|
||||||
"Found left-over process " PID_FMT " (%s) in control group while starting unit. Ignoring.\n"
|
|
||||||
"This usually indicates unclean termination of a previous run, or service implementation deficiencies.",
|
|
||||||
pid, strna(comm));
|
|
@ -0,0 +1,60 @@
|
|||||||
|
From 8fdca31b41a6470ceda8e0a84f90a1e5ca28aa5c Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Tardon <dtardon@redhat.com>
|
||||||
|
Date: Tue, 9 Oct 2018 17:26:19 +0200
|
||||||
|
Subject: [PATCH] login: avoid leak of name returned by uid_to_name()
|
||||||
|
|
||||||
|
(cherry picked from commit e99742ef3e9d847da04e71fec0eb426063b25068)
|
||||||
|
|
||||||
|
Resolves: #1602706
|
||||||
|
---
|
||||||
|
src/login/logind-dbus.c | 4 +++-
|
||||||
|
src/login/logind-utmp.c | 6 +++---
|
||||||
|
2 files changed, 6 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/login/logind-dbus.c b/src/login/logind-dbus.c
|
||||||
|
index 13298cc855..dca7f4a30f 100644
|
||||||
|
--- a/src/login/logind-dbus.c
|
||||||
|
+++ b/src/login/logind-dbus.c
|
||||||
|
@@ -2155,6 +2155,7 @@ static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userd
|
||||||
|
|
||||||
|
if (cancelled && m->enable_wall_messages) {
|
||||||
|
_cleanup_(sd_bus_creds_unrefp) sd_bus_creds *creds = NULL;
|
||||||
|
+ _cleanup_free_ char *username = NULL;
|
||||||
|
const char *tty = NULL;
|
||||||
|
uid_t uid = 0;
|
||||||
|
int r;
|
||||||
|
@@ -2165,8 +2166,9 @@ static int method_cancel_scheduled_shutdown(sd_bus_message *message, void *userd
|
||||||
|
(void) sd_bus_creds_get_tty(creds, &tty);
|
||||||
|
}
|
||||||
|
|
||||||
|
+ username = uid_to_name(uid);
|
||||||
|
utmp_wall("The system shutdown has been cancelled",
|
||||||
|
- uid_to_name(uid), tty, logind_wall_tty_filter, m);
|
||||||
|
+ username, tty, logind_wall_tty_filter, m);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sd_bus_reply_method_return(message, "b", cancelled);
|
||||||
|
diff --git a/src/login/logind-utmp.c b/src/login/logind-utmp.c
|
||||||
|
index 71ebdfcfb1..8bdd4ab6bf 100644
|
||||||
|
--- a/src/login/logind-utmp.c
|
||||||
|
+++ b/src/login/logind-utmp.c
|
||||||
|
@@ -61,7 +61,7 @@ bool logind_wall_tty_filter(const char *tty, void *userdata) {
|
||||||
|
|
||||||
|
static int warn_wall(Manager *m, usec_t n) {
|
||||||
|
char date[FORMAT_TIMESTAMP_MAX] = {};
|
||||||
|
- _cleanup_free_ char *l = NULL;
|
||||||
|
+ _cleanup_free_ char *l = NULL, *username = NULL;
|
||||||
|
usec_t left;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
@@ -83,8 +83,8 @@ static int warn_wall(Manager *m, usec_t n) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
- utmp_wall(l, uid_to_name(m->scheduled_shutdown_uid),
|
||||||
|
- m->scheduled_shutdown_tty, logind_wall_tty_filter, m);
|
||||||
|
+ username = uid_to_name(m->scheduled_shutdown_uid);
|
||||||
|
+ utmp_wall(l, username, m->scheduled_shutdown_tty, logind_wall_tty_filter, m);
|
||||||
|
|
||||||
|
return 1;
|
||||||
|
}
|
@ -1,34 +0,0 @@
|
|||||||
From be021c2328550a9d5b987cb206eda5df90b45acd Mon Sep 17 00:00:00 2001
|
|
||||||
From: Evgeny Vereshchagin <evvers@ya.ru>
|
|
||||||
Date: Sun, 26 Dec 2021 01:11:00 +0000
|
|
||||||
Subject: [PATCH] ci: replace apt-key with signed-by
|
|
||||||
|
|
||||||
to limit the scope of the key to apt.llvm.org only.
|
|
||||||
|
|
||||||
This is mostly inspired by https://blog.cloudflare.com/dont-use-apt-key/
|
|
||||||
|
|
||||||
(cherry picked from commit bfa6bd1be098adc4710e1819b9cd34d65b3855da)
|
|
||||||
|
|
||||||
Related: #2013213
|
|
||||||
---
|
|
||||||
.github/workflows/build_test.sh | 7 ++++---
|
|
||||||
1 file changed, 4 insertions(+), 3 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/.github/workflows/build_test.sh b/.github/workflows/build_test.sh
|
|
||||||
index 5b18784461..549e59b2c9 100755
|
|
||||||
--- a/.github/workflows/build_test.sh
|
|
||||||
+++ b/.github/workflows/build_test.sh
|
|
||||||
@@ -80,9 +80,10 @@ if [[ "$COMPILER" == clang ]]; then
|
|
||||||
# llvm package if available in such cases to avoid that.
|
|
||||||
if ! apt show --quiet "llvm-$COMPILER_VERSION" &>/dev/null; then
|
|
||||||
# Latest LLVM stack deb packages provided by https://apt.llvm.org/
|
|
||||||
- # Following snippet was borrowed from https://apt.llvm.org/llvm.sh
|
|
||||||
- wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | apt-key add -
|
|
||||||
- add-apt-repository -y "deb http://apt.llvm.org/$RELEASE/ llvm-toolchain-$RELEASE-$COMPILER_VERSION main"
|
|
||||||
+ # Following snippet was partly borrowed from https://apt.llvm.org/llvm.sh
|
|
||||||
+ wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --yes --dearmor --output /usr/share/keyrings/apt-llvm-org.gpg
|
|
||||||
+ printf "deb [signed-by=/usr/share/keyrings/apt-llvm-org.gpg] http://apt.llvm.org/%s/ llvm-toolchain-%s-%s main\n" \
|
|
||||||
+ "$RELEASE" "$RELEASE" "$COMPILER_VERSION" >/etc/apt/sources.list.d/llvm-toolchain.list
|
|
||||||
PACKAGES+=("clang-$COMPILER_VERSION" "lldb-$COMPILER_VERSION" "lld-$COMPILER_VERSION" "clangd-$COMPILER_VERSION")
|
|
||||||
fi
|
|
||||||
elif [[ "$COMPILER" == gcc ]]; then
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From fbe394e9166ddfe847dcac0eab0fcbd3c225dc33 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Tardon <dtardon@redhat.com>
|
||||||
|
Date: Wed, 10 Oct 2018 09:33:28 +0200
|
||||||
|
Subject: [PATCH] firewall-util: add an assert that we're not overwriting a
|
||||||
|
buffer
|
||||||
|
|
||||||
|
... like commit f28501279d2c28fdbb31d8273b723e9bf71d3b98 does for
|
||||||
|
out_interface.
|
||||||
|
|
||||||
|
(cherry picked from commit 0b777d20e9a3868b12372ffce8040d1be063cec7)
|
||||||
|
|
||||||
|
Resolves: #1602706
|
||||||
|
---
|
||||||
|
src/shared/firewall-util.c | 8 +++++++-
|
||||||
|
1 file changed, 7 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/shared/firewall-util.c b/src/shared/firewall-util.c
|
||||||
|
index eb4f5ff616..cba52fb419 100644
|
||||||
|
--- a/src/shared/firewall-util.c
|
||||||
|
+++ b/src/shared/firewall-util.c
|
||||||
|
@@ -50,8 +50,14 @@ static int entry_fill_basics(
|
||||||
|
entry->ip.proto = protocol;
|
||||||
|
|
||||||
|
if (in_interface) {
|
||||||
|
+ size_t l;
|
||||||
|
+
|
||||||
|
+ l = strlen(in_interface);
|
||||||
|
+ assert(l < sizeof entry->ip.iniface);
|
||||||
|
+ assert(l < sizeof entry->ip.iniface_mask);
|
||||||
|
+
|
||||||
|
strcpy(entry->ip.iniface, in_interface);
|
||||||
|
- memset(entry->ip.iniface_mask, 0xFF, strlen(in_interface)+1);
|
||||||
|
+ memset(entry->ip.iniface_mask, 0xFF, l + 1);
|
||||||
|
}
|
||||||
|
if (source) {
|
||||||
|
entry->ip.src = source->in;
|
@ -1,54 +0,0 @@
|
|||||||
From b9b1f92cdc74beb8487c87aa2b5c2806e100d1aa Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Tue, 22 Feb 2022 14:43:40 +0100
|
|
||||||
Subject: [PATCH] ci: fix clang-13 installation
|
|
||||||
|
|
||||||
For some reason Ubuntu Focal repositories now have `llvm-13` virtual
|
|
||||||
package which can't be installed, but successfully fools our check,
|
|
||||||
resulting in no clang/llvm being installed...
|
|
||||||
|
|
||||||
```
|
|
||||||
$ apt show llvm-13
|
|
||||||
Package: llvm-13
|
|
||||||
State: not a real package (virtual)
|
|
||||||
N: Can't select candidate version from package llvm-13 as it has no candidate
|
|
||||||
N: Can't select versions from package 'llvm-13' as it is purely virtual
|
|
||||||
N: No packages found
|
|
||||||
|
|
||||||
$ apt install --dry-run llvm-13
|
|
||||||
Reading package lists... Done
|
|
||||||
Building dependency tree
|
|
||||||
Reading state information... Done
|
|
||||||
Package llvm-13 is not available, but is referred to by another package.
|
|
||||||
This may mean that the package is missing, has been obsoleted, or
|
|
||||||
is only available from another source
|
|
||||||
|
|
||||||
E: Package 'llvm-13' has no installation candidate
|
|
||||||
```
|
|
||||||
|
|
||||||
(cherry picked from commit b491d74064f9d5e17a71b38b014434237169a077)
|
|
||||||
|
|
||||||
Related: #2013213
|
|
||||||
---
|
|
||||||
.github/workflows/build_test.sh | 4 ++--
|
|
||||||
1 file changed, 2 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/.github/workflows/build_test.sh b/.github/workflows/build_test.sh
|
|
||||||
index 549e59b2c9..5a173a18d5 100755
|
|
||||||
--- a/.github/workflows/build_test.sh
|
|
||||||
+++ b/.github/workflows/build_test.sh
|
|
||||||
@@ -78,12 +78,12 @@ if [[ "$COMPILER" == clang ]]; then
|
|
||||||
# ATTOW llvm-11 got into focal-updates, which conflicts with llvm-11
|
|
||||||
# provided by the apt.llvm.org repositories. Let's use the system
|
|
||||||
# llvm package if available in such cases to avoid that.
|
|
||||||
- if ! apt show --quiet "llvm-$COMPILER_VERSION" &>/dev/null; then
|
|
||||||
+ if ! apt install --dry-run "llvm-$COMPILER_VERSION" >/dev/null; then
|
|
||||||
# Latest LLVM stack deb packages provided by https://apt.llvm.org/
|
|
||||||
# Following snippet was partly borrowed from https://apt.llvm.org/llvm.sh
|
|
||||||
wget -O - https://apt.llvm.org/llvm-snapshot.gpg.key | gpg --yes --dearmor --output /usr/share/keyrings/apt-llvm-org.gpg
|
|
||||||
printf "deb [signed-by=/usr/share/keyrings/apt-llvm-org.gpg] http://apt.llvm.org/%s/ llvm-toolchain-%s-%s main\n" \
|
|
||||||
- "$RELEASE" "$RELEASE" "$COMPILER_VERSION" >/etc/apt/sources.list.d/llvm-toolchain.list
|
|
||||||
+ "$RELEASE" "$RELEASE" "$COMPILER_VERSION" >/etc/apt/sources.list.d/llvm-toolchain.list
|
|
||||||
PACKAGES+=("clang-$COMPILER_VERSION" "lldb-$COMPILER_VERSION" "lld-$COMPILER_VERSION" "clangd-$COMPILER_VERSION")
|
|
||||||
fi
|
|
||||||
elif [[ "$COMPILER" == gcc ]]; then
|
|
@ -0,0 +1,29 @@
|
|||||||
|
From ebdb96247433d920b391672e019da9402aabd351 Mon Sep 17 00:00:00 2001
|
||||||
|
From: David Tardon <dtardon@redhat.com>
|
||||||
|
Date: Wed, 10 Oct 2018 13:56:54 +0200
|
||||||
|
Subject: [PATCH] journal-file: avoid calling ftruncate with invalid fd
|
||||||
|
|
||||||
|
This can happen if journal_file_close is called from the failure
|
||||||
|
handling code of journal_file_open before f->fd was established.
|
||||||
|
|
||||||
|
(cherry picked from commit c52368509f48e556be5a4c7a171361b656a25e02)
|
||||||
|
|
||||||
|
Resolves: #1602706
|
||||||
|
---
|
||||||
|
src/journal/journal-file.c | 3 +++
|
||||||
|
1 file changed, 3 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/journal/journal-file.c b/src/journal/journal-file.c
|
||||||
|
index 62e7f68a13..efc3ee052b 100644
|
||||||
|
--- a/src/journal/journal-file.c
|
||||||
|
+++ b/src/journal/journal-file.c
|
||||||
|
@@ -1846,6 +1846,9 @@ static int journal_file_append_entry_internal(
|
||||||
|
void journal_file_post_change(JournalFile *f) {
|
||||||
|
assert(f);
|
||||||
|
|
||||||
|
+ if (f->fd < 0)
|
||||||
|
+ return;
|
||||||
|
+
|
||||||
|
/* inotify() does not receive IN_MODIFY events from file
|
||||||
|
* accesses done via mmap(). After each access we hence
|
||||||
|
* trigger IN_MODIFY by truncating the journal file to its
|
@ -0,0 +1,33 @@
|
|||||||
|
From c232bc1f346a6af9777c216d01f7940898ae1650 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Fri, 19 Oct 2018 12:12:33 +0200
|
||||||
|
Subject: [PATCH] dhcp6: make sure we have enough space for the DHCP6 option
|
||||||
|
header
|
||||||
|
|
||||||
|
Fixes a vulnerability originally discovered by Felix Wilhelm from
|
||||||
|
Google.
|
||||||
|
|
||||||
|
CVE-2018-15688
|
||||||
|
LP: #1795921
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1639067
|
||||||
|
|
||||||
|
(cherry-picked from commit 4dac5eaba4e419b29c97da38a8b1f82336c2c892)
|
||||||
|
|
||||||
|
Resolves: #1643363
|
||||||
|
---
|
||||||
|
src/libsystemd-network/dhcp6-option.c | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/libsystemd-network/dhcp6-option.c b/src/libsystemd-network/dhcp6-option.c
|
||||||
|
index 18196b1257..0979497299 100644
|
||||||
|
--- a/src/libsystemd-network/dhcp6-option.c
|
||||||
|
+++ b/src/libsystemd-network/dhcp6-option.c
|
||||||
|
@@ -103,7 +103,7 @@ int dhcp6_option_append_ia(uint8_t **buf, size_t *buflen, DHCP6IA *ia) {
|
||||||
|
return -EINVAL;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (*buflen < len)
|
||||||
|
+ if (*buflen < offsetof(DHCP6Option, data) + len)
|
||||||
|
return -ENOBUFS;
|
||||||
|
|
||||||
|
ia_hdr = *buf;
|
@ -1,240 +0,0 @@
|
|||||||
From 29cda567564d548cce5867c9d054ebb6cefcdca0 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Thu, 3 Mar 2022 20:30:43 +0100
|
|
||||||
Subject: [PATCH] test: check systemd RPM macros
|
|
||||||
|
|
||||||
Make sure our RPM macros work as intended. Based on the original PR
|
|
||||||
(#16464) by Mikhail Novosyolov.
|
|
||||||
|
|
||||||
Co-authored-by: Mikhail Novosyolov <m.novosyolov@rosalinux.ru>
|
|
||||||
(cherry picked from commit 55c09511e13c6a57ffe64bef4a9d0a00f34d37d9)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
.github/workflows/unit_tests.sh | 1 +
|
|
||||||
.semaphore/semaphore-runner.sh | 2 +-
|
|
||||||
test/meson.build | 16 ++++
|
|
||||||
test/test-rpm-macros.sh | 162 ++++++++++++++++++++++++++++++++
|
|
||||||
4 files changed, 180 insertions(+), 1 deletion(-)
|
|
||||||
create mode 100755 test/test-rpm-macros.sh
|
|
||||||
|
|
||||||
diff --git a/.github/workflows/unit_tests.sh b/.github/workflows/unit_tests.sh
|
|
||||||
index 9c7beb6d19..f41b070e57 100755
|
|
||||||
--- a/.github/workflows/unit_tests.sh
|
|
||||||
+++ b/.github/workflows/unit_tests.sh
|
|
||||||
@@ -20,6 +20,7 @@ ADDITIONAL_DEPS=(
|
|
||||||
perl
|
|
||||||
python3-libevdev
|
|
||||||
python3-pyparsing
|
|
||||||
+ rpm
|
|
||||||
zstd
|
|
||||||
)
|
|
||||||
|
|
||||||
diff --git a/.semaphore/semaphore-runner.sh b/.semaphore/semaphore-runner.sh
|
|
||||||
index d02b449e0e..6ccf271a82 100755
|
|
||||||
--- a/.semaphore/semaphore-runner.sh
|
|
||||||
+++ b/.semaphore/semaphore-runner.sh
|
|
||||||
@@ -42,7 +42,7 @@ apt-get -q --allow-releaseinfo-change update
|
|
||||||
apt-get -y dist-upgrade
|
|
||||||
apt-get install -y eatmydata
|
|
||||||
# The following four are needed as long as these deps are not covered by Debian's own packaging
|
|
||||||
-apt-get install -y fdisk tree libfdisk-dev libp11-kit-dev libssl-dev libpwquality-dev
|
|
||||||
+apt-get install -y fdisk tree libfdisk-dev libp11-kit-dev libssl-dev libpwquality-dev rpm
|
|
||||||
apt-get purge --auto-remove -y unattended-upgrades
|
|
||||||
systemctl unmask systemd-networkd
|
|
||||||
systemctl enable systemd-networkd
|
|
||||||
diff --git a/test/meson.build b/test/meson.build
|
|
||||||
index 8de1043e17..04ae9ebc78 100644
|
|
||||||
--- a/test/meson.build
|
|
||||||
+++ b/test/meson.build
|
|
||||||
@@ -163,6 +163,22 @@ endif
|
|
||||||
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
+rpm = find_program('rpm', required : false)
|
|
||||||
+rpmspec = find_program('rpmspec', required : false)
|
|
||||||
+test_rpm_macros = find_program('test-rpm-macros.sh')
|
|
||||||
+
|
|
||||||
+if rpm.found() and rpmspec.found()
|
|
||||||
+ if want_tests != 'false'
|
|
||||||
+ test('test-rpm-macros',
|
|
||||||
+ test_rpm_macros,
|
|
||||||
+ args : [project_build_root])
|
|
||||||
+ endif
|
|
||||||
+else
|
|
||||||
+ message('Skipping test-rpm-macros since rpm and/or rpmspec are not available')
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
+############################################################
|
|
||||||
+
|
|
||||||
if want_tests != 'false' and dmi_arches.contains(host_machine.cpu_family())
|
|
||||||
udev_dmi_memory_id_test = find_program('udev-dmi-memory-id-test.sh')
|
|
||||||
|
|
||||||
diff --git a/test/test-rpm-macros.sh b/test/test-rpm-macros.sh
|
|
||||||
new file mode 100755
|
|
||||||
index 0000000000..5843b72346
|
|
||||||
--- /dev/null
|
|
||||||
+++ b/test/test-rpm-macros.sh
|
|
||||||
@@ -0,0 +1,162 @@
|
|
||||||
+#!/usr/bin/env bash
|
|
||||||
+# SPDX-License-Identifier: LGPL-2.1-or-later
|
|
||||||
+# This test makes some basic checks that RPM macros work correctly.
|
|
||||||
+# RPM is a simple C program available on different Linux distros, not only RPM-based ones,
|
|
||||||
+# and even BSD systems, so it must not be a problem to require it.
|
|
||||||
+# rpmspec utility is required (so this test will work with RPM 4 but won't work with RPM 5).
|
|
||||||
+set -eu
|
|
||||||
+
|
|
||||||
+BUILD_DIR="${1:?Missing argument: build directory}"
|
|
||||||
+RPM_MACROS_FILE="${BUILD_DIR:?}/src/rpm/macros.systemd"
|
|
||||||
+
|
|
||||||
+if ! command -v rpm >/dev/null || ! command -v rpmspec >/dev/null; then
|
|
||||||
+ echo >&2 "Missing necessary utilities (rpm, rpmspec), can't continue"
|
|
||||||
+ exit 1
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+if [[ ! -f "${RPM_MACROS_FILE:?}" ]]; then
|
|
||||||
+ echo "RPM macros file not found in $RPM_MACROS_FILE!"
|
|
||||||
+ exit 1
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
+at_exit() {
|
|
||||||
+ if [[ -v WORK_DIR && -d "$WORK_DIR" ]]; then
|
|
||||||
+ rm -frv "$WORK_DIR"
|
|
||||||
+ fi
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+trap at_exit EXIT
|
|
||||||
+
|
|
||||||
+WORK_DIR="$(mktemp -d)"
|
|
||||||
+RPM_SPEC="$(mktemp "$WORK_DIR/systemd-test-rpm-macros-XXX.spec")"
|
|
||||||
+TEMP_LOG="$(mktemp "$WORK_DIR/out-XXX.log")"
|
|
||||||
+
|
|
||||||
+die() {
|
|
||||||
+ echo >&2 "${1:?}"
|
|
||||||
+ exit 1
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+mk_mini_spec() {
|
|
||||||
+ cat >"${RPM_SPEC:?}" <<EOF
|
|
||||||
+%{load:$RPM_MACROS_FILE}
|
|
||||||
+Summary: Test systemd RPM macros
|
|
||||||
+Name: systemd-test-rpm-macros
|
|
||||||
+License: LGPLv2+ and MIT and GPLv2+
|
|
||||||
+Version: 1
|
|
||||||
+Release: 1
|
|
||||||
+%description
|
|
||||||
+%{summary}
|
|
||||||
+END_OF_INITIAL_SPEC
|
|
||||||
+EOF
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+echo "=== Test basic loadability ==="
|
|
||||||
+mk_mini_spec
|
|
||||||
+# ensure its loadability (macros will be just loaded and not used for now)
|
|
||||||
+# also check that rpm supports %load
|
|
||||||
+rpmspec --parse "$RPM_SPEC"
|
|
||||||
+
|
|
||||||
+echo "=== Test %systemd_requires ==="
|
|
||||||
+mk_mini_spec
|
|
||||||
+# The idea of tests is the following:
|
|
||||||
+# - make a minimal spec file
|
|
||||||
+# - add macros into its %description section
|
|
||||||
+# - use rpmspec(8) to print spec file with expanded macros
|
|
||||||
+# - check that macros have been expanded as required.
|
|
||||||
+echo "%systemd_requires" >>"$RPM_SPEC"
|
|
||||||
+: >"$TEMP_LOG"
|
|
||||||
+rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG"
|
|
||||||
+for i in post preun postun; do
|
|
||||||
+ echo "== Requires($i) =="
|
|
||||||
+ grep "^Requires($i): systemd$" "$TEMP_LOG"
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
+echo "=== Test %systemd_ordering ==="
|
|
||||||
+mk_mini_spec
|
|
||||||
+echo "%systemd_ordering" >>"$RPM_SPEC"
|
|
||||||
+: >"$TEMP_LOG"
|
|
||||||
+rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG"
|
|
||||||
+for i in post preun postun; do
|
|
||||||
+ echo "== OrderWithRequires($i) =="
|
|
||||||
+ grep "^OrderWithRequires($i): systemd$" "$TEMP_LOG"
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
+echo "=== Test macros requiring an argument without specifying such argument ==="
|
|
||||||
+for i in \
|
|
||||||
+ systemd_post \
|
|
||||||
+ systemd_preun \
|
|
||||||
+ systemd_postun \
|
|
||||||
+ systemd_postun_with_restart \
|
|
||||||
+ systemd_user_preun \
|
|
||||||
+ systemd_user_postun \
|
|
||||||
+ systemd_user_postun_with_restart \
|
|
||||||
+ tmpfiles_create \
|
|
||||||
+ tmpfiles_create_package \
|
|
||||||
+ sysusers_create \
|
|
||||||
+ sysusers_create_package
|
|
||||||
+do
|
|
||||||
+ echo "== Macro: $i =="
|
|
||||||
+ mk_mini_spec
|
|
||||||
+ echo "%${i}" >>"$RPM_SPEC"
|
|
||||||
+ if rpmspec --parse "$RPM_SPEC"; then
|
|
||||||
+ die "Unexpected pass with macro $i (no arguments)"
|
|
||||||
+ fi
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
+echo "=== Test macros requiring two arguments ==="
|
|
||||||
+for i in \
|
|
||||||
+ tmpfiles_create_package \
|
|
||||||
+ sysusers_create_package
|
|
||||||
+do
|
|
||||||
+ echo "== Macro: $i =="
|
|
||||||
+ # Test with an incorrect number of arguments (0, 1, 3)
|
|
||||||
+ for args in "" "arg1" "arg1 arg2 arg3"; do
|
|
||||||
+ mk_mini_spec
|
|
||||||
+ echo "%${i} $args" >>"$RPM_SPEC"
|
|
||||||
+ if rpmspec --parse "$RPM_SPEC"; then
|
|
||||||
+ die "Unexpected pass with macro $i (arguments: $args)"
|
|
||||||
+ fi
|
|
||||||
+ done
|
|
||||||
+
|
|
||||||
+ # Test with the correct number of arguments (2)
|
|
||||||
+ mk_mini_spec
|
|
||||||
+ echo "%${i} arg1 arg2" >>"$RPM_SPEC"
|
|
||||||
+ if ! rpmspec --parse "$RPM_SPEC"; then
|
|
||||||
+ die "Unexpected fail with macro $i (arguments: $args)"
|
|
||||||
+ fi
|
|
||||||
+done
|
|
||||||
+
|
|
||||||
+
|
|
||||||
+# Test that:
|
|
||||||
+# - *_create_package macros do work correctly
|
|
||||||
+# - shell syntax is correct (https://github.com/systemd/systemd/commit/93406fd37)
|
|
||||||
+# - RPM macros, loaded from macros.in, are actually expanded
|
|
||||||
+echo "=== Test %*_create_package macros ==="
|
|
||||||
+for i in sysusers tmpfiles; do
|
|
||||||
+ echo "== Macro: ${i}_create_package =="
|
|
||||||
+
|
|
||||||
+ PKG_DATA_FILE="$(mktemp "$WORK_DIR/pkg-data-XXX")"
|
|
||||||
+ EXP_OUT="$(mktemp "$WORK_DIR/exp-out-XXX.log")"
|
|
||||||
+ CONF_DIR="$(pkg-config --variable="${i}dir" systemd)"
|
|
||||||
+ EXTRA_ARGS=()
|
|
||||||
+
|
|
||||||
+ if [[ "$i" == tmpfiles ]]; then
|
|
||||||
+ EXTRA_ARGS+=("--create")
|
|
||||||
+ fi
|
|
||||||
+
|
|
||||||
+ echo "TEST_DATA" >"$PKG_DATA_FILE"
|
|
||||||
+ mk_mini_spec
|
|
||||||
+ echo "%${i}_create_package TEST_NAME ${PKG_DATA_FILE}" >>"$RPM_SPEC"
|
|
||||||
+
|
|
||||||
+ cat >"$EXP_OUT" <<EOF
|
|
||||||
+systemd-$i --replace=$CONF_DIR/TEST_NAME.conf ${EXTRA_ARGS[*]:+${EXTRA_ARGS[@]} }- <<SYSTEMD_INLINE_EOF || :
|
|
||||||
+TEST_DATA
|
|
||||||
+SYSTEMD_INLINE_EOF
|
|
||||||
+EOF
|
|
||||||
+
|
|
||||||
+ : >"$TEMP_LOG"
|
|
||||||
+ rpmspec --parse "$RPM_SPEC" | tee "$TEMP_LOG"
|
|
||||||
+ diff "$EXP_OUT" <(grep -A1 -B1 '^TEST_DATA$' "$TEMP_LOG")
|
|
||||||
+
|
|
||||||
+ rm -f "$PKG_DATA_FILE"
|
|
||||||
+done
|
|
@ -0,0 +1,133 @@
|
|||||||
|
From 35a23324975ac6ee0bbd3408394f992007b7a439 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Tue, 13 Nov 2018 11:59:06 +0100
|
||||||
|
Subject: [PATCH] =?UTF-8?q?core:=20rename=20queued=5Fmessage=20=E2=86=92?=
|
||||||
|
=?UTF-8?q?=20pending=5Freload=5Fmessage?=
|
||||||
|
MIME-Version: 1.0
|
||||||
|
Content-Type: text/plain; charset=UTF-8
|
||||||
|
Content-Transfer-Encoding: 8bit
|
||||||
|
|
||||||
|
This field is only used for pending Reload() replies, hence let's rename
|
||||||
|
it to be more descriptive and precise.
|
||||||
|
|
||||||
|
No change in behaviour.
|
||||||
|
|
||||||
|
(cherry picked from commit 209de5256b7ba8600c3e73a85a43b86708998d65)
|
||||||
|
|
||||||
|
Resolves: #1647359
|
||||||
|
---
|
||||||
|
src/core/dbus-manager.c | 4 ++--
|
||||||
|
src/core/dbus.c | 12 ++++++------
|
||||||
|
src/core/dbus.h | 2 +-
|
||||||
|
src/core/manager.c | 6 +++---
|
||||||
|
src/core/manager.h | 2 +-
|
||||||
|
5 files changed, 13 insertions(+), 13 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/dbus-manager.c b/src/core/dbus-manager.c
|
||||||
|
index 4ed68af1e0..d39c9b28c4 100644
|
||||||
|
--- a/src/core/dbus-manager.c
|
||||||
|
+++ b/src/core/dbus-manager.c
|
||||||
|
@@ -1329,8 +1329,8 @@ static int method_reload(sd_bus_message *message, void *userdata, sd_bus_error *
|
||||||
|
* is finished. That way the caller knows when the reload
|
||||||
|
* finished. */
|
||||||
|
|
||||||
|
- assert(!m->queued_message);
|
||||||
|
- r = sd_bus_message_new_method_return(message, &m->queued_message);
|
||||||
|
+ assert(!m->pending_reload_message);
|
||||||
|
+ r = sd_bus_message_new_method_return(message, &m->pending_reload_message);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
diff --git a/src/core/dbus.c b/src/core/dbus.c
|
||||||
|
index bf5917696e..256a410215 100644
|
||||||
|
--- a/src/core/dbus.c
|
||||||
|
+++ b/src/core/dbus.c
|
||||||
|
@@ -47,23 +47,23 @@
|
||||||
|
|
||||||
|
static void destroy_bus(Manager *m, sd_bus **bus);
|
||||||
|
|
||||||
|
-int bus_send_queued_message(Manager *m) {
|
||||||
|
+int bus_send_pending_reload_message(Manager *m) {
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(m);
|
||||||
|
|
||||||
|
- if (!m->queued_message)
|
||||||
|
+ if (!m->pending_reload_message)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* If we cannot get rid of this message we won't dispatch any
|
||||||
|
* D-Bus messages, so that we won't end up wanting to queue
|
||||||
|
* another message. */
|
||||||
|
|
||||||
|
- r = sd_bus_send(NULL, m->queued_message, NULL);
|
||||||
|
+ r = sd_bus_send(NULL, m->pending_reload_message, NULL);
|
||||||
|
if (r < 0)
|
||||||
|
log_warning_errno(r, "Failed to send queued message: %m");
|
||||||
|
|
||||||
|
- m->queued_message = sd_bus_message_unref(m->queued_message);
|
||||||
|
+ m->pending_reload_message = sd_bus_message_unref(m->pending_reload_message);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
@@ -1079,8 +1079,8 @@ static void destroy_bus(Manager *m, sd_bus **bus) {
|
||||||
|
u->bus_track = sd_bus_track_unref(u->bus_track);
|
||||||
|
|
||||||
|
/* Get rid of queued message on this bus */
|
||||||
|
- if (m->queued_message && sd_bus_message_get_bus(m->queued_message) == *bus)
|
||||||
|
- m->queued_message = sd_bus_message_unref(m->queued_message);
|
||||||
|
+ if (m->pending_reload_message && sd_bus_message_get_bus(m->pending_reload_message) == *bus)
|
||||||
|
+ m->pending_reload_message = sd_bus_message_unref(m->pending_reload_message);
|
||||||
|
|
||||||
|
/* Possibly flush unwritten data, but only if we are
|
||||||
|
* unprivileged, since we don't want to sync here */
|
||||||
|
diff --git a/src/core/dbus.h b/src/core/dbus.h
|
||||||
|
index 382a96da7d..f1c0fa86c0 100644
|
||||||
|
--- a/src/core/dbus.h
|
||||||
|
+++ b/src/core/dbus.h
|
||||||
|
@@ -5,7 +5,7 @@
|
||||||
|
|
||||||
|
#include "manager.h"
|
||||||
|
|
||||||
|
-int bus_send_queued_message(Manager *m);
|
||||||
|
+int bus_send_pending_reload_message(Manager *m);
|
||||||
|
|
||||||
|
int bus_init_private(Manager *m);
|
||||||
|
int bus_init_api(Manager *m);
|
||||||
|
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||||
|
index 930df4e23a..a24bfcacdf 100644
|
||||||
|
--- a/src/core/manager.c
|
||||||
|
+++ b/src/core/manager.c
|
||||||
|
@@ -2078,7 +2078,7 @@ static unsigned manager_dispatch_dbus_queue(Manager *m) {
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Anything to do at all? */
|
||||||
|
- if (!m->dbus_unit_queue && !m->dbus_job_queue && !m->send_reloading_done && !m->queued_message)
|
||||||
|
+ if (!m->dbus_unit_queue && !m->dbus_job_queue && !m->send_reloading_done && !m->pending_reload_message)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
/* Do we have overly many messages queued at the moment? If so, let's not enqueue more on top, let's sit this
|
||||||
|
@@ -2123,8 +2123,8 @@ static unsigned manager_dispatch_dbus_queue(Manager *m) {
|
||||||
|
n++, budget--;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (budget > 0 && m->queued_message) {
|
||||||
|
- bus_send_queued_message(m);
|
||||||
|
+ if (budget > 0 && m->pending_reload_message) {
|
||||||
|
+ bus_send_pending_reload_message(m);
|
||||||
|
n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
diff --git a/src/core/manager.h b/src/core/manager.h
|
||||||
|
index ea5d425030..c7f4d66ecd 100644
|
||||||
|
--- a/src/core/manager.h
|
||||||
|
+++ b/src/core/manager.h
|
||||||
|
@@ -215,7 +215,7 @@ struct Manager {
|
||||||
|
|
||||||
|
/* This is used during reloading: before the reload we queue
|
||||||
|
* the reply message here, and afterwards we send it */
|
||||||
|
- sd_bus_message *queued_message;
|
||||||
|
+ sd_bus_message *pending_reload_message;
|
||||||
|
|
||||||
|
Hashmap *watch_bus; /* D-Bus names => Unit object n:1 */
|
||||||
|
|
@ -1,161 +0,0 @@
|
|||||||
From 7cc55d22394b8583b637e7e4b8baa00eb8f0dc49 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Luca Boccassi <luca.boccassi@microsoft.com>
|
|
||||||
Date: Wed, 12 Jan 2022 22:38:22 +0000
|
|
||||||
Subject: [PATCH] test: do not assume x86-64 arch in TEST-58-REPART
|
|
||||||
|
|
||||||
(cherry picked from commit 8e65d93e85f06e3f28b0b7a6e33b041ddf119917)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
test/units/testsuite-58.sh | 76 ++++++++++++++++++++++++++++++++------
|
|
||||||
1 file changed, 65 insertions(+), 11 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh
|
|
||||||
index 78c25051a2..4b3c984c84 100755
|
|
||||||
--- a/test/units/testsuite-58.sh
|
|
||||||
+++ b/test/units/testsuite-58.sh
|
|
||||||
@@ -11,6 +11,60 @@ fi
|
|
||||||
export SYSTEMD_LOG_LEVEL=debug
|
|
||||||
export PAGER=cat
|
|
||||||
|
|
||||||
+machine="$(uname -m)"
|
|
||||||
+if [ "${machine}" = "x86_64" ]; then
|
|
||||||
+ root_guid=4f68bce3-e8cd-4db1-96e7-fbcaf984b709
|
|
||||||
+ root_uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0
|
|
||||||
+ usr_guid=8484680c-9521-48c6-9c11-b0720656f69e
|
|
||||||
+ usr_uuid=7E3369DD-D653-4513-ADF5-B993A9F20C16
|
|
||||||
+ architecture="x86-64"
|
|
||||||
+elif [ "${machine}" = "i386" ] || [ "${machine}" = "i686" ] || [ "${machine}" = "x86" ]; then
|
|
||||||
+ root_guid=44479540-f297-41b2-9af7-d131d5f0458a
|
|
||||||
+ root_uuid=02b4253f-29a4-404e-8972-1669d3b03c87
|
|
||||||
+ usr_guid=75250d76-8cc6-458e-bd66-bd47cc81a812
|
|
||||||
+ usr_uuid=7b42ffb0-b0e1-4395-b20b-c78f4a571648
|
|
||||||
+ architecture="x86"
|
|
||||||
+elif [ "${machine}" = "aarch64" ] || [ "${machine}" = "aarch64_be" ] || [ "${machine}" = "armv8b" ] || [ "${machine}" = "armv8l" ]; then
|
|
||||||
+ root_guid=b921b045-1df0-41c3-af44-4c6f280d3fae
|
|
||||||
+ root_uuid=055d0227-53a6-4033-85c3-9a5973eff483
|
|
||||||
+ usr_guid=b0e01050-ee5f-4390-949a-9101b17104e9
|
|
||||||
+ usr_uuid=fce3c75e-d6a4-44c0-87f0-4c105183fb1f
|
|
||||||
+ architecture="arm64"
|
|
||||||
+elif [ "${machine}" = "arm" ]; then
|
|
||||||
+ root_guid=69dad710-2ce4-4e3c-b16c-21a1d49abed3
|
|
||||||
+ root_uuid=567da89e-8de2-4499-8d10-18f212dff034
|
|
||||||
+ usr_guid=7d0359a3-02b3-4f0a-865c-654403e70625
|
|
||||||
+ usr_uuid=71e93dc2-5073-42cb-8a84-a354e64d8966
|
|
||||||
+ architecture="arm"
|
|
||||||
+elif [ "${machine}" = "loongarch64" ]; then
|
|
||||||
+ root_guid=77055800-792c-4f94-b39a-98c91b762bb6
|
|
||||||
+ root_uuid=d8efc2d2-0133-41e4-bdcb-3b9f4cfddde8
|
|
||||||
+ usr_guid=e611c702-575c-4cbe-9a46-434fa0bf7e3f
|
|
||||||
+ usr_uuid=031ffa75-00bb-49b6-a70d-911d2d82a5b7
|
|
||||||
+ architecture="loongarch64"
|
|
||||||
+elif [ "${machine}" = "ia64" ]; then
|
|
||||||
+ root_guid=993d8d3d-f80e-4225-855a-9daf8ed7ea97
|
|
||||||
+ root_uuid=dcf33449-0896-4ea9-bc24-7d58aeef522d
|
|
||||||
+ usr_guid=4301d2a6-4e3b-4b2a-bb94-9e0b2c4225ea
|
|
||||||
+ usr_uuid=bc2bcce7-80d6-449a-85cc-637424ce5241
|
|
||||||
+ architecture="ia64"
|
|
||||||
+elif [ "${machine}" = "s390x" ]; then
|
|
||||||
+ root_guid=5eead9a9-fe09-4a1e-a1d7-520d00531306
|
|
||||||
+ root_uuid=7ebe0c85-e27e-48ec-b164-f4807606232e
|
|
||||||
+ usr_guid=8a4f5770-50aa-4ed3-874a-99b710db6fea
|
|
||||||
+ usr_uuid=51171d30-35cf-4a49-b8b5-9478b9b796a5
|
|
||||||
+ architecture="s390x"
|
|
||||||
+elif [ "${machine}" = "ppc64le" ]; then
|
|
||||||
+ root_guid=c31c45e6-3f39-412e-80fb-4809c4980599
|
|
||||||
+ root_uuid=061e67a1-092f-482f-8150-b525d50d6654
|
|
||||||
+ usr_guid=15bb03af-77e7-4d4a-b12b-c0d084f7491c
|
|
||||||
+ usr_uuid=c0d0823b-8040-4c7c-a629-026248e297fb
|
|
||||||
+ architecture="ppc64-le"
|
|
||||||
+else
|
|
||||||
+ echo "Unexpected uname -m: ${machine} in testsuite-58.sh, please fix me"
|
|
||||||
+ exit 1
|
|
||||||
+fi
|
|
||||||
+
|
|
||||||
rm -f /var/tmp/testsuite-58.img /var/tmp/testsuite-58.2.img /tmp/testsuite-58.dump
|
|
||||||
mkdir -p /tmp/testsuite-58-defs/
|
|
||||||
|
|
||||||
@@ -25,7 +79,7 @@ EOF
|
|
||||||
|
|
||||||
cat >/tmp/testsuite-58-defs/usr.conf <<EOF
|
|
||||||
[Partition]
|
|
||||||
-Type=usr
|
|
||||||
+Type=usr-${architecture}
|
|
||||||
SizeMinBytes=10M
|
|
||||||
Format=ext4
|
|
||||||
ReadOnly=yes
|
|
||||||
@@ -33,7 +87,7 @@ EOF
|
|
||||||
|
|
||||||
cat >/tmp/testsuite-58-defs/root.conf <<EOF
|
|
||||||
[Partition]
|
|
||||||
-Type=root
|
|
||||||
+Type=root-${architecture}
|
|
||||||
SizeMinBytes=10M
|
|
||||||
Format=ext4
|
|
||||||
MakeDirectories=/usr /efi
|
|
||||||
@@ -47,9 +101,9 @@ systemd-repart --definitions=/tmp/testsuite-58-defs/ \
|
|
||||||
|
|
||||||
sfdisk --dump /var/tmp/testsuite-58.img | tee /tmp/testsuite-58.dump
|
|
||||||
|
|
||||||
-grep -qxF '/var/tmp/testsuite-58.img1 : start= 2048, size= 20480, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=39107B09-615D-48FB-BA37-C663885FCE67, name="esp"' /tmp/testsuite-58.dump
|
|
||||||
-grep -qxF '/var/tmp/testsuite-58.img2 : start= 22528, size= 20480, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0, name="root-x86-64", attrs="GUID:59"' /tmp/testsuite-58.dump
|
|
||||||
-grep -qxF '/var/tmp/testsuite-58.img3 : start= 43008, size= 20480, type=8484680C-9521-48C6-9C11-B0720656F69E, uuid=7E3369DD-D653-4513-ADF5-B993A9F20C16, name="usr-x86-64", attrs="GUID:60"' /tmp/testsuite-58.dump
|
|
||||||
+grep -qixF "/var/tmp/testsuite-58.img1 : start= 2048, size= 20480, type=C12A7328-F81F-11D2-BA4B-00A0C93EC93B, uuid=39107B09-615D-48FB-BA37-C663885FCE67, name=\"esp\"" /tmp/testsuite-58.dump
|
|
||||||
+grep -qixF "/var/tmp/testsuite-58.img2 : start= 22528, size= 20480, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" /tmp/testsuite-58.dump
|
|
||||||
+grep -qixF "/var/tmp/testsuite-58.img3 : start= 43008, size= 20480, type=${usr_guid}, uuid=${usr_uuid}, name=\"usr-${architecture}\", attrs=\"GUID:60\"" /tmp/testsuite-58.dump
|
|
||||||
|
|
||||||
# Second part, duplicate it with CopyBlocks=auto
|
|
||||||
|
|
||||||
@@ -61,14 +115,14 @@ EOF
|
|
||||||
|
|
||||||
cat >/tmp/testsuite-58-defs/usr.conf <<EOF
|
|
||||||
[Partition]
|
|
||||||
-Type=usr
|
|
||||||
+Type=usr-${architecture}
|
|
||||||
ReadOnly=yes
|
|
||||||
CopyBlocks=auto
|
|
||||||
EOF
|
|
||||||
|
|
||||||
cat >/tmp/testsuite-58-defs/root.conf <<EOF
|
|
||||||
[Partition]
|
|
||||||
-Type=root
|
|
||||||
+Type=root-${architecture}
|
|
||||||
CopyBlocks=auto
|
|
||||||
EOF
|
|
||||||
|
|
||||||
@@ -91,7 +145,7 @@ mkdir -p /tmp/testsuite-58.3-defs/
|
|
||||||
|
|
||||||
cat >/tmp/testsuite-58.3-defs/root.conf <<EOF
|
|
||||||
[Partition]
|
|
||||||
-Type=root
|
|
||||||
+Type=root-${architecture}
|
|
||||||
EOF
|
|
||||||
|
|
||||||
truncate -s 10g /var/tmp/testsuite-58.3.img
|
|
||||||
@@ -111,7 +165,7 @@ sfdisk --dump /var/tmp/testsuite-58.3.img | tee /tmp/testsuite-58.3.dump
|
|
||||||
|
|
||||||
grep -qF '/var/tmp/testsuite-58.3.img1 : start= 2048, size= 69044,' /tmp/testsuite-58.3.dump
|
|
||||||
grep -qF '/var/tmp/testsuite-58.3.img2 : start= 71092, size= 3591848,' /tmp/testsuite-58.3.dump
|
|
||||||
-grep -qxF '/var/tmp/testsuite-58.3.img3 : start= 3662944, size= 17308536, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709, uuid=60F33797-1D71-4DCB-AA6F-20564F036CD0, name="root-x86-64", attrs="GUID:59"' /tmp/testsuite-58.3.dump
|
|
||||||
+grep -qixF "/var/tmp/testsuite-58.3.img3 : start= 3662944, size= 17308536, type=${root_guid}, uuid=${root_uuid}, name=\"root-${architecture}\", attrs=\"GUID:59\"" /tmp/testsuite-58.3.dump
|
|
||||||
|
|
||||||
rm /var/tmp/testsuite-58.3.img /tmp/testsuite-58.3.dump
|
|
||||||
rm -r /tmp/testsuite-58.3-defs/
|
|
||||||
@@ -120,7 +174,7 @@ rm -r /tmp/testsuite-58.3-defs/
|
|
||||||
mkdir -p /tmp/testsuite-58-issue-21817-defs/
|
|
||||||
truncate -s 100m /tmp/testsuite-58-issue-21817.img
|
|
||||||
LOOP=$(losetup -P --show -f /tmp/testsuite-58-issue-21817.img)
|
|
||||||
-printf 'size=50M,type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709\n,\n' | sfdisk -X gpt /tmp/testsuite-58-issue-21817.img
|
|
||||||
+printf 'size=50M,type=%s\n,\n' "${root_guid}" | sfdisk -X gpt /tmp/testsuite-58-issue-21817.img
|
|
||||||
cat >/tmp/testsuite-58-issue-21817-defs/test.conf <<EOF
|
|
||||||
[Partition]
|
|
||||||
Type=root
|
|
||||||
@@ -129,7 +183,7 @@ systemd-repart --pretty=yes --definitions /tmp/testsuite-58-issue-21817-defs/ "$
|
|
||||||
sfdisk --dump "$LOOP" | tee /tmp/testsuite-58-issue-21817.dump
|
|
||||||
losetup -d "$LOOP"
|
|
||||||
|
|
||||||
-grep -qF 'p1 : start= 2048, size= 102400, type=4F68BCE3-E8CD-4DB1-96E7-FBCAF984B709,' /tmp/testsuite-58-issue-21817.dump
|
|
||||||
+grep -qiF "p1 : start= 2048, size= 102400, type=${root_guid}," /tmp/testsuite-58-issue-21817.dump
|
|
||||||
grep -qF 'p2 : start= 104448, size= 100319,' /tmp/testsuite-58-issue-21817.dump
|
|
||||||
|
|
||||||
rm /tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump
|
|
@ -0,0 +1,36 @@
|
|||||||
|
From 52a474cf15bf2b0edb449750eb63eb8cdb9a3780 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Tue, 13 Nov 2018 12:00:42 +0100
|
||||||
|
Subject: [PATCH] core: when we can't send the pending reload message, say we
|
||||||
|
ignore it in the warning we log
|
||||||
|
|
||||||
|
No change in behaviour, just better wording.
|
||||||
|
|
||||||
|
(cherry picked from commit 4b66bccab004221b903b43b4c224442bfa3e9ac7)
|
||||||
|
|
||||||
|
Resolves: #1647359
|
||||||
|
---
|
||||||
|
src/core/dbus.c | 7 +++----
|
||||||
|
1 file changed, 3 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/dbus.c b/src/core/dbus.c
|
||||||
|
index 256a410215..346a440c5d 100644
|
||||||
|
--- a/src/core/dbus.c
|
||||||
|
+++ b/src/core/dbus.c
|
||||||
|
@@ -55,13 +55,12 @@ int bus_send_pending_reload_message(Manager *m) {
|
||||||
|
if (!m->pending_reload_message)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- /* If we cannot get rid of this message we won't dispatch any
|
||||||
|
- * D-Bus messages, so that we won't end up wanting to queue
|
||||||
|
- * another message. */
|
||||||
|
+ /* If we cannot get rid of this message we won't dispatch any D-Bus messages, so that we won't end up wanting
|
||||||
|
+ * to queue another message. */
|
||||||
|
|
||||||
|
r = sd_bus_send(NULL, m->pending_reload_message, NULL);
|
||||||
|
if (r < 0)
|
||||||
|
- log_warning_errno(r, "Failed to send queued message: %m");
|
||||||
|
+ log_warning_errno(r, "Failed to send queued message, ignoring: %m");
|
||||||
|
|
||||||
|
m->pending_reload_message = sd_bus_message_unref(m->pending_reload_message);
|
||||||
|
|
@ -1,68 +0,0 @@
|
|||||||
From 9a98a3b83e9e974d8d1cdc31e2286a862cc548be Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Mon, 7 Feb 2022 14:35:40 +0100
|
|
||||||
Subject: [PATCH] tests: add repart tests for block devices with 1024, 2048,
|
|
||||||
4096 byte sector sizes
|
|
||||||
|
|
||||||
let's make sure repart works with 4K drives and exotic sector sizes.
|
|
||||||
|
|
||||||
(cherry picked from commit 2cd341afb96486bd4afcdba23f02a27631c5b8db)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
test/units/testsuite-58.sh | 42 ++++++++++++++++++++++++++++++++++++++
|
|
||||||
1 file changed, 42 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh
|
|
||||||
index 4b3c984c84..7aed965fb4 100755
|
|
||||||
--- a/test/units/testsuite-58.sh
|
|
||||||
+++ b/test/units/testsuite-58.sh
|
|
||||||
@@ -189,6 +189,48 @@ grep -qF 'p2 : start= 104448, size= 100319,' /tmp/testsuite-58-issue-2
|
|
||||||
rm /tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump
|
|
||||||
rm -r /tmp/testsuite-58-issue-21817-defs/
|
|
||||||
|
|
||||||
+testsector()
|
|
||||||
+{
|
|
||||||
+ echo "Running sector test with sector size $1..."
|
|
||||||
+
|
|
||||||
+ mkdir -p /tmp/testsuite-58-sector
|
|
||||||
+ cat > /tmp/testsuite-58-sector/a.conf <<EOF
|
|
||||||
+[Partition]
|
|
||||||
+Type=root
|
|
||||||
+SizeMaxBytes=15M
|
|
||||||
+SizeMinBytes=15M
|
|
||||||
+EOF
|
|
||||||
+ cat > /tmp/testsuite-58-sector/b.conf <<EOF
|
|
||||||
+[Partition]
|
|
||||||
+Type=linux-generic
|
|
||||||
+Weight=250
|
|
||||||
+EOF
|
|
||||||
+
|
|
||||||
+ cat > /tmp/testsuite-58-sector/c.conf <<EOF
|
|
||||||
+[Partition]
|
|
||||||
+Type=linux-generic
|
|
||||||
+Weight=750
|
|
||||||
+EOF
|
|
||||||
+
|
|
||||||
+ truncate -s 100m "/tmp/testsuite-58-sector-$1.img"
|
|
||||||
+ LOOP=$(losetup -b "$1" -P --show -f "/tmp/testsuite-58-sector-$1.img" )
|
|
||||||
+ systemd-repart --pretty=yes --definitions=/tmp/testsuite-58-sector/ --seed=750b6cd5c4ae4012a15e7be3c29e6a47 --empty=require --dry-run=no "$LOOP"
|
|
||||||
+ rm -rf /tmp/testsuite-58-sector
|
|
||||||
+ sfdisk --verify "$LOOP"
|
|
||||||
+ sfdisk --dump "$LOOP"
|
|
||||||
+ losetup -d "$LOOP"
|
|
||||||
+
|
|
||||||
+ rm "/tmp/testsuite-58-sector-$1.img"
|
|
||||||
+}
|
|
||||||
+
|
|
||||||
+# Valid block sizes on the Linux block layer are >= 512 and <= PAGE_SIZE, and
|
|
||||||
+# must be powers of 2. Which leaves exactly four different ones to test on
|
|
||||||
+# typical hardware
|
|
||||||
+testsector 512
|
|
||||||
+testsector 1024
|
|
||||||
+testsector 2048
|
|
||||||
+testsector 4096
|
|
||||||
+
|
|
||||||
echo OK >/testok
|
|
||||||
|
|
||||||
exit 0
|
|
@ -0,0 +1,114 @@
|
|||||||
|
From 0412acb95ffac94d5916ee19991cc7194e55953c Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Tue, 13 Nov 2018 12:48:49 +0100
|
||||||
|
Subject: [PATCH] core: make sure we don't throttle change signal generator
|
||||||
|
when a reload is pending
|
||||||
|
|
||||||
|
Fixes: #10627
|
||||||
|
(cherry picked from commit b8d381c47776ea0440af175cbe0c02cb743bde08)
|
||||||
|
|
||||||
|
Resolves: #1647359
|
||||||
|
---
|
||||||
|
src/core/manager.c | 64 ++++++++++++++++++++++++++++------------------
|
||||||
|
1 file changed, 39 insertions(+), 25 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/manager.c b/src/core/manager.c
|
||||||
|
index a24bfcacdf..3b2fe11e87 100644
|
||||||
|
--- a/src/core/manager.c
|
||||||
|
+++ b/src/core/manager.c
|
||||||
|
@@ -2074,56 +2074,70 @@ static unsigned manager_dispatch_dbus_queue(Manager *m) {
|
||||||
|
|
||||||
|
assert(m);
|
||||||
|
|
||||||
|
+ /* Avoid recursion */
|
||||||
|
if (m->dispatching_dbus_queue)
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- /* Anything to do at all? */
|
||||||
|
- if (!m->dbus_unit_queue && !m->dbus_job_queue && !m->send_reloading_done && !m->pending_reload_message)
|
||||||
|
- return 0;
|
||||||
|
+ /* When we are reloading, let's not wait with generating signals, since we need to exit the manager as quickly
|
||||||
|
+ * as we can. There's no point in throttling generation of signals in that case. */
|
||||||
|
+ if (MANAGER_IS_RELOADING(m) || m->send_reloading_done || m->pending_reload_message)
|
||||||
|
+ budget = (unsigned) -1; /* infinite budget in this case */
|
||||||
|
+ else {
|
||||||
|
+ /* Anything to do at all? */
|
||||||
|
+ if (!m->dbus_unit_queue && !m->dbus_job_queue)
|
||||||
|
+ return 0;
|
||||||
|
|
||||||
|
- /* Do we have overly many messages queued at the moment? If so, let's not enqueue more on top, let's sit this
|
||||||
|
- * cycle out, and process things in a later cycle when the queues got a bit emptier. */
|
||||||
|
- if (manager_bus_n_queued_write(m) > MANAGER_BUS_BUSY_THRESHOLD)
|
||||||
|
- return 0;
|
||||||
|
+ /* Do we have overly many messages queued at the moment? If so, let's not enqueue more on top, let's
|
||||||
|
+ * sit this cycle out, and process things in a later cycle when the queues got a bit emptier. */
|
||||||
|
+ if (manager_bus_n_queued_write(m) > MANAGER_BUS_BUSY_THRESHOLD)
|
||||||
|
+ return 0;
|
||||||
|
|
||||||
|
- /* Only process a certain number of units/jobs per event loop iteration. Even if the bus queue wasn't overly
|
||||||
|
- * full before this call we shouldn't increase it in size too wildly in one step, and we shouldn't monopolize
|
||||||
|
- * CPU time with generating these messages. Note the difference in counting of this "budget" and the
|
||||||
|
- * "threshold" above: the "budget" is decreased only once per generated message, regardless how many
|
||||||
|
- * busses/direct connections it is enqueued on, while the "threshold" is applied to each queued instance of bus
|
||||||
|
- * message, i.e. if the same message is enqueued to five busses/direct connections it will be counted five
|
||||||
|
- * times. This difference in counting ("references" vs. "instances") is primarily a result of the fact that
|
||||||
|
- * it's easier to implement it this way, however it also reflects the thinking that the "threshold" should put
|
||||||
|
- * a limit on used queue memory, i.e. space, while the "budget" should put a limit on time. Also note that
|
||||||
|
- * the "threshold" is currently chosen much higher than the "budget". */
|
||||||
|
- budget = MANAGER_BUS_MESSAGE_BUDGET;
|
||||||
|
+ /* Only process a certain number of units/jobs per event loop iteration. Even if the bus queue wasn't
|
||||||
|
+ * overly full before this call we shouldn't increase it in size too wildly in one step, and we
|
||||||
|
+ * shouldn't monopolize CPU time with generating these messages. Note the difference in counting of
|
||||||
|
+ * this "budget" and the "threshold" above: the "budget" is decreased only once per generated message,
|
||||||
|
+ * regardless how many busses/direct connections it is enqueued on, while the "threshold" is applied to
|
||||||
|
+ * each queued instance of bus message, i.e. if the same message is enqueued to five busses/direct
|
||||||
|
+ * connections it will be counted five times. This difference in counting ("references"
|
||||||
|
+ * vs. "instances") is primarily a result of the fact that it's easier to implement it this way,
|
||||||
|
+ * however it also reflects the thinking that the "threshold" should put a limit on used queue memory,
|
||||||
|
+ * i.e. space, while the "budget" should put a limit on time. Also note that the "threshold" is
|
||||||
|
+ * currently chosen much higher than the "budget". */
|
||||||
|
+ budget = MANAGER_BUS_MESSAGE_BUDGET;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
m->dispatching_dbus_queue = true;
|
||||||
|
|
||||||
|
- while (budget > 0 && (u = m->dbus_unit_queue)) {
|
||||||
|
+ while (budget != 0 && (u = m->dbus_unit_queue)) {
|
||||||
|
|
||||||
|
assert(u->in_dbus_queue);
|
||||||
|
|
||||||
|
bus_unit_send_change_signal(u);
|
||||||
|
- n++, budget--;
|
||||||
|
+ n++;
|
||||||
|
+
|
||||||
|
+ if (budget != (unsigned) -1)
|
||||||
|
+ budget--;
|
||||||
|
}
|
||||||
|
|
||||||
|
- while (budget > 0 && (j = m->dbus_job_queue)) {
|
||||||
|
+ while (budget != 0 && (j = m->dbus_job_queue)) {
|
||||||
|
assert(j->in_dbus_queue);
|
||||||
|
|
||||||
|
bus_job_send_change_signal(j);
|
||||||
|
- n++, budget--;
|
||||||
|
+ n++;
|
||||||
|
+
|
||||||
|
+ if (budget != (unsigned) -1)
|
||||||
|
+ budget--;
|
||||||
|
}
|
||||||
|
|
||||||
|
m->dispatching_dbus_queue = false;
|
||||||
|
|
||||||
|
- if (budget > 0 && m->send_reloading_done) {
|
||||||
|
+ if (m->send_reloading_done) {
|
||||||
|
m->send_reloading_done = false;
|
||||||
|
bus_manager_send_reloading(m, false);
|
||||||
|
- n++, budget--;
|
||||||
|
+ n++;
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (budget > 0 && m->pending_reload_message) {
|
||||||
|
+ if (m->pending_reload_message) {
|
||||||
|
bus_send_pending_reload_message(m);
|
||||||
|
n++;
|
||||||
|
}
|
@ -1,31 +0,0 @@
|
|||||||
From c16ff9acad53e741ee121a21bd2ba5dfce1f459e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Fri, 25 Feb 2022 15:09:07 +0100
|
|
||||||
Subject: [PATCH] test: accept both unpadded and padded partition sizes
|
|
||||||
|
|
||||||
Since util-linux/util-linux@921c7da55ec78350e4067b3fd6b7de6f299106ee
|
|
||||||
libfdisk aligns the last partition (on GPT) for optimal I/O. Let's
|
|
||||||
account for that.
|
|
||||||
|
|
||||||
Fixes: #22606
|
|
||||||
(cherry picked from commit d490188b8f6da658d8086dd53b7db95735e5cca1)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
test/units/testsuite-58.sh | 3 ++-
|
|
||||||
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/test/units/testsuite-58.sh b/test/units/testsuite-58.sh
|
|
||||||
index 7aed965fb4..f1b690a71f 100755
|
|
||||||
--- a/test/units/testsuite-58.sh
|
|
||||||
+++ b/test/units/testsuite-58.sh
|
|
||||||
@@ -184,7 +184,8 @@ sfdisk --dump "$LOOP" | tee /tmp/testsuite-58-issue-21817.dump
|
|
||||||
losetup -d "$LOOP"
|
|
||||||
|
|
||||||
grep -qiF "p1 : start= 2048, size= 102400, type=${root_guid}," /tmp/testsuite-58-issue-21817.dump
|
|
||||||
-grep -qF 'p2 : start= 104448, size= 100319,' /tmp/testsuite-58-issue-21817.dump
|
|
||||||
+# Accept both unpadded (pre-v2.38 util-linux) and padded (v2.38+ util-linux) sizes
|
|
||||||
+grep -qE "p2 : start= 104448, size= (100319| 98304)," /tmp/testsuite-58-issue-21817.dump
|
|
||||||
|
|
||||||
rm /tmp/testsuite-58-issue-21817.img /tmp/testsuite-58-issue-21817.dump
|
|
||||||
rm -r /tmp/testsuite-58-issue-21817-defs/
|
|
@ -0,0 +1,45 @@
|
|||||||
|
From 84b15a8a493424efa8c9eaa9a44a23c3c59742bd Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukas Nykryn <lnykryn@redhat.com>
|
||||||
|
Date: Thu, 25 Oct 2018 16:21:26 +0200
|
||||||
|
Subject: [PATCH] proc-cmdline: introduce PROC_CMDLINE_RD_STRICT
|
||||||
|
|
||||||
|
Our current set of flags allows an option to be either
|
||||||
|
use just in initrd or both in initrd and normal system.
|
||||||
|
This new flag is intended to be used in the case where
|
||||||
|
you want apply some settings just in initrd or just
|
||||||
|
in normal system.
|
||||||
|
|
||||||
|
(cherry picked from commit ed58820d7669971762dd887dc117d922c23f2543)
|
||||||
|
|
||||||
|
Related: #1643429
|
||||||
|
---
|
||||||
|
src/basic/proc-cmdline.c | 3 ++-
|
||||||
|
src/basic/proc-cmdline.h | 1 +
|
||||||
|
2 files changed, 3 insertions(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/src/basic/proc-cmdline.c b/src/basic/proc-cmdline.c
|
||||||
|
index add481c2ae..530ac37460 100644
|
||||||
|
--- a/src/basic/proc-cmdline.c
|
||||||
|
+++ b/src/basic/proc-cmdline.c
|
||||||
|
@@ -72,7 +72,8 @@ int proc_cmdline_parse(proc_cmdline_parse_t parse_item, void *data, unsigned fla
|
||||||
|
|
||||||
|
if (flags & PROC_CMDLINE_STRIP_RD_PREFIX)
|
||||||
|
key = q;
|
||||||
|
- }
|
||||||
|
+ } else if (in_initrd() && flags & PROC_CMDLINE_RD_STRICT)
|
||||||
|
+ continue;
|
||||||
|
|
||||||
|
value = strchr(key, '=');
|
||||||
|
if (value)
|
||||||
|
diff --git a/src/basic/proc-cmdline.h b/src/basic/proc-cmdline.h
|
||||||
|
index 4a9e6e0f62..140200dbf4 100644
|
||||||
|
--- a/src/basic/proc-cmdline.h
|
||||||
|
+++ b/src/basic/proc-cmdline.h
|
||||||
|
@@ -8,6 +8,7 @@
|
||||||
|
enum {
|
||||||
|
PROC_CMDLINE_STRIP_RD_PREFIX = 1,
|
||||||
|
PROC_CMDLINE_VALUE_OPTIONAL = 2,
|
||||||
|
+ PROC_CMDLINE_RD_STRICT = 4
|
||||||
|
};
|
||||||
|
|
||||||
|
typedef int (*proc_cmdline_parse_t)(const char *key, const char *value, void *data);
|
@ -1,41 +0,0 @@
|
|||||||
From fcaf368341c85285017f77333543656e1382975e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Wed, 9 Feb 2022 22:35:03 +0100
|
|
||||||
Subject: [PATCH] test: lvm 2.03.15 dropped the static autoactivation
|
|
||||||
|
|
||||||
so install the respective generator only if we're running with older
|
|
||||||
lvm versions.
|
|
||||||
|
|
||||||
See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=ee8fb0310c53ed003a43b324c99cdfd891dd1a7c
|
|
||||||
(cherry picked from commit d10d562bd4b9f93130fb2b23f2b0d0d4126ea7d4)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
test/test-functions | 5 ++++-
|
|
||||||
1 file changed, 4 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/test/test-functions b/test/test-functions
|
|
||||||
index 4827b6bedf..dcc893733c 100644
|
|
||||||
--- a/test/test-functions
|
|
||||||
+++ b/test/test-functions
|
|
||||||
@@ -973,16 +973,19 @@ install_lvm() {
|
|
||||||
image_install lvm
|
|
||||||
image_install "${ROOTLIBDIR:?}"/system/lvm2-lvmpolld.{service,socket}
|
|
||||||
image_install "${ROOTLIBDIR:?}"/system/{blk-availability,lvm2-monitor}.service
|
|
||||||
- image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator
|
|
||||||
image_install -o "/lib/tmpfiles.d/lvm2.conf"
|
|
||||||
if get_bool "$LOOKS_LIKE_DEBIAN"; then
|
|
||||||
inst_rules 56-lvm.rules 69-lvm-metad.rules
|
|
||||||
else
|
|
||||||
# Support the new udev autoactivation introduced in lvm 2.03.14
|
|
||||||
# https://sourceware.org/git/?p=lvm2.git;a=commit;h=67722b312390cdab29c076c912e14bd739c5c0f6
|
|
||||||
+ # Static autoactivation (via lvm2-activation-generator) was dropped
|
|
||||||
+ # in lvm 2.03.15
|
|
||||||
+ # https://sourceware.org/git/?p=lvm2.git;a=commit;h=ee8fb0310c53ed003a43b324c99cdfd891dd1a7c
|
|
||||||
if [[ -f /lib/udev/rules.d/69-dm-lvm.rules ]]; then
|
|
||||||
inst_rules 11-dm-lvm.rules 69-dm-lvm.rules
|
|
||||||
else
|
|
||||||
+ image_install "${ROOTLIBDIR:?}"/system-generators/lvm2-activation-generator
|
|
||||||
image_install "${ROOTLIBDIR:?}"/system/lvm2-pvscan@.service
|
|
||||||
inst_rules 11-dm-lvm.rules 69-dm-lvm-metad.rules
|
|
||||||
fi
|
|
@ -0,0 +1,77 @@
|
|||||||
|
From 55798355455b9255458d6a705f8766c4dbe3ef73 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lukas Nykryn <lnykryn@redhat.com>
|
||||||
|
Date: Thu, 25 Oct 2018 16:34:00 +0200
|
||||||
|
Subject: [PATCH] debug-generator: introduce rd.* version of all options
|
||||||
|
|
||||||
|
(cherry picked from commit a7dd6d04b07f58df5c0294743d76df0be0b4b928)
|
||||||
|
|
||||||
|
Resolves: #1643429
|
||||||
|
---
|
||||||
|
man/systemd-debug-generator.xml | 27 +++++++++++++++++++--------
|
||||||
|
src/debug-generator/debug-generator.c | 2 +-
|
||||||
|
2 files changed, 20 insertions(+), 9 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/man/systemd-debug-generator.xml b/man/systemd-debug-generator.xml
|
||||||
|
index d5cf4109b0..fa88e8ac01 100644
|
||||||
|
--- a/man/systemd-debug-generator.xml
|
||||||
|
+++ b/man/systemd-debug-generator.xml
|
||||||
|
@@ -33,27 +33,38 @@
|
||||||
|
that reads the kernel command line and understands three
|
||||||
|
options:</para>
|
||||||
|
|
||||||
|
- <para>If the <option>systemd.mask=</option> option is specified
|
||||||
|
- and followed by a unit name, this unit is masked for the runtime,
|
||||||
|
- similar to the effect of
|
||||||
|
+ <para>If the <option>systemd.mask=</option> or <option>rd.systemd.mask=</option>
|
||||||
|
+ option is specified and followed by a unit name, this unit is
|
||||||
|
+ masked for the runtime, similar to the effect of
|
||||||
|
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
||||||
|
<command>mask</command> command. This is useful to boot with
|
||||||
|
certain units removed from the initial boot transaction for
|
||||||
|
- debugging system startup. May be specified more than once.</para>
|
||||||
|
+ debugging system startup. May be specified more than once.
|
||||||
|
+ <option>rd.systemd.mask=</option> is honored only by initial
|
||||||
|
+ RAM disk (initrd) while <option>systemd.mask=</option> is
|
||||||
|
+ honored only in the main system.</para>
|
||||||
|
|
||||||
|
- <para>If the <option>systemd.wants=</option> option is specified
|
||||||
|
+ <para>If the <option>systemd.wants=</option> or
|
||||||
|
+ <option>rd.systemd.wants=</option> option is specified
|
||||||
|
and followed by a unit name, a start job for this unit is added to
|
||||||
|
the initial transaction. This is useful to start one or more
|
||||||
|
- additional units at boot. May be specified more than once.</para>
|
||||||
|
+ additional units at boot. May be specified more than once.
|
||||||
|
+ <option>rd.systemd.wants=</option> is honored only by initial
|
||||||
|
+ RAM disk (initrd) while <option>systemd.wants=</option> is
|
||||||
|
+ honored only in the main system.</para>
|
||||||
|
|
||||||
|
- <para>If the <option>systemd.debug_shell</option> option is
|
||||||
|
+ <para>If the <option>systemd.debug_shell</option> or
|
||||||
|
+ <option>rd.systemd.debug_shell</option> option is
|
||||||
|
specified, the debug shell service
|
||||||
|
<literal>debug-shell.service</literal> is pulled into the boot
|
||||||
|
transaction. It will spawn a debug shell on tty9 during early
|
||||||
|
system startup. Note that the shell may also be turned on
|
||||||
|
persistently by enabling it with
|
||||||
|
<citerefentry><refentrytitle>systemctl</refentrytitle><manvolnum>1</manvolnum></citerefentry>'s
|
||||||
|
- <command>enable</command> command.</para>
|
||||||
|
+ <command>enable</command> command.
|
||||||
|
+ <option>rd.systemd.debug_shell=</option> is honored only by initial
|
||||||
|
+ RAM disk (initrd) while <option>systemd.debug_shell</option> is
|
||||||
|
+ honored only in the main system.</para>
|
||||||
|
|
||||||
|
<para><filename>systemd-debug-generator</filename> implements
|
||||||
|
<citerefentry><refentrytitle>systemd.generator</refentrytitle><manvolnum>7</manvolnum></citerefentry>.</para>
|
||||||
|
diff --git a/src/debug-generator/debug-generator.c b/src/debug-generator/debug-generator.c
|
||||||
|
index dd6ab94fa2..800d31cebe 100644
|
||||||
|
--- a/src/debug-generator/debug-generator.c
|
||||||
|
+++ b/src/debug-generator/debug-generator.c
|
||||||
|
@@ -154,7 +154,7 @@ int main(int argc, char *argv[]) {
|
||||||
|
|
||||||
|
umask(0022);
|
||||||
|
|
||||||
|
- r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, 0);
|
||||||
|
+ r = proc_cmdline_parse(parse_proc_cmdline_item, NULL, PROC_CMDLINE_RD_STRICT | PROC_CMDLINE_STRIP_RD_PREFIX);
|
||||||
|
if (r < 0)
|
||||||
|
log_warning_errno(r, "Failed to parse kernel command line, ignoring: %m");
|
||||||
|
|
@ -1,39 +0,0 @@
|
|||||||
From 494045e03c7e1b81ac4dcea7d4bf776e2bc50c77 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Thu, 10 Feb 2022 12:29:53 +0100
|
|
||||||
Subject: [PATCH] test: accept GC'ed units in newer LVM
|
|
||||||
|
|
||||||
Since lvm 2.03.15 the transient units are started without `-r`, thus
|
|
||||||
disappearing once they finish and breaking the test (which expects them
|
|
||||||
to remain loaded after finishing). Let's accept `LoadState=not-found` as
|
|
||||||
a valid result as well to fix this.
|
|
||||||
|
|
||||||
Follow-up to: d10d562bd4b9f93130fb2b23f2b0d0d4126ea7d4
|
|
||||||
See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=fbd8b0cf43dc67f51f86f060dce748f446985855
|
|
||||||
|
|
||||||
(cherry picked from commit b034f02c628057c30a2136289a1b388a6fb9a737)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
test/units/testsuite-64.sh | 8 ++++++++
|
|
||||||
1 file changed, 8 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/test/units/testsuite-64.sh b/test/units/testsuite-64.sh
|
|
||||||
index f75382d90a..dc8b263b10 100755
|
|
||||||
--- a/test/units/testsuite-64.sh
|
|
||||||
+++ b/test/units/testsuite-64.sh
|
|
||||||
@@ -96,6 +96,14 @@ helper_wait_for_lvm_activate() {
|
|
||||||
if [[ "$(systemctl show -P SubState "$lvm_activate_svc")" == exited ]]; then
|
|
||||||
return 0
|
|
||||||
fi
|
|
||||||
+ else
|
|
||||||
+ # Since lvm 2.03.15 the lvm-activate transient unit no longer remains
|
|
||||||
+ # after finishing, so we have to treat non-existent units as a success
|
|
||||||
+ # as well
|
|
||||||
+ # See: https://sourceware.org/git/?p=lvm2.git;a=commit;h=fbd8b0cf43dc67f51f86f060dce748f446985855
|
|
||||||
+ if [[ "$(systemctl show -P LoadState "$lvm_activate_svc")" == not-found ]]; then
|
|
||||||
+ return 0
|
|
||||||
+ fi
|
|
||||||
fi
|
|
||||||
|
|
||||||
sleep .5
|
|
@ -0,0 +1,213 @@
|
|||||||
|
From 107d75ca9394481bd045385fc45f2ee65b30ad16 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Fri, 19 Oct 2018 11:26:59 +0200
|
||||||
|
Subject: [PATCH] chown-recursive: let's rework the recursive logic to use
|
||||||
|
O_PATH
|
||||||
|
|
||||||
|
That way we can pin a specific inode and analyze it and manipulate it
|
||||||
|
without it being swapped out beneath our hands.
|
||||||
|
|
||||||
|
Fixes a vulnerability originally found by Jann Horn from Google.
|
||||||
|
|
||||||
|
CVE-2018-15687
|
||||||
|
LP: #1796692
|
||||||
|
https://bugzilla.redhat.com/show_bug.cgi?id=1639076
|
||||||
|
|
||||||
|
(cherry-picked from commit 5de6cce58b3e8b79239b6e83653459d91af6e57c)
|
||||||
|
|
||||||
|
Resolves: #1643368
|
||||||
|
---
|
||||||
|
src/core/chown-recursive.c | 146 ++++++++++++++++++-------------------
|
||||||
|
1 file changed, 70 insertions(+), 76 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/chown-recursive.c b/src/core/chown-recursive.c
|
||||||
|
index c4794501c2..27c64489b5 100644
|
||||||
|
--- a/src/core/chown-recursive.c
|
||||||
|
+++ b/src/core/chown-recursive.c
|
||||||
|
@@ -1,17 +1,19 @@
|
||||||
|
/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||||
|
|
||||||
|
-#include <sys/types.h>
|
||||||
|
-#include <sys/stat.h>
|
||||||
|
#include <fcntl.h>
|
||||||
|
+#include <sys/stat.h>
|
||||||
|
+#include <sys/types.h>
|
||||||
|
|
||||||
|
-#include "user-util.h"
|
||||||
|
-#include "macro.h"
|
||||||
|
-#include "fd-util.h"
|
||||||
|
-#include "dirent-util.h"
|
||||||
|
#include "chown-recursive.h"
|
||||||
|
+#include "dirent-util.h"
|
||||||
|
+#include "fd-util.h"
|
||||||
|
+#include "macro.h"
|
||||||
|
+#include "stdio-util.h"
|
||||||
|
+#include "strv.h"
|
||||||
|
+#include "user-util.h"
|
||||||
|
|
||||||
|
-static int chown_one(int fd, const char *name, const struct stat *st, uid_t uid, gid_t gid) {
|
||||||
|
- int r;
|
||||||
|
+static int chown_one(int fd, const struct stat *st, uid_t uid, gid_t gid) {
|
||||||
|
+ char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
|
||||||
|
|
||||||
|
assert(fd >= 0);
|
||||||
|
assert(st);
|
||||||
|
@@ -20,90 +22,82 @@ static int chown_one(int fd, const char *name, const struct stat *st, uid_t uid,
|
||||||
|
(!gid_is_valid(gid) || st->st_gid == gid))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- if (name)
|
||||||
|
- r = fchownat(fd, name, uid, gid, AT_SYMLINK_NOFOLLOW);
|
||||||
|
- else
|
||||||
|
- r = fchown(fd, uid, gid);
|
||||||
|
- if (r < 0)
|
||||||
|
- return -errno;
|
||||||
|
+ /* We change ownership through the /proc/self/fd/%i path, so that we have a stable reference that works with
|
||||||
|
+ * O_PATH. (Note: fchown() and fchmod() do not work with O_PATH, the kernel refuses that. */
|
||||||
|
+ xsprintf(procfs_path, "/proc/self/fd/%i", fd);
|
||||||
|
|
||||||
|
- /* The linux kernel alters the mode in some cases of chown(). Let's undo this. */
|
||||||
|
- if (name) {
|
||||||
|
- if (!S_ISLNK(st->st_mode))
|
||||||
|
- r = fchmodat(fd, name, st->st_mode, 0);
|
||||||
|
- else /* There's currently no AT_SYMLINK_NOFOLLOW for fchmodat() */
|
||||||
|
- r = 0;
|
||||||
|
- } else
|
||||||
|
- r = fchmod(fd, st->st_mode);
|
||||||
|
- if (r < 0)
|
||||||
|
+ if (chown(procfs_path, uid, gid) < 0)
|
||||||
|
return -errno;
|
||||||
|
|
||||||
|
+ /* The linux kernel alters the mode in some cases of chown(). Let's undo this. We do this only for non-symlinks
|
||||||
|
+ * however. That's because for symlinks the access mode is ignored anyway and because on some kernels/file
|
||||||
|
+ * systems trying to change the access mode will succeed but has no effect while on others it actively
|
||||||
|
+ * fails. */
|
||||||
|
+ if (!S_ISLNK(st->st_mode))
|
||||||
|
+ if (chmod(procfs_path, st->st_mode & 07777) < 0)
|
||||||
|
+ return -errno;
|
||||||
|
+
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int chown_recursive_internal(int fd, const struct stat *st, uid_t uid, gid_t gid) {
|
||||||
|
+ _cleanup_closedir_ DIR *d = NULL;
|
||||||
|
bool changed = false;
|
||||||
|
+ struct dirent *de;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(fd >= 0);
|
||||||
|
assert(st);
|
||||||
|
|
||||||
|
- if (S_ISDIR(st->st_mode)) {
|
||||||
|
- _cleanup_closedir_ DIR *d = NULL;
|
||||||
|
- struct dirent *de;
|
||||||
|
-
|
||||||
|
- d = fdopendir(fd);
|
||||||
|
- if (!d) {
|
||||||
|
- r = -errno;
|
||||||
|
- goto finish;
|
||||||
|
- }
|
||||||
|
- fd = -1;
|
||||||
|
-
|
||||||
|
- FOREACH_DIRENT_ALL(de, d, r = -errno; goto finish) {
|
||||||
|
- struct stat fst;
|
||||||
|
-
|
||||||
|
- if (dot_or_dot_dot(de->d_name))
|
||||||
|
- continue;
|
||||||
|
-
|
||||||
|
- if (fstatat(dirfd(d), de->d_name, &fst, AT_SYMLINK_NOFOLLOW) < 0) {
|
||||||
|
- r = -errno;
|
||||||
|
- goto finish;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- if (S_ISDIR(fst.st_mode)) {
|
||||||
|
- int subdir_fd;
|
||||||
|
-
|
||||||
|
- subdir_fd = openat(dirfd(d), de->d_name, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
|
||||||
|
- if (subdir_fd < 0) {
|
||||||
|
- r = -errno;
|
||||||
|
- goto finish;
|
||||||
|
- }
|
||||||
|
-
|
||||||
|
- r = chown_recursive_internal(subdir_fd, &fst, uid, gid);
|
||||||
|
- if (r < 0)
|
||||||
|
- goto finish;
|
||||||
|
- if (r > 0)
|
||||||
|
- changed = true;
|
||||||
|
- } else {
|
||||||
|
- r = chown_one(dirfd(d), de->d_name, &fst, uid, gid);
|
||||||
|
- if (r < 0)
|
||||||
|
- goto finish;
|
||||||
|
- if (r > 0)
|
||||||
|
- changed = true;
|
||||||
|
- }
|
||||||
|
+ d = fdopendir(fd);
|
||||||
|
+ if (!d) {
|
||||||
|
+ safe_close(fd);
|
||||||
|
+ return -errno;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ FOREACH_DIRENT_ALL(de, d, return -errno) {
|
||||||
|
+ _cleanup_close_ int path_fd = -1;
|
||||||
|
+ struct stat fst;
|
||||||
|
+
|
||||||
|
+ if (dot_or_dot_dot(de->d_name))
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
+ /* Let's pin the child inode we want to fix now with an O_PATH fd, so that it cannot be swapped out
|
||||||
|
+ * while we manipulate it. */
|
||||||
|
+ path_fd = openat(dirfd(d), de->d_name, O_PATH|O_CLOEXEC|O_NOFOLLOW);
|
||||||
|
+ if (path_fd < 0)
|
||||||
|
+ return -errno;
|
||||||
|
+
|
||||||
|
+ if (fstat(path_fd, &fst) < 0)
|
||||||
|
+ return -errno;
|
||||||
|
+
|
||||||
|
+ if (S_ISDIR(fst.st_mode)) {
|
||||||
|
+ int subdir_fd;
|
||||||
|
+
|
||||||
|
+ /* Convert it to a "real" (i.e. non-O_PATH) fd now */
|
||||||
|
+ subdir_fd = fd_reopen(path_fd, O_RDONLY|O_CLOEXEC|O_NOATIME);
|
||||||
|
+ if (subdir_fd < 0)
|
||||||
|
+ return subdir_fd;
|
||||||
|
+
|
||||||
|
+ r = chown_recursive_internal(subdir_fd, &fst, uid, gid); /* takes possession of subdir_fd even on failure */
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+ if (r > 0)
|
||||||
|
+ changed = true;
|
||||||
|
+ } else {
|
||||||
|
+ r = chown_one(path_fd, &fst, uid, gid);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+ if (r > 0)
|
||||||
|
+ changed = true;
|
||||||
|
}
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- r = chown_one(dirfd(d), NULL, st, uid, gid);
|
||||||
|
- } else
|
||||||
|
- r = chown_one(fd, NULL, st, uid, gid);
|
||||||
|
+ r = chown_one(dirfd(d), st, uid, gid);
|
||||||
|
if (r < 0)
|
||||||
|
- goto finish;
|
||||||
|
+ return r;
|
||||||
|
|
||||||
|
- r = r > 0 || changed;
|
||||||
|
-
|
||||||
|
-finish:
|
||||||
|
- safe_close(fd);
|
||||||
|
- return r;
|
||||||
|
+ return r > 0 || changed;
|
||||||
|
}
|
||||||
|
|
||||||
|
int path_chown_recursive(const char *path, uid_t uid, gid_t gid) {
|
||||||
|
@@ -111,7 +105,7 @@ int path_chown_recursive(const char *path, uid_t uid, gid_t gid) {
|
||||||
|
struct stat st;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
- fd = open(path, O_RDONLY|O_NONBLOCK|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
|
||||||
|
+ fd = open(path, O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
|
||||||
|
if (fd < 0)
|
||||||
|
return -errno;
|
||||||
|
|
@ -1,127 +0,0 @@
|
|||||||
From 3ed5b365c5134cb18da8aed397c7c4551af25715 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daan De Meyer <daan.j.demeyer@gmail.com>
|
|
||||||
Date: Tue, 1 Mar 2022 17:04:13 +0000
|
|
||||||
Subject: [PATCH] shared: Add more dlopen() tests
|
|
||||||
|
|
||||||
Add dlopen_dw(), dlopen_elf() and dlopen_pcre2() to the dlopen test.
|
|
||||||
To enable adding dlopen_pcre2(), we move pcre2-dlopen.h/c from
|
|
||||||
src/journal to src/shared.
|
|
||||||
|
|
||||||
(cherry picked from commit ee48779e05831a0ec5e1ba5e7ed5fe92aaca1d9e)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/journal/meson.build | 2 --
|
|
||||||
src/shared/elf-util.c | 4 ++--
|
|
||||||
src/shared/elf-util.h | 3 +++
|
|
||||||
src/shared/meson.build | 2 ++
|
|
||||||
src/{journal => shared}/pcre2-dlopen.c | 0
|
|
||||||
src/{journal => shared}/pcre2-dlopen.h | 0
|
|
||||||
src/test/test-dlopen-so.c | 11 +++++++++++
|
|
||||||
7 files changed, 18 insertions(+), 4 deletions(-)
|
|
||||||
rename src/{journal => shared}/pcre2-dlopen.c (100%)
|
|
||||||
rename src/{journal => shared}/pcre2-dlopen.h (100%)
|
|
||||||
|
|
||||||
diff --git a/src/journal/meson.build b/src/journal/meson.build
|
|
||||||
index eb66bfd584..270592f2ac 100644
|
|
||||||
--- a/src/journal/meson.build
|
|
||||||
+++ b/src/journal/meson.build
|
|
||||||
@@ -49,8 +49,6 @@ systemd_cat_sources = files('cat.c')
|
|
||||||
|
|
||||||
journalctl_sources = files('''
|
|
||||||
journalctl.c
|
|
||||||
- pcre2-dlopen.c
|
|
||||||
- pcre2-dlopen.h
|
|
||||||
'''.split())
|
|
||||||
|
|
||||||
if install_sysconfdir_samples
|
|
||||||
diff --git a/src/shared/elf-util.c b/src/shared/elf-util.c
|
|
||||||
index 4d93e7eaba..6d9fcfbbf2 100644
|
|
||||||
--- a/src/shared/elf-util.c
|
|
||||||
+++ b/src/shared/elf-util.c
|
|
||||||
@@ -80,7 +80,7 @@ unsigned int (*sym_elf_version)(unsigned int);
|
|
||||||
GElf_Phdr *(*sym_gelf_getphdr)(Elf *, int, GElf_Phdr *);
|
|
||||||
size_t (*sym_gelf_getnote)(Elf_Data *, size_t, GElf_Nhdr *, size_t *, size_t *);
|
|
||||||
|
|
||||||
-static int dlopen_dw(void) {
|
|
||||||
+int dlopen_dw(void) {
|
|
||||||
int r;
|
|
||||||
|
|
||||||
r = dlopen_many_sym_or_warn(
|
|
||||||
@@ -123,7 +123,7 @@ static int dlopen_dw(void) {
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int dlopen_elf(void) {
|
|
||||||
+int dlopen_elf(void) {
|
|
||||||
int r;
|
|
||||||
|
|
||||||
r = dlopen_many_sym_or_warn(
|
|
||||||
diff --git a/src/shared/elf-util.h b/src/shared/elf-util.h
|
|
||||||
index cf3d9be128..b28e64cea6 100644
|
|
||||||
--- a/src/shared/elf-util.h
|
|
||||||
+++ b/src/shared/elf-util.h
|
|
||||||
@@ -4,6 +4,9 @@
|
|
||||||
#include "json.h"
|
|
||||||
|
|
||||||
#if HAVE_ELFUTILS
|
|
||||||
+int dlopen_dw(void);
|
|
||||||
+int dlopen_elf(void);
|
|
||||||
+
|
|
||||||
/* Parse an ELF object in a forked process, so that errors while iterating over
|
|
||||||
* untrusted and potentially malicious data do not propagate to the main caller's process.
|
|
||||||
* If fork_disable_dump, the child process will not dump core if it crashes. */
|
|
||||||
diff --git a/src/shared/meson.build b/src/shared/meson.build
|
|
||||||
index 5dc58a863d..006310a917 100644
|
|
||||||
--- a/src/shared/meson.build
|
|
||||||
+++ b/src/shared/meson.build
|
|
||||||
@@ -241,6 +241,8 @@ shared_sources = files('''
|
|
||||||
parse-argument.h
|
|
||||||
parse-socket-bind-item.c
|
|
||||||
parse-socket-bind-item.h
|
|
||||||
+ pcre2-dlopen.c
|
|
||||||
+ pcre2-dlopen.h
|
|
||||||
pe-header.h
|
|
||||||
pkcs11-util.c
|
|
||||||
pkcs11-util.h
|
|
||||||
diff --git a/src/journal/pcre2-dlopen.c b/src/shared/pcre2-dlopen.c
|
|
||||||
similarity index 100%
|
|
||||||
rename from src/journal/pcre2-dlopen.c
|
|
||||||
rename to src/shared/pcre2-dlopen.c
|
|
||||||
diff --git a/src/journal/pcre2-dlopen.h b/src/shared/pcre2-dlopen.h
|
|
||||||
similarity index 100%
|
|
||||||
rename from src/journal/pcre2-dlopen.h
|
|
||||||
rename to src/shared/pcre2-dlopen.h
|
|
||||||
diff --git a/src/test/test-dlopen-so.c b/src/test/test-dlopen-so.c
|
|
||||||
index ea2ef31b1f..002f666ed8 100644
|
|
||||||
--- a/src/test/test-dlopen-so.c
|
|
||||||
+++ b/src/test/test-dlopen-so.c
|
|
||||||
@@ -5,10 +5,12 @@
|
|
||||||
|
|
||||||
#include "bpf-dlopen.h"
|
|
||||||
#include "cryptsetup-util.h"
|
|
||||||
+#include "elf-util.h"
|
|
||||||
#include "idn-util.h"
|
|
||||||
#include "libfido2-util.h"
|
|
||||||
#include "macro.h"
|
|
||||||
#include "main-func.h"
|
|
||||||
+#include "pcre2-dlopen.h"
|
|
||||||
#include "pwquality-util.h"
|
|
||||||
#include "qrcode-util.h"
|
|
||||||
#include "tests.h"
|
|
||||||
@@ -49,6 +51,15 @@ static int run(int argc, char **argv) {
|
|
||||||
assert_se(dlopen_bpf() >= 0);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
+#if HAVE_ELFUTILS
|
|
||||||
+ assert_se(dlopen_dw() >= 0);
|
|
||||||
+ assert_se(dlopen_elf() >= 0);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
+#if HAVE_PCRE2
|
|
||||||
+ assert_se(dlopen_pcre2() >= 0);
|
|
||||||
+#endif
|
|
||||||
+
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,58 @@
|
|||||||
|
From bbe9ac11d8d4a8511214605509a593fb9f04ffaa Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Fri, 19 Oct 2018 11:28:40 +0200
|
||||||
|
Subject: [PATCH] chown-recursive: also drop ACLs when recursively chown()ing
|
||||||
|
|
||||||
|
Let's better be safe than sorry and also drop ACLs.
|
||||||
|
|
||||||
|
(cherry-picked from commit f89bc84f3242449cbc308892c87573b131f121df)
|
||||||
|
|
||||||
|
Related: #1643368
|
||||||
|
---
|
||||||
|
src/core/chown-recursive.c | 16 ++++++++++++----
|
||||||
|
1 file changed, 12 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/chown-recursive.c b/src/core/chown-recursive.c
|
||||||
|
index 27c64489b5..447b771267 100644
|
||||||
|
--- a/src/core/chown-recursive.c
|
||||||
|
+++ b/src/core/chown-recursive.c
|
||||||
|
@@ -3,6 +3,7 @@
|
||||||
|
#include <fcntl.h>
|
||||||
|
#include <sys/stat.h>
|
||||||
|
#include <sys/types.h>
|
||||||
|
+#include <sys/xattr.h>
|
||||||
|
|
||||||
|
#include "chown-recursive.h"
|
||||||
|
#include "dirent-util.h"
|
||||||
|
@@ -14,6 +15,7 @@
|
||||||
|
|
||||||
|
static int chown_one(int fd, const struct stat *st, uid_t uid, gid_t gid) {
|
||||||
|
char procfs_path[STRLEN("/proc/self/fd/") + DECIMAL_STR_MAX(int) + 1];
|
||||||
|
+ const char *n;
|
||||||
|
|
||||||
|
assert(fd >= 0);
|
||||||
|
assert(st);
|
||||||
|
@@ -26,13 +28,19 @@ static int chown_one(int fd, const struct stat *st, uid_t uid, gid_t gid) {
|
||||||
|
* O_PATH. (Note: fchown() and fchmod() do not work with O_PATH, the kernel refuses that. */
|
||||||
|
xsprintf(procfs_path, "/proc/self/fd/%i", fd);
|
||||||
|
|
||||||
|
+ /* Drop any ACL if there is one */
|
||||||
|
+ FOREACH_STRING(n, "system.posix_acl_access", "system.posix_acl_default")
|
||||||
|
+ if (removexattr(procfs_path, n) < 0)
|
||||||
|
+ if (!IN_SET(errno, ENODATA, EOPNOTSUPP, ENOSYS, ENOTTY))
|
||||||
|
+ return -errno;
|
||||||
|
+
|
||||||
|
if (chown(procfs_path, uid, gid) < 0)
|
||||||
|
return -errno;
|
||||||
|
|
||||||
|
- /* The linux kernel alters the mode in some cases of chown(). Let's undo this. We do this only for non-symlinks
|
||||||
|
- * however. That's because for symlinks the access mode is ignored anyway and because on some kernels/file
|
||||||
|
- * systems trying to change the access mode will succeed but has no effect while on others it actively
|
||||||
|
- * fails. */
|
||||||
|
+ /* The linux kernel alters the mode in some cases of chown(), as well when we change ACLs. Let's undo this. We
|
||||||
|
+ * do this only for non-symlinks however. That's because for symlinks the access mode is ignored anyway and
|
||||||
|
+ * because on some kernels/file systems trying to change the access mode will succeed but has no effect while
|
||||||
|
+ * on others it actively fails. */
|
||||||
|
if (!S_ISLNK(st->st_mode))
|
||||||
|
if (chmod(procfs_path, st->st_mode & 07777) < 0)
|
||||||
|
return -errno;
|
@ -1,36 +0,0 @@
|
|||||||
From b07519fd5241eacfdb735917eca4ccbf441b5a8a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Daan De Meyer <daan.j.demeyer@gmail.com>
|
|
||||||
Date: Tue, 22 Feb 2022 11:06:00 +0000
|
|
||||||
Subject: [PATCH] systemctl: Show how long a service ran for after it exited in
|
|
||||||
status output
|
|
||||||
|
|
||||||
(cherry picked from commit 0802f62efc1d1c67d5be67223b529c93536cf2ed)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/systemctl/systemctl-show.c | 12 ++++++++++++
|
|
||||||
1 file changed, 12 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c
|
|
||||||
index 37c898f313..9b23471990 100644
|
|
||||||
--- a/src/systemctl/systemctl-show.c
|
|
||||||
+++ b/src/systemctl/systemctl-show.c
|
|
||||||
@@ -433,6 +433,18 @@ static void print_status_info(
|
|
||||||
FORMAT_TIMESTAMP_STYLE(until_timestamp, arg_timestamp_style),
|
|
||||||
FORMAT_TIMESTAMP_RELATIVE(until_timestamp));
|
|
||||||
}
|
|
||||||
+
|
|
||||||
+ if (!endswith(i->id, ".target") &&
|
|
||||||
+ STRPTR_IN_SET(i->active_state, "inactive", "failed") &&
|
|
||||||
+ timestamp_is_set(i->active_enter_timestamp) &&
|
|
||||||
+ timestamp_is_set(i->active_exit_timestamp) &&
|
|
||||||
+ i->active_exit_timestamp >= i->active_enter_timestamp) {
|
|
||||||
+
|
|
||||||
+ usec_t duration;
|
|
||||||
+
|
|
||||||
+ duration = i->active_exit_timestamp - i->active_enter_timestamp;
|
|
||||||
+ printf(" Duration: %s\n", FORMAT_TIMESPAN(duration, MSEC_PER_SEC));
|
|
||||||
+ }
|
|
||||||
} else
|
|
||||||
printf("\n");
|
|
||||||
|
|
34
SOURCES/0042-chown-recursive-TAKE_FD-is-your-friend.patch
Normal file
34
SOURCES/0042-chown-recursive-TAKE_FD-is-your-friend.patch
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
From c9630164b869e109bf2960968fc583449ccf0875 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Fri, 19 Oct 2018 11:42:11 +0200
|
||||||
|
Subject: [PATCH] chown-recursive: TAKE_FD() is your friend
|
||||||
|
|
||||||
|
(cherry-picked from commit cd6b7d50c337b3676a3d5fc2188ff298dcbdb939)
|
||||||
|
|
||||||
|
Related: #1643368
|
||||||
|
---
|
||||||
|
src/core/chown-recursive.c | 6 +-----
|
||||||
|
1 file changed, 1 insertion(+), 5 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/core/chown-recursive.c b/src/core/chown-recursive.c
|
||||||
|
index 447b771267..7767301f7d 100644
|
||||||
|
--- a/src/core/chown-recursive.c
|
||||||
|
+++ b/src/core/chown-recursive.c
|
||||||
|
@@ -111,7 +111,6 @@ static int chown_recursive_internal(int fd, const struct stat *st, uid_t uid, gi
|
||||||
|
int path_chown_recursive(const char *path, uid_t uid, gid_t gid) {
|
||||||
|
_cleanup_close_ int fd = -1;
|
||||||
|
struct stat st;
|
||||||
|
- int r;
|
||||||
|
|
||||||
|
fd = open(path, O_RDONLY|O_DIRECTORY|O_CLOEXEC|O_NOFOLLOW|O_NOATIME);
|
||||||
|
if (fd < 0)
|
||||||
|
@@ -130,8 +129,5 @@ int path_chown_recursive(const char *path, uid_t uid, gid_t gid) {
|
||||||
|
(!gid_is_valid(gid) || st.st_gid == gid))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- r = chown_recursive_internal(fd, &st, uid, gid);
|
||||||
|
- fd = -1; /* we donated the fd to the call, regardless if it succeeded or failed */
|
||||||
|
-
|
||||||
|
- return r;
|
||||||
|
+ return chown_recursive_internal(TAKE_FD(fd), &st, uid, gid); /* we donate the fd to the call, regardless if it succeeded or failed */
|
||||||
|
}
|
@ -1,130 +0,0 @@
|
|||||||
From 5f59cc1593eaa251161061fe9a4ac4afb1592e6e Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Mon, 21 Feb 2022 13:08:20 +0100
|
|
||||||
Subject: [PATCH] time-util: introduce TIMESTAMP_UNIX
|
|
||||||
|
|
||||||
Allow formatting timestamps as number of seconds since the Epoch for easier
|
|
||||||
machine parsing.
|
|
||||||
|
|
||||||
Fixes: #22567
|
|
||||||
|
|
||||||
```
|
|
||||||
$ systemctl show systemd-journald | grep Timestamp
|
|
||||||
WatchdogTimestampMonotonic=0
|
|
||||||
ExecMainStartTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
ExecMainStartTimestampMonotonic=13030408
|
|
||||||
ExecMainExitTimestampMonotonic=0
|
|
||||||
StateChangeTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
StateChangeTimestampMonotonic=13049273
|
|
||||||
InactiveExitTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
InactiveExitTimestampMonotonic=13030430
|
|
||||||
ActiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
ActiveEnterTimestampMonotonic=13049273
|
|
||||||
ActiveExitTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
ActiveExitTimestampMonotonic=12997236
|
|
||||||
InactiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
InactiveEnterTimestampMonotonic=13028890
|
|
||||||
ConditionTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
ConditionTimestampMonotonic=13029539
|
|
||||||
AssertTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
AssertTimestampMonotonic=13029540
|
|
||||||
|
|
||||||
$ systemctl show --timestamp=unix systemd-journald | grep Timestamp
|
|
||||||
WatchdogTimestampMonotonic=0
|
|
||||||
ExecMainStartTimestamp=@1639232757
|
|
||||||
ExecMainStartTimestampMonotonic=13030408
|
|
||||||
ExecMainExitTimestampMonotonic=0
|
|
||||||
StateChangeTimestamp=@1639232757
|
|
||||||
StateChangeTimestampMonotonic=13049273
|
|
||||||
InactiveExitTimestamp=@1639232757
|
|
||||||
InactiveExitTimestampMonotonic=13030430
|
|
||||||
ActiveEnterTimestamp=@1639232757
|
|
||||||
ActiveEnterTimestampMonotonic=13049273
|
|
||||||
ActiveExitTimestamp=@1639232757
|
|
||||||
ActiveExitTimestampMonotonic=12997236
|
|
||||||
InactiveEnterTimestamp=@1639232757
|
|
||||||
InactiveEnterTimestampMonotonic=13028890
|
|
||||||
ConditionTimestamp=@1639232757
|
|
||||||
ConditionTimestampMonotonic=13029539
|
|
||||||
AssertTimestamp=@1639232757
|
|
||||||
AssertTimestampMonotonic=13029540
|
|
||||||
```
|
|
||||||
|
|
||||||
(cherry picked from commit ed4a5b434517eeebc508379476cf112704e7981c)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/basic/time-util.c | 11 +++++++++++
|
|
||||||
src/basic/time-util.h | 1 +
|
|
||||||
src/test/test-time-util.c | 5 +++++
|
|
||||||
3 files changed, 17 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/basic/time-util.c b/src/basic/time-util.c
|
|
||||||
index b659d6905d..c0841af8f3 100644
|
|
||||||
--- a/src/basic/time-util.c
|
|
||||||
+++ b/src/basic/time-util.c
|
|
||||||
@@ -320,11 +320,13 @@ char *format_timestamp_style(
|
|
||||||
time_t sec;
|
|
||||||
size_t n;
|
|
||||||
bool utc = false, us = false;
|
|
||||||
+ int r;
|
|
||||||
|
|
||||||
assert(buf);
|
|
||||||
|
|
||||||
switch (style) {
|
|
||||||
case TIMESTAMP_PRETTY:
|
|
||||||
+ case TIMESTAMP_UNIX:
|
|
||||||
break;
|
|
||||||
case TIMESTAMP_US:
|
|
||||||
us = true;
|
|
||||||
@@ -350,6 +352,14 @@ char *format_timestamp_style(
|
|
||||||
if (t <= 0 || t == USEC_INFINITY)
|
|
||||||
return NULL; /* Timestamp is unset */
|
|
||||||
|
|
||||||
+ if (style == TIMESTAMP_UNIX) {
|
|
||||||
+ r = snprintf(buf, l, "@" USEC_FMT, t / USEC_PER_SEC); /* round down µs → s */
|
|
||||||
+ if (r < 0 || (size_t) r >= l)
|
|
||||||
+ return NULL; /* Doesn't fit */
|
|
||||||
+
|
|
||||||
+ return buf;
|
|
||||||
+ }
|
|
||||||
+
|
|
||||||
/* Let's not format times with years > 9999 */
|
|
||||||
if (t > USEC_TIMESTAMP_FORMATTABLE_MAX) {
|
|
||||||
assert(l >= STRLEN("--- XXXX-XX-XX XX:XX:XX") + 1);
|
|
||||||
@@ -1632,6 +1642,7 @@ static const char* const timestamp_style_table[_TIMESTAMP_STYLE_MAX] = {
|
|
||||||
[TIMESTAMP_US] = "us",
|
|
||||||
[TIMESTAMP_UTC] = "utc",
|
|
||||||
[TIMESTAMP_US_UTC] = "us+utc",
|
|
||||||
+ [TIMESTAMP_UNIX] = "unix",
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Use the macro for enum → string to allow for aliases */
|
|
||||||
diff --git a/src/basic/time-util.h b/src/basic/time-util.h
|
|
||||||
index 895af88299..01a72026e3 100644
|
|
||||||
--- a/src/basic/time-util.h
|
|
||||||
+++ b/src/basic/time-util.h
|
|
||||||
@@ -34,6 +34,7 @@ typedef enum TimestampStyle {
|
|
||||||
TIMESTAMP_US,
|
|
||||||
TIMESTAMP_UTC,
|
|
||||||
TIMESTAMP_US_UTC,
|
|
||||||
+ TIMESTAMP_UNIX,
|
|
||||||
_TIMESTAMP_STYLE_MAX,
|
|
||||||
_TIMESTAMP_STYLE_INVALID = -EINVAL,
|
|
||||||
} TimestampStyle;
|
|
||||||
diff --git a/src/test/test-time-util.c b/src/test/test-time-util.c
|
|
||||||
index 554693834b..799d271a44 100644
|
|
||||||
--- a/src/test/test-time-util.c
|
|
||||||
+++ b/src/test/test-time-util.c
|
|
||||||
@@ -325,6 +325,11 @@ TEST(format_timestamp) {
|
|
||||||
assert_se(parse_timestamp(buf, &y) >= 0);
|
|
||||||
assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC);
|
|
||||||
|
|
||||||
+ assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UNIX));
|
|
||||||
+ log_debug("%s", buf);
|
|
||||||
+ assert_se(parse_timestamp(buf, &y) >= 0);
|
|
||||||
+ assert_se(x / USEC_PER_SEC == y / USEC_PER_SEC);
|
|
||||||
+
|
|
||||||
assert_se(format_timestamp_style(buf, sizeof(buf), x, TIMESTAMP_UTC));
|
|
||||||
log_debug("%s", buf);
|
|
||||||
assert_se(parse_timestamp(buf, &y) >= 0);
|
|
@ -1,49 +0,0 @@
|
|||||||
From 17dfcbd7fe332e7559e168520a57b0241d688485 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Mon, 21 Feb 2022 13:14:18 +0100
|
|
||||||
Subject: [PATCH] systemctl,man: update docs for `--timestamp=`
|
|
||||||
|
|
||||||
(cherry picked from commit b58b4a9f379748fec667fb60606de945eaafadbe)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
man/systemctl.xml | 7 +++++++
|
|
||||||
src/systemctl/systemctl.c | 7 ++-----
|
|
||||||
2 files changed, 9 insertions(+), 5 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/man/systemctl.xml b/man/systemctl.xml
|
|
||||||
index 3b3d709ab3..f28579e05d 100644
|
|
||||||
--- a/man/systemctl.xml
|
|
||||||
+++ b/man/systemctl.xml
|
|
||||||
@@ -2305,6 +2305,13 @@ Jan 12 10:46:45 example.com bluetoothd[8900]: gatt-time-server: Input/output err
|
|
||||||
</varlistentry>
|
|
||||||
</variablelist>
|
|
||||||
|
|
||||||
+ <variablelist>
|
|
||||||
+ <varlistentry>
|
|
||||||
+ <term><option>unix</option></term>
|
|
||||||
+ <listitem><para><literal>@seconds-since-the-epoch</literal></para></listitem>
|
|
||||||
+ </varlistentry>
|
|
||||||
+ </variablelist>
|
|
||||||
+
|
|
||||||
<variablelist>
|
|
||||||
<varlistentry>
|
|
||||||
<term><option>us</option></term>
|
|
||||||
diff --git a/src/systemctl/systemctl.c b/src/systemctl/systemctl.c
|
|
||||||
index 9031e685ea..0489796a75 100644
|
|
||||||
--- a/src/systemctl/systemctl.c
|
|
||||||
+++ b/src/systemctl/systemctl.c
|
|
||||||
@@ -296,11 +296,8 @@ static int systemctl_help(void) {
|
|
||||||
" --boot-loader-entry=NAME\n"
|
|
||||||
" Boot into a specific boot loader entry on next boot\n"
|
|
||||||
" --plain Print unit dependencies as a list instead of a tree\n"
|
|
||||||
- " --timestamp=FORMAT Change format of printed timestamps.\n"
|
|
||||||
- " 'pretty' (default): 'Day YYYY-MM-DD HH:MM:SS TZ\n"
|
|
||||||
- " 'us': 'Day YYYY-MM-DD HH:MM:SS.UUUUUU TZ\n"
|
|
||||||
- " 'utc': 'Day YYYY-MM-DD HH:MM:SS UTC\n"
|
|
||||||
- " 'us+utc': 'Day YYYY-MM-DD HH:MM:SS.UUUUUU UTC\n"
|
|
||||||
+ " --timestamp=FORMAT Change format of printed timestamps (pretty, unix,\n"
|
|
||||||
+ " us, utc, us+utc)\n"
|
|
||||||
" --read-only Create read-only bind mount\n"
|
|
||||||
" --mkdir Create directory before mounting, if missing\n"
|
|
||||||
" --marked Restart/reload previously marked units\n"
|
|
200
SOURCES/0043-test-add-test-case-for-recursive-chown-ing.patch
Normal file
200
SOURCES/0043-test-add-test-case-for-recursive-chown-ing.patch
Normal file
@ -0,0 +1,200 @@
|
|||||||
|
From b53f89d56a5b7528735ddf335f8b47ab3e1a947a Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Fri, 19 Oct 2018 11:31:37 +0200
|
||||||
|
Subject: [PATCH] test: add test case for recursive chown()ing
|
||||||
|
|
||||||
|
[msekleta: I removed call to log_test_skipped() and replaced it with older construct log_info() + return EXIT_TEST_SKIP]
|
||||||
|
|
||||||
|
(cherry-picked from commit cb9e44db36caefcbb8ee7a12e14217305ed69ff2)
|
||||||
|
|
||||||
|
Related: #1643368
|
||||||
|
---
|
||||||
|
src/test/meson.build | 5 ++
|
||||||
|
src/test/test-chown-rec.c | 162 ++++++++++++++++++++++++++++++++++++++
|
||||||
|
2 files changed, 167 insertions(+)
|
||||||
|
create mode 100644 src/test/test-chown-rec.c
|
||||||
|
|
||||||
|
diff --git a/src/test/meson.build b/src/test/meson.build
|
||||||
|
index 7da7e3a22c..b982251b1f 100644
|
||||||
|
--- a/src/test/meson.build
|
||||||
|
+++ b/src/test/meson.build
|
||||||
|
@@ -60,6 +60,11 @@ tests += [
|
||||||
|
libmount,
|
||||||
|
libblkid]],
|
||||||
|
|
||||||
|
+ [['src/test/test-chown-rec.c'],
|
||||||
|
+ [libcore,
|
||||||
|
+ libshared],
|
||||||
|
+ []],
|
||||||
|
+
|
||||||
|
[['src/test/test-job-type.c'],
|
||||||
|
[libcore,
|
||||||
|
libshared],
|
||||||
|
diff --git a/src/test/test-chown-rec.c b/src/test/test-chown-rec.c
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000..f16d4d4ba2
|
||||||
|
--- /dev/null
|
||||||
|
+++ b/src/test/test-chown-rec.c
|
||||||
|
@@ -0,0 +1,162 @@
|
||||||
|
+/* SPDX-License-Identifier: LGPL-2.1+ */
|
||||||
|
+
|
||||||
|
+#include <sys/xattr.h>
|
||||||
|
+
|
||||||
|
+#include "alloc-util.h"
|
||||||
|
+#include "chown-recursive.h"
|
||||||
|
+#include "fileio.h"
|
||||||
|
+#include "log.h"
|
||||||
|
+#include "rm-rf.h"
|
||||||
|
+#include "string-util.h"
|
||||||
|
+#include "tests.h"
|
||||||
|
+
|
||||||
|
+static const uint8_t acl[] = {
|
||||||
|
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00,
|
||||||
|
+ 0xff, 0xff, 0xff, 0xff, 0x02, 0x00, 0x07, 0x00,
|
||||||
|
+ 0x02, 0x00, 0x00, 0x00, 0x04, 0x00, 0x07, 0x00,
|
||||||
|
+ 0xff, 0xff, 0xff, 0xff, 0x10, 0x00, 0x07, 0x00,
|
||||||
|
+ 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x05, 0x00,
|
||||||
|
+ 0xff, 0xff, 0xff, 0xff,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static const uint8_t default_acl[] = {
|
||||||
|
+ 0x02, 0x00, 0x00, 0x00, 0x01, 0x00, 0x07, 0x00,
|
||||||
|
+ 0xff, 0xff, 0xff, 0xff, 0x04, 0x00, 0x07, 0x00,
|
||||||
|
+ 0xff, 0xff, 0xff, 0xff, 0x08, 0x00, 0x07, 0x00,
|
||||||
|
+ 0x04, 0x00, 0x00, 0x00, 0x10, 0x00, 0x07, 0x00,
|
||||||
|
+ 0xff, 0xff, 0xff, 0xff, 0x20, 0x00, 0x05, 0x00,
|
||||||
|
+ 0xff, 0xff, 0xff, 0xff,
|
||||||
|
+};
|
||||||
|
+
|
||||||
|
+static bool has_xattr(const char *p) {
|
||||||
|
+ char buffer[sizeof(acl) * 4];
|
||||||
|
+
|
||||||
|
+ if (lgetxattr(p, "system.posix_acl_access", buffer, sizeof(buffer)) < 0) {
|
||||||
|
+ if (IN_SET(errno, EOPNOTSUPP, ENOTTY, ENODATA, ENOSYS))
|
||||||
|
+ return false;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ return true;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void test_chown_recursive(void) {
|
||||||
|
+ _cleanup_(rm_rf_physical_and_freep) char *t = NULL;
|
||||||
|
+ struct stat st;
|
||||||
|
+ const char *p;
|
||||||
|
+
|
||||||
|
+ umask(022);
|
||||||
|
+ assert_se(mkdtemp_malloc(NULL, &t) >= 0);
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir");
|
||||||
|
+ assert_se(mkdir(p, 0777) >= 0);
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISDIR(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0755);
|
||||||
|
+ assert_se(st.st_uid == 0);
|
||||||
|
+ assert_se(st.st_gid == 0);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir/symlink");
|
||||||
|
+ assert_se(symlink("../../", p) >= 0);
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISLNK(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0777);
|
||||||
|
+ assert_se(st.st_uid == 0);
|
||||||
|
+ assert_se(st.st_gid == 0);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir/reg");
|
||||||
|
+ assert_se(mknod(p, S_IFREG|0777, 0) >= 0);
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISREG(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0755);
|
||||||
|
+ assert_se(st.st_uid == 0);
|
||||||
|
+ assert_se(st.st_gid == 0);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir/sock");
|
||||||
|
+ assert_se(mknod(p, S_IFSOCK|0777, 0) >= 0);
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISSOCK(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0755);
|
||||||
|
+ assert_se(st.st_uid == 0);
|
||||||
|
+ assert_se(st.st_gid == 0);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir/fifo");
|
||||||
|
+ assert_se(mknod(p, S_IFIFO|0777, 0) >= 0);
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISFIFO(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0755);
|
||||||
|
+ assert_se(st.st_uid == 0);
|
||||||
|
+ assert_se(st.st_gid == 0);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ /* We now apply an xattr to the dir, and check it again */
|
||||||
|
+ p = strjoina(t, "/dir");
|
||||||
|
+ assert_se(setxattr(p, "system.posix_acl_access", acl, sizeof(acl), 0) >= 0);
|
||||||
|
+ assert_se(setxattr(p, "system.posix_acl_default", default_acl, sizeof(default_acl), 0) >= 0);
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISDIR(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0775); /* acl change changed the mode too */
|
||||||
|
+ assert_se(st.st_uid == 0);
|
||||||
|
+ assert_se(st.st_gid == 0);
|
||||||
|
+ assert_se(has_xattr(p));
|
||||||
|
+
|
||||||
|
+ assert_se(path_chown_recursive(t, 1, 2) >= 0);
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir");
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISDIR(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0775);
|
||||||
|
+ assert_se(st.st_uid == 1);
|
||||||
|
+ assert_se(st.st_gid == 2);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir/symlink");
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISLNK(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0777);
|
||||||
|
+ assert_se(st.st_uid == 1);
|
||||||
|
+ assert_se(st.st_gid == 2);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir/reg");
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISREG(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0755);
|
||||||
|
+ assert_se(st.st_uid == 1);
|
||||||
|
+ assert_se(st.st_gid == 2);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir/sock");
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISSOCK(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0755);
|
||||||
|
+ assert_se(st.st_uid == 1);
|
||||||
|
+ assert_se(st.st_gid == 2);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+
|
||||||
|
+ p = strjoina(t, "/dir/fifo");
|
||||||
|
+ assert_se(lstat(p, &st) >= 0);
|
||||||
|
+ assert_se(S_ISFIFO(st.st_mode));
|
||||||
|
+ assert_se((st.st_mode & 07777) == 0755);
|
||||||
|
+ assert_se(st.st_uid == 1);
|
||||||
|
+ assert_se(st.st_gid == 2);
|
||||||
|
+ assert_se(!has_xattr(p));
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+int main(int argc, char *argv[]) {
|
||||||
|
+ log_set_max_level(LOG_DEBUG);
|
||||||
|
+ log_parse_environment();
|
||||||
|
+ log_open();
|
||||||
|
+
|
||||||
|
+ if (geteuid() != 0) {
|
||||||
|
+ log_info("not running as root");
|
||||||
|
+ return EXIT_TEST_SKIP;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ test_chown_recursive();
|
||||||
|
+
|
||||||
|
+ return EXIT_SUCCESS;
|
||||||
|
+}
|
@ -0,0 +1,32 @@
|
|||||||
|
From 730ce6562f8a5f4a61d1ed3ffb4d65fa27b728fc Mon Sep 17 00:00:00 2001
|
||||||
|
From: Thomas Hindoe Paaboel Andersen <phomes@gmail.com>
|
||||||
|
Date: Fri, 17 Aug 2018 21:31:05 +0200
|
||||||
|
Subject: [PATCH] Revert "sysctl.d: request ECN on both in and outgoing
|
||||||
|
connections"
|
||||||
|
|
||||||
|
Turning on ECN still causes slow or broken network on linux. Our tcp
|
||||||
|
is not yet ready for wide spread use of ECN.
|
||||||
|
|
||||||
|
This reverts commit 919472741dba6ad0a3f6c2b76d390a02d0e2fdc3.
|
||||||
|
|
||||||
|
(cherry picked from commit 1e190dfd5bb95036f937ef1dc46f43eb0a146612)
|
||||||
|
|
||||||
|
Resolves: #1619790
|
||||||
|
---
|
||||||
|
sysctl.d/50-default.conf | 3 ---
|
||||||
|
1 file changed, 3 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/sysctl.d/50-default.conf b/sysctl.d/50-default.conf
|
||||||
|
index b67ae87ca6..e263cf0628 100644
|
||||||
|
--- a/sysctl.d/50-default.conf
|
||||||
|
+++ b/sysctl.d/50-default.conf
|
||||||
|
@@ -33,9 +33,6 @@ net.ipv4.conf.all.promote_secondaries = 1
|
||||||
|
# Fair Queue CoDel packet scheduler to fight bufferbloat
|
||||||
|
net.core.default_qdisc = fq_codel
|
||||||
|
|
||||||
|
-# Request Explicit Congestion Notification (ECN) on both in and outgoing connections
|
||||||
|
-net.ipv4.tcp_ecn = 1
|
||||||
|
-
|
||||||
|
# Enable hard and soft link protection
|
||||||
|
fs.protected_hardlinks = 1
|
||||||
|
fs.protected_symlinks = 1
|
@ -1,69 +0,0 @@
|
|||||||
From ab458e74eccf14550711ca024e9176fba7993abc Mon Sep 17 00:00:00 2001
|
|
||||||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
|
||||||
Date: Fri, 18 Feb 2022 23:09:18 +0100
|
|
||||||
Subject: [PATCH] systemctl: make `--timestamp=` affect the `show` verb as well
|
|
||||||
|
|
||||||
Currently the `--timestamp=` option has no effect on timestamps shown by
|
|
||||||
`systemctl show`, let's fix that.
|
|
||||||
|
|
||||||
Spotted in #22567.
|
|
||||||
|
|
||||||
Before:
|
|
||||||
```
|
|
||||||
$ systemctl show --timestamp=us+utc systemd-journald | grep Timestamp=
|
|
||||||
ExecMainStartTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
StateChangeTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
InactiveExitTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
ActiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
ActiveExitTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
InactiveEnterTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
ConditionTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
AssertTimestamp=Sat 2021-12-11 15:25:57 CET
|
|
||||||
```
|
|
||||||
|
|
||||||
After:
|
|
||||||
```
|
|
||||||
$ systemctl show --timestamp=us+utc systemd-journald | grep Timestamp=
|
|
||||||
ExecMainStartTimestamp=Sat 2021-12-11 14:25:57.177848 UTC
|
|
||||||
StateChangeTimestamp=Sat 2021-12-11 14:25:57.196714 UTC
|
|
||||||
InactiveExitTimestamp=Sat 2021-12-11 14:25:57.177871 UTC
|
|
||||||
ActiveEnterTimestamp=Sat 2021-12-11 14:25:57.196714 UTC
|
|
||||||
ActiveExitTimestamp=Sat 2021-12-11 14:25:57.144677 UTC
|
|
||||||
InactiveEnterTimestamp=Sat 2021-12-11 14:25:57.176331 UTC
|
|
||||||
ConditionTimestamp=Sat 2021-12-11 14:25:57.176980 UTC
|
|
||||||
AssertTimestamp=Sat 2021-12-11 14:25:57.176980 UTC
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
(cherry picked from commit a59e5c625da5a6e0c46e493d55f2f4212e9457ca)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/systemctl/systemctl-show.c | 14 ++++++++++++++
|
|
||||||
1 file changed, 14 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/src/systemctl/systemctl-show.c b/src/systemctl/systemctl-show.c
|
|
||||||
index 9b23471990..7a6655da74 100644
|
|
||||||
--- a/src/systemctl/systemctl-show.c
|
|
||||||
+++ b/src/systemctl/systemctl-show.c
|
|
||||||
@@ -1001,6 +1001,20 @@ static int print_property(const char *name, const char *expected_value, sd_bus_m
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
|
|
||||||
+ case SD_BUS_TYPE_UINT64:
|
|
||||||
+ if (endswith(name, "Timestamp")) {
|
|
||||||
+ uint64_t timestamp;
|
|
||||||
+
|
|
||||||
+ r = sd_bus_message_read_basic(m, bus_type, ×tamp);
|
|
||||||
+ if (r < 0)
|
|
||||||
+ return r;
|
|
||||||
+
|
|
||||||
+ bus_print_property_value(name, expected_value, flags, FORMAT_TIMESTAMP_STYLE(timestamp, arg_timestamp_style));
|
|
||||||
+
|
|
||||||
+ return 1;
|
|
||||||
+ }
|
|
||||||
+ break;
|
|
||||||
+
|
|
||||||
case SD_BUS_TYPE_STRUCT:
|
|
||||||
|
|
||||||
if (contents[0] == SD_BUS_TYPE_UINT32 && streq(name, "Job")) {
|
|
@ -0,0 +1,84 @@
|
|||||||
|
From 886e5b028953404f2d924b561c0689d3e50dbbf4 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||||
|
Date: Thu, 13 Sep 2018 09:24:36 +0200
|
||||||
|
Subject: [PATCH] detect-virt: do not try to read all of /proc/cpuinfo
|
||||||
|
|
||||||
|
Quoting https://github.com/systemd/systemd/issues/10074:
|
||||||
|
> detect_vm_uml() reads /proc/cpuinfo with read_full_file()
|
||||||
|
> read_full_file() has a file max limit size of READ_FULL_BYTES_MAX=(4U*1024U*1024U)
|
||||||
|
> Unfortunately, the size of my /proc/cpuinfo is bigger, approximately:
|
||||||
|
> echo $(( 4* $(cat /proc/cpuinfo | wc -c)))
|
||||||
|
> 9918072
|
||||||
|
> This causes read_full_file() to fail and the Condition test fallout.
|
||||||
|
|
||||||
|
Let's just read line by line until we find an intersting line. This also
|
||||||
|
helps if not running under UML, because we avoid reading as much data.
|
||||||
|
|
||||||
|
(cherry picked from commit 6058516a14ada1748313af6783f5b4e7e3006654)
|
||||||
|
|
||||||
|
Resolves: #1631532
|
||||||
|
---
|
||||||
|
src/basic/virt.c | 38 ++++++++++++++++++++++++++++----------
|
||||||
|
1 file changed, 28 insertions(+), 10 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/basic/virt.c b/src/basic/virt.c
|
||||||
|
index d347732bb3..e05b3e6d99 100644
|
||||||
|
--- a/src/basic/virt.c
|
||||||
|
+++ b/src/basic/virt.c
|
||||||
|
@@ -11,6 +11,7 @@
|
||||||
|
|
||||||
|
#include "alloc-util.h"
|
||||||
|
#include "dirent-util.h"
|
||||||
|
+#include "def.h"
|
||||||
|
#include "env-util.h"
|
||||||
|
#include "fd-util.h"
|
||||||
|
#include "fileio.h"
|
||||||
|
@@ -259,21 +260,38 @@ static int detect_vm_hypervisor(void) {
|
||||||
|
}
|
||||||
|
|
||||||
|
static int detect_vm_uml(void) {
|
||||||
|
- _cleanup_free_ char *cpuinfo_contents = NULL;
|
||||||
|
+ _cleanup_fclose_ FILE *f = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
/* Detect User-Mode Linux by reading /proc/cpuinfo */
|
||||||
|
- r = read_full_file("/proc/cpuinfo", &cpuinfo_contents, NULL);
|
||||||
|
- if (r == -ENOENT) {
|
||||||
|
- log_debug("/proc/cpuinfo not found, assuming no UML virtualization.");
|
||||||
|
- return VIRTUALIZATION_NONE;
|
||||||
|
+ f = fopen("/proc/cpuinfo", "re");
|
||||||
|
+ if (!f) {
|
||||||
|
+ if (errno == ENOENT) {
|
||||||
|
+ log_debug("/proc/cpuinfo not found, assuming no UML virtualization.");
|
||||||
|
+ return VIRTUALIZATION_NONE;
|
||||||
|
+ }
|
||||||
|
+ return -errno;
|
||||||
|
}
|
||||||
|
- if (r < 0)
|
||||||
|
- return r;
|
||||||
|
|
||||||
|
- if (strstr(cpuinfo_contents, "\nvendor_id\t: User Mode Linux\n")) {
|
||||||
|
- log_debug("UML virtualization found in /proc/cpuinfo");
|
||||||
|
- return VIRTUALIZATION_UML;
|
||||||
|
+ for (;;) {
|
||||||
|
+ _cleanup_free_ char *line = NULL;
|
||||||
|
+ const char *t;
|
||||||
|
+
|
||||||
|
+ r = read_line(f, LONG_LINE_MAX, &line);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+ if (r == 0)
|
||||||
|
+ break;
|
||||||
|
+
|
||||||
|
+ t = startswith(line, "vendor_id\t: ");
|
||||||
|
+ if (t) {
|
||||||
|
+ if (startswith(t, "User Mode Linux")) {
|
||||||
|
+ log_debug("UML virtualization found in /proc/cpuinfo");
|
||||||
|
+ return VIRTUALIZATION_UML;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ break;
|
||||||
|
+ }
|
||||||
|
}
|
||||||
|
|
||||||
|
log_debug("UML virtualization not found in /proc/cpuinfo.");
|
@ -1,39 +0,0 @@
|
|||||||
From fdd32f48af7993305f65989162dedd75a929966a Mon Sep 17 00:00:00 2001
|
|
||||||
From: Evgeny Vereshchagin <evvers@ya.ru>
|
|
||||||
Date: Tue, 15 Feb 2022 01:13:10 +0000
|
|
||||||
Subject: [PATCH] tests: allow running all the services with SYSTEMD_LOG_LEVEL
|
|
||||||
|
|
||||||
It should make it easier to figure out what exactly services do there.
|
|
||||||
For example, with SYSTEMD_LOG_LEVEL=debug userdbd (v249) prints
|
|
||||||
```
|
|
||||||
varlink-5: New incoming message: {"method":"io.systemd.UserDatabase.GetUserRecord","parameters":{}}
|
|
||||||
```
|
|
||||||
before it crashes and systemd-resolved prints
|
|
||||||
```
|
|
||||||
varlink-21: New incoming message: {"method":"io.systemd.Resolve.ResolveAddress","parameters":{"address":[127,0,0,1],"flags":0,"ifindex":1000000,"family":0}}
|
|
||||||
```
|
|
||||||
and those messages are helpful (especially when scripts causing them
|
|
||||||
aren't clever enough to keep track of random stuff they send to systemd
|
|
||||||
:-))
|
|
||||||
|
|
||||||
(cherry picked from commit bf6ef6b6a9156e5f52ee69ce0c529a246f103e54)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
test/test-functions | 3 +++
|
|
||||||
1 file changed, 3 insertions(+)
|
|
||||||
|
|
||||||
diff --git a/test/test-functions b/test/test-functions
|
|
||||||
index dcc893733c..a299f5ff1f 100644
|
|
||||||
--- a/test/test-functions
|
|
||||||
+++ b/test/test-functions
|
|
||||||
@@ -1142,6 +1142,9 @@ install_systemd() {
|
|
||||||
|
|
||||||
# enable debug logging in PID1
|
|
||||||
echo LogLevel=debug >>"$initdir/etc/systemd/system.conf"
|
|
||||||
+ if [[ -n "$TEST_SYSTEMD_LOG_LEVEL" ]]; then
|
|
||||||
+ echo DefaultEnvironment=SYSTEMD_LOG_LEVEL="$TEST_SYSTEMD_LOG_LEVEL" >>"$initdir/etc/systemd/system.conf"
|
|
||||||
+ fi
|
|
||||||
# store coredumps in journal
|
|
||||||
echo Storage=journal >>"$initdir/etc/systemd/coredump.conf"
|
|
||||||
# Propagate SYSTEMD_UNIT_PATH to user systemd managers
|
|
@ -1,46 +0,0 @@
|
|||||||
From 19d3bf238c41c756b391fc7e66e5217cde42a896 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Tue, 8 Feb 2022 11:52:17 +0100
|
|
||||||
Subject: [PATCH] coredump: raise the coredump save size on 64bit systems to
|
|
||||||
32G (and lower it to 1G on 32bit systems)
|
|
||||||
|
|
||||||
Apparently 2G is too low for various real-life systems. But raising it
|
|
||||||
universally above 2^32 sounds wrong to me, since that makes no sense on
|
|
||||||
32bit systems, that we still support.
|
|
||||||
|
|
||||||
Hence, let's raise the limit to 32G on 64bit systems, and *lower* it to
|
|
||||||
1G on 32bit systems.
|
|
||||||
|
|
||||||
32G is 4 orders of magnitude higher then the old settings. Let's hope
|
|
||||||
that's enough for now. Should this not be enough we can raise it
|
|
||||||
further.
|
|
||||||
|
|
||||||
Fixes: #22076
|
|
||||||
(cherry picked from commit e677041e7a6988f73de802db6e49d962d432944b)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/coredump/coredump.c | 10 ++++++++--
|
|
||||||
1 file changed, 8 insertions(+), 2 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/coredump/coredump.c b/src/coredump/coredump.c
|
|
||||||
index 6a6e9765d4..fd156370b2 100644
|
|
||||||
--- a/src/coredump/coredump.c
|
|
||||||
+++ b/src/coredump/coredump.c
|
|
||||||
@@ -48,8 +48,14 @@
|
|
||||||
#include "uid-alloc-range.h"
|
|
||||||
#include "user-util.h"
|
|
||||||
|
|
||||||
-/* The maximum size up to which we process coredumps */
|
|
||||||
-#define PROCESS_SIZE_MAX ((uint64_t) (2LLU*1024LLU*1024LLU*1024LLU))
|
|
||||||
+/* The maximum size up to which we process coredumps. We use 1G on 32bit systems, and 32G on 64bit systems */
|
|
||||||
+#if __SIZEOF_POINTER__ == 4
|
|
||||||
+#define PROCESS_SIZE_MAX ((uint64_t) (1LLU*1024LLU*1024LLU*1024LLU))
|
|
||||||
+#elif __SIZEOF_POINTER__ == 8
|
|
||||||
+#define PROCESS_SIZE_MAX ((uint64_t) (32LLU*1024LLU*1024LLU*1024LLU))
|
|
||||||
+#else
|
|
||||||
+#error "Unexpected pointer size"
|
|
||||||
+#endif
|
|
||||||
|
|
||||||
/* The maximum size up to which we leave the coredump around on disk */
|
|
||||||
#define EXTERNAL_SIZE_MAX PROCESS_SIZE_MAX
|
|
@ -0,0 +1,166 @@
|
|||||||
|
From eb141ba81158feb74118da4e7a3f2266b11ffe10 Mon Sep 17 00:00:00 2001
|
||||||
|
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
||||||
|
Date: Mon, 9 Jul 2018 08:06:28 +0200
|
||||||
|
Subject: [PATCH] sd-bus: unify three code-paths which free struct
|
||||||
|
bus_container
|
||||||
|
|
||||||
|
We didn't free one of the fields in two of the places.
|
||||||
|
|
||||||
|
$ valgrind --show-leak-kinds=all --leak-check=full \
|
||||||
|
build/fuzz-bus-message \
|
||||||
|
test/fuzz/fuzz-bus-message/leak-c09c0e2256d43bc5e2d02748c8d8760e7bc25d20
|
||||||
|
...
|
||||||
|
==14457== HEAP SUMMARY:
|
||||||
|
==14457== in use at exit: 3 bytes in 1 blocks
|
||||||
|
==14457== total heap usage: 509 allocs, 508 frees, 51,016 bytes allocated
|
||||||
|
==14457==
|
||||||
|
==14457== 3 bytes in 1 blocks are definitely lost in loss record 1 of 1
|
||||||
|
==14457== at 0x4C2EBAB: malloc (vg_replace_malloc.c:299)
|
||||||
|
==14457== by 0x53AFE79: strndup (in /usr/lib64/libc-2.27.so)
|
||||||
|
==14457== by 0x4F52EB8: free_and_strndup (string-util.c:1039)
|
||||||
|
==14457== by 0x4F8E1AB: sd_bus_message_peek_type (bus-message.c:4193)
|
||||||
|
==14457== by 0x4F76CB5: bus_message_dump (bus-dump.c:144)
|
||||||
|
==14457== by 0x108F12: LLVMFuzzerTestOneInput (fuzz-bus-message.c:24)
|
||||||
|
==14457== by 0x1090F7: main (fuzz-main.c:34)
|
||||||
|
==14457==
|
||||||
|
==14457== LEAK SUMMARY:
|
||||||
|
==14457== definitely lost: 3 bytes in 1 blocks
|
||||||
|
|
||||||
|
(cherry picked from commit 6d1e0f4fcba8d6f425da3dc91805db95399b3c8b)
|
||||||
|
Resolves: #1635435
|
||||||
|
---
|
||||||
|
src/libsystemd/sd-bus/bus-message.c | 64 +++++++++---------
|
||||||
|
...k-c09c0e2256d43bc5e2d02748c8d8760e7bc25d20 | Bin 0 -> 534 bytes
|
||||||
|
2 files changed, 32 insertions(+), 32 deletions(-)
|
||||||
|
create mode 100644 test/fuzz/fuzz-bus-message/leak-c09c0e2256d43bc5e2d02748c8d8760e7bc25d20
|
||||||
|
|
||||||
|
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
index 7c8bad2bdd..d55cb14843 100644
|
||||||
|
--- a/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
+++ b/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
@@ -77,19 +77,38 @@ static void message_reset_parts(sd_bus_message *m) {
|
||||||
|
m->cached_rindex_part_begin = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static void message_reset_containers(sd_bus_message *m) {
|
||||||
|
- unsigned i;
|
||||||
|
+static struct bus_container *message_get_container(sd_bus_message *m) {
|
||||||
|
+ assert(m);
|
||||||
|
+
|
||||||
|
+ if (m->n_containers == 0)
|
||||||
|
+ return &m->root_container;
|
||||||
|
+
|
||||||
|
+ assert(m->containers);
|
||||||
|
+ return m->containers + m->n_containers - 1;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
+static void message_free_last_container(sd_bus_message *m) {
|
||||||
|
+ struct bus_container *c;
|
||||||
|
+
|
||||||
|
+ c = message_get_container(m);
|
||||||
|
+
|
||||||
|
+ free(c->signature);
|
||||||
|
+ free(c->peeked_signature);
|
||||||
|
+ free(c->offsets);
|
||||||
|
+
|
||||||
|
+ /* Move to previous container, but not if we are on root container */
|
||||||
|
+ if (m->n_containers > 0)
|
||||||
|
+ m->n_containers--;
|
||||||
|
+}
|
||||||
|
|
||||||
|
+static void message_reset_containers(sd_bus_message *m) {
|
||||||
|
assert(m);
|
||||||
|
|
||||||
|
- for (i = 0; i < m->n_containers; i++) {
|
||||||
|
- free(m->containers[i].signature);
|
||||||
|
- free(m->containers[i].offsets);
|
||||||
|
- }
|
||||||
|
+ while (m->n_containers > 0)
|
||||||
|
+ message_free_last_container(m);
|
||||||
|
|
||||||
|
m->containers = mfree(m->containers);
|
||||||
|
-
|
||||||
|
- m->n_containers = m->containers_allocated = 0;
|
||||||
|
+ m->containers_allocated = 0;
|
||||||
|
m->root_container.index = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
@@ -112,10 +131,8 @@ static sd_bus_message* message_free(sd_bus_message *m) {
|
||||||
|
free(m->iovec);
|
||||||
|
|
||||||
|
message_reset_containers(m);
|
||||||
|
- free(m->root_container.signature);
|
||||||
|
- free(m->root_container.offsets);
|
||||||
|
-
|
||||||
|
- free(m->root_container.peeked_signature);
|
||||||
|
+ assert(m->n_containers == 0);
|
||||||
|
+ message_free_last_container(m);
|
||||||
|
|
||||||
|
bus_creds_done(&m->creds);
|
||||||
|
return mfree(m);
|
||||||
|
@@ -1113,16 +1130,6 @@ _public_ int sd_bus_message_set_allow_interactive_authorization(sd_bus_message *
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
-static struct bus_container *message_get_container(sd_bus_message *m) {
|
||||||
|
- assert(m);
|
||||||
|
-
|
||||||
|
- if (m->n_containers == 0)
|
||||||
|
- return &m->root_container;
|
||||||
|
-
|
||||||
|
- assert(m->containers);
|
||||||
|
- return m->containers + m->n_containers - 1;
|
||||||
|
-}
|
||||||
|
-
|
||||||
|
struct bus_body_part *message_append_part(sd_bus_message *m) {
|
||||||
|
struct bus_body_part *part;
|
||||||
|
|
||||||
|
@@ -4108,13 +4115,9 @@ _public_ int sd_bus_message_exit_container(sd_bus_message *m) {
|
||||||
|
return -EBUSY;
|
||||||
|
}
|
||||||
|
|
||||||
|
- free(c->signature);
|
||||||
|
- free(c->peeked_signature);
|
||||||
|
- free(c->offsets);
|
||||||
|
- m->n_containers--;
|
||||||
|
+ message_free_last_container(m);
|
||||||
|
|
||||||
|
c = message_get_container(m);
|
||||||
|
-
|
||||||
|
saved = c->index;
|
||||||
|
c->index = c->saved_index;
|
||||||
|
r = container_next_item(m, c, &m->rindex);
|
||||||
|
@@ -4132,16 +4135,13 @@ static void message_quit_container(sd_bus_message *m) {
|
||||||
|
assert(m->sealed);
|
||||||
|
assert(m->n_containers > 0);
|
||||||
|
|
||||||
|
- c = message_get_container(m);
|
||||||
|
-
|
||||||
|
/* Undo seeks */
|
||||||
|
+ c = message_get_container(m);
|
||||||
|
assert(m->rindex >= c->before);
|
||||||
|
m->rindex = c->before;
|
||||||
|
|
||||||
|
/* Free container */
|
||||||
|
- free(c->signature);
|
||||||
|
- free(c->offsets);
|
||||||
|
- m->n_containers--;
|
||||||
|
+ message_free_last_container(m);
|
||||||
|
|
||||||
|
/* Correct index of new top-level container */
|
||||||
|
c = message_get_container(m);
|
||||||
|
diff --git a/test/fuzz/fuzz-bus-message/leak-c09c0e2256d43bc5e2d02748c8d8760e7bc25d20 b/test/fuzz/fuzz-bus-message/leak-c09c0e2256d43bc5e2d02748c8d8760e7bc25d20
|
||||||
|
new file mode 100644
|
||||||
|
index 0000000000000000000000000000000000000000..c371824ffb604708619fd0713e8fca609bac18f7
|
||||||
|
GIT binary patch
|
||||||
|
literal 534
|
||||||
|
zcmZ{h!A`?442GSJP20o?A&zJgm*%p<cmZx)c?GB2N~MZabq0zMhzqX`{7ze`LYk$&
|
||||||
|
z_LnqH{-ic!J`GWMLG(>T#&`l!4rxq{&>8YmwQrOs;B(}I_m11m8`nFp<MR{a3sX`q
|
||||||
|
z!cs!Q@A35`W+B>`#ek1>oQYVSs`!XH?7Y=}3y9Ye+UliL9^x9s66$8wH+TPdOG`n|
|
||||||
|
z5Uhx<nM2)KiEdF(J5Ct}Xa*iksL!VNssA<Hq<KDseGAsT^*)9kK$?O39;dyGTv
|
||||||
|
zLhpD3X)k6@tX`CzbBVV-7e$fy9()CjJ&n(=^)uJCKFB5Xi}-<1ru7po5XlEJ?uByQ
|
||||||
|
MaEPzRhwknF02{PjtN;K2
|
||||||
|
|
||||||
|
literal 0
|
||||||
|
HcmV?d00001
|
||||||
|
|
@ -1,644 +0,0 @@
|
|||||||
From 389cc9af2087aa5369ac6bf0124d14877d541966 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Lennart Poettering <lennart@poettering.net>
|
|
||||||
Date: Fri, 4 Feb 2022 17:39:44 +0100
|
|
||||||
Subject: [PATCH] repart: fix sector size handling
|
|
||||||
|
|
||||||
This queries the sector size from libfdisk instead of assuming 512, and
|
|
||||||
uses that when converting from bytes to the offset/size values libfdisk
|
|
||||||
expects.
|
|
||||||
|
|
||||||
This is an alternative to Tom Yan's #21823, but prefers using libfdisk's
|
|
||||||
own ideas of the sector size instead of going directly to the backing
|
|
||||||
device via ioctls. (libfdisk can after all also operate on regular
|
|
||||||
files, where the sector size concept doesn't necessarily apply the same
|
|
||||||
way.)
|
|
||||||
|
|
||||||
This also makes the "grain" variable, i.e. how we'll align the
|
|
||||||
partitions. Previously this was hardcoded to 4K, and that still will be
|
|
||||||
the minimum grain we use, but should the sector size be larger than that
|
|
||||||
we'll use the next multiple of the sector size instead.
|
|
||||||
|
|
||||||
(cherry picked from commit 994b303123ebe6a140bf3e56c66aa66119ae7d95)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/partition/repart.c | 212 +++++++++++++++++++++++++----------------
|
|
||||||
1 file changed, 132 insertions(+), 80 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/partition/repart.c b/src/partition/repart.c
|
|
||||||
index d08f47f2c4..0862a37a8d 100644
|
|
||||||
--- a/src/partition/repart.c
|
|
||||||
+++ b/src/partition/repart.c
|
|
||||||
@@ -195,6 +195,8 @@ struct Context {
|
|
||||||
uint64_t start, end, total;
|
|
||||||
|
|
||||||
struct fdisk_context *fdisk_context;
|
|
||||||
+ uint64_t sector_size;
|
|
||||||
+ uint64_t grain_size;
|
|
||||||
|
|
||||||
sd_id128_t seed;
|
|
||||||
};
|
|
||||||
@@ -407,9 +409,12 @@ static bool context_drop_one_priority(Context *context) {
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static uint64_t partition_min_size(const Partition *p) {
|
|
||||||
+static uint64_t partition_min_size(Context *context, const Partition *p) {
|
|
||||||
uint64_t sz;
|
|
||||||
|
|
||||||
+ assert(context);
|
|
||||||
+ assert(p);
|
|
||||||
+
|
|
||||||
/* Calculate the disk space we really need at minimum for this partition. If the partition already
|
|
||||||
* exists the current size is what we really need. If it doesn't exist yet refuse to allocate less
|
|
||||||
* than 4K.
|
|
||||||
@@ -428,50 +433,60 @@ static uint64_t partition_min_size(const Partition *p) {
|
|
||||||
uint64_t d = 0;
|
|
||||||
|
|
||||||
if (p->encrypt != ENCRYPT_OFF)
|
|
||||||
- d += round_up_size(LUKS2_METADATA_SIZE, 4096);
|
|
||||||
+ d += round_up_size(LUKS2_METADATA_SIZE, context->grain_size);
|
|
||||||
|
|
||||||
if (p->copy_blocks_size != UINT64_MAX)
|
|
||||||
- d += round_up_size(p->copy_blocks_size, 4096);
|
|
||||||
+ d += round_up_size(p->copy_blocks_size, context->grain_size);
|
|
||||||
else if (p->format || p->encrypt != ENCRYPT_OFF) {
|
|
||||||
uint64_t f;
|
|
||||||
|
|
||||||
/* If we shall synthesize a file system, take minimal fs size into account (assumed to be 4K if not known) */
|
|
||||||
- f = p->format ? minimal_size_by_fs_name(p->format) : UINT64_MAX;
|
|
||||||
- d += f == UINT64_MAX ? 4096 : f;
|
|
||||||
+ f = p->format ? round_up_size(minimal_size_by_fs_name(p->format), context->grain_size) : UINT64_MAX;
|
|
||||||
+ d += f == UINT64_MAX ? context->grain_size : f;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (d > sz)
|
|
||||||
sz = d;
|
|
||||||
}
|
|
||||||
|
|
||||||
- return MAX(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, sz);
|
|
||||||
+ return MAX(round_up_size(p->size_min != UINT64_MAX ? p->size_min : DEFAULT_MIN_SIZE, context->grain_size), sz);
|
|
||||||
}
|
|
||||||
|
|
||||||
-static uint64_t partition_max_size(const Partition *p) {
|
|
||||||
+static uint64_t partition_max_size(const Context *context, const Partition *p) {
|
|
||||||
+ uint64_t sm;
|
|
||||||
+
|
|
||||||
/* Calculate how large the partition may become at max. This is generally the configured maximum
|
|
||||||
* size, except when it already exists and is larger than that. In that case it's the existing size,
|
|
||||||
* since we never want to shrink partitions. */
|
|
||||||
|
|
||||||
+ assert(context);
|
|
||||||
+ assert(p);
|
|
||||||
+
|
|
||||||
if (PARTITION_IS_FOREIGN(p)) {
|
|
||||||
/* Don't allow changing size of partitions not managed by us */
|
|
||||||
assert(p->current_size != UINT64_MAX);
|
|
||||||
return p->current_size;
|
|
||||||
}
|
|
||||||
|
|
||||||
+ sm = round_down_size(p->size_max, context->grain_size);
|
|
||||||
+
|
|
||||||
if (p->current_size != UINT64_MAX)
|
|
||||||
- return MAX(p->current_size, p->size_max);
|
|
||||||
+ return MAX(p->current_size, sm);
|
|
||||||
|
|
||||||
- return p->size_max;
|
|
||||||
+ return sm;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static uint64_t partition_min_size_with_padding(const Partition *p) {
|
|
||||||
+static uint64_t partition_min_size_with_padding(Context *context, const Partition *p) {
|
|
||||||
uint64_t sz;
|
|
||||||
|
|
||||||
/* Calculate the disk space we need for this partition plus any free space coming after it. This
|
|
||||||
* takes user configured padding into account as well as any additional whitespace needed to align
|
|
||||||
* the next partition to 4K again. */
|
|
||||||
|
|
||||||
- sz = partition_min_size(p);
|
|
||||||
+ assert(context);
|
|
||||||
+ assert(p);
|
|
||||||
+
|
|
||||||
+ sz = partition_min_size(context, p);
|
|
||||||
|
|
||||||
if (p->padding_min != UINT64_MAX)
|
|
||||||
sz += p->padding_min;
|
|
||||||
@@ -479,11 +494,11 @@ static uint64_t partition_min_size_with_padding(const Partition *p) {
|
|
||||||
if (PARTITION_EXISTS(p)) {
|
|
||||||
/* If the partition wasn't aligned, add extra space so that any we might add will be aligned */
|
|
||||||
assert(p->offset != UINT64_MAX);
|
|
||||||
- return round_up_size(p->offset + sz, 4096) - p->offset;
|
|
||||||
+ return round_up_size(p->offset + sz, context->grain_size) - p->offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* If this is a new partition we'll place it aligned, hence we just need to round up the required size here */
|
|
||||||
- return round_up_size(sz, 4096);
|
|
||||||
+ return round_up_size(sz, context->grain_size);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint64_t free_area_available(const FreeArea *a) {
|
|
||||||
@@ -495,9 +510,12 @@ static uint64_t free_area_available(const FreeArea *a) {
|
|
||||||
return a->size - a->allocated;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static uint64_t free_area_available_for_new_partitions(const FreeArea *a) {
|
|
||||||
+static uint64_t free_area_available_for_new_partitions(Context *context, const FreeArea *a) {
|
|
||||||
uint64_t avail;
|
|
||||||
|
|
||||||
+ assert(context);
|
|
||||||
+ assert(a);
|
|
||||||
+
|
|
||||||
/* Similar to free_area_available(), but takes into account that the required size and padding of the
|
|
||||||
* preceding partition is honoured. */
|
|
||||||
|
|
||||||
@@ -505,16 +523,16 @@ static uint64_t free_area_available_for_new_partitions(const FreeArea *a) {
|
|
||||||
if (a->after) {
|
|
||||||
uint64_t need, space_end, new_end;
|
|
||||||
|
|
||||||
- need = partition_min_size_with_padding(a->after);
|
|
||||||
+ need = partition_min_size_with_padding(context, a->after);
|
|
||||||
|
|
||||||
assert(a->after->offset != UINT64_MAX);
|
|
||||||
assert(a->after->current_size != UINT64_MAX);
|
|
||||||
|
|
||||||
/* Calculate where the free area ends, based on the offset of the partition preceding it */
|
|
||||||
- space_end = round_up_size(a->after->offset + a->after->current_size, 4096) + avail;
|
|
||||||
+ space_end = round_up_size(a->after->offset + a->after->current_size, context->grain_size) + avail;
|
|
||||||
|
|
||||||
/* Calculate where the partition would end when we give it as much as it needs */
|
|
||||||
- new_end = round_up_size(a->after->offset + need, 4096);
|
|
||||||
+ new_end = round_up_size(a->after->offset + need, context->grain_size);
|
|
||||||
|
|
||||||
/* Calculate saturated difference of the two: that's how much we have free for other partitions */
|
|
||||||
return LESS_BY(space_end, new_end);
|
|
||||||
@@ -523,15 +541,18 @@ static uint64_t free_area_available_for_new_partitions(const FreeArea *a) {
|
|
||||||
return avail;
|
|
||||||
}
|
|
||||||
|
|
||||||
-static int free_area_compare(FreeArea *const *a, FreeArea *const*b) {
|
|
||||||
- return CMP(free_area_available_for_new_partitions(*a),
|
|
||||||
- free_area_available_for_new_partitions(*b));
|
|
||||||
+static int free_area_compare(FreeArea *const *a, FreeArea *const*b, Context *context) {
|
|
||||||
+ assert(context);
|
|
||||||
+
|
|
||||||
+ return CMP(free_area_available_for_new_partitions(context, *a),
|
|
||||||
+ free_area_available_for_new_partitions(context, *b));
|
|
||||||
}
|
|
||||||
|
|
||||||
-static uint64_t charge_size(uint64_t total, uint64_t amount) {
|
|
||||||
+static uint64_t charge_size(Context *context, uint64_t total, uint64_t amount) {
|
|
||||||
+ assert(context);
|
|
||||||
/* Subtract the specified amount from total, rounding up to multiple of 4K if there's room */
|
|
||||||
assert(amount <= total);
|
|
||||||
- return LESS_BY(total, round_up_size(amount, 4096));
|
|
||||||
+ return LESS_BY(total, round_up_size(amount, context->grain_size));
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint64_t charge_weight(uint64_t total, uint64_t amount) {
|
|
||||||
@@ -545,14 +566,14 @@ static bool context_allocate_partitions(Context *context, uint64_t *ret_largest_
|
|
||||||
assert(context);
|
|
||||||
|
|
||||||
/* Sort free areas by size, putting smallest first */
|
|
||||||
- typesafe_qsort(context->free_areas, context->n_free_areas, free_area_compare);
|
|
||||||
+ typesafe_qsort_r(context->free_areas, context->n_free_areas, free_area_compare, context);
|
|
||||||
|
|
||||||
/* In any case return size of the largest free area (i.e. not the size of all free areas
|
|
||||||
* combined!) */
|
|
||||||
if (ret_largest_free_area)
|
|
||||||
*ret_largest_free_area =
|
|
||||||
context->n_free_areas == 0 ? 0 :
|
|
||||||
- free_area_available_for_new_partitions(context->free_areas[context->n_free_areas-1]);
|
|
||||||
+ free_area_available_for_new_partitions(context, context->free_areas[context->n_free_areas-1]);
|
|
||||||
|
|
||||||
/* A simple first-fit algorithm. We return true if we can fit the partitions in, otherwise false. */
|
|
||||||
LIST_FOREACH(partitions, p, context->partitions) {
|
|
||||||
@@ -565,13 +586,13 @@ static bool context_allocate_partitions(Context *context, uint64_t *ret_largest_
|
|
||||||
continue;
|
|
||||||
|
|
||||||
/* How much do we need to fit? */
|
|
||||||
- required = partition_min_size_with_padding(p);
|
|
||||||
- assert(required % 4096 == 0);
|
|
||||||
+ required = partition_min_size_with_padding(context, p);
|
|
||||||
+ assert(required % context->grain_size == 0);
|
|
||||||
|
|
||||||
for (size_t i = 0; i < context->n_free_areas; i++) {
|
|
||||||
a = context->free_areas[i];
|
|
||||||
|
|
||||||
- if (free_area_available_for_new_partitions(a) >= required) {
|
|
||||||
+ if (free_area_available_for_new_partitions(context, a) >= required) {
|
|
||||||
fits = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
@@ -683,8 +704,8 @@ static int context_grow_partitions_phase(
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
- rsz = partition_min_size(p);
|
|
||||||
- xsz = partition_max_size(p);
|
|
||||||
+ rsz = partition_min_size(context, p);
|
|
||||||
+ xsz = partition_max_size(context, p);
|
|
||||||
|
|
||||||
if (phase == PHASE_OVERCHARGE && rsz > share) {
|
|
||||||
/* This partition needs more than its calculated share. Let's assign
|
|
||||||
@@ -712,13 +733,13 @@ static int context_grow_partitions_phase(
|
|
||||||
/* Never change of foreign partitions (i.e. those we don't manage) */
|
|
||||||
p->new_size = p->current_size;
|
|
||||||
else
|
|
||||||
- p->new_size = MAX(round_down_size(share, 4096), rsz);
|
|
||||||
+ p->new_size = MAX(round_down_size(share, context->grain_size), rsz);
|
|
||||||
|
|
||||||
charge = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (charge) {
|
|
||||||
- *span = charge_size(*span, p->new_size);
|
|
||||||
+ *span = charge_size(context, *span, p->new_size);
|
|
||||||
*weight_sum = charge_weight(*weight_sum, p->weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -742,7 +763,7 @@ static int context_grow_partitions_phase(
|
|
||||||
charge = try_again = true;
|
|
||||||
} else if (phase == PHASE_DISTRIBUTE) {
|
|
||||||
|
|
||||||
- p->new_padding = round_down_size(share, 4096);
|
|
||||||
+ p->new_padding = round_down_size(share, context->grain_size);
|
|
||||||
if (p->padding_min != UINT64_MAX && p->new_padding < p->padding_min)
|
|
||||||
p->new_padding = p->padding_min;
|
|
||||||
|
|
||||||
@@ -750,7 +771,7 @@ static int context_grow_partitions_phase(
|
|
||||||
}
|
|
||||||
|
|
||||||
if (charge) {
|
|
||||||
- *span = charge_size(*span, p->new_padding);
|
|
||||||
+ *span = charge_size(context, *span, p->new_padding);
|
|
||||||
*weight_sum = charge_weight(*weight_sum, p->padding_weight);
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -779,7 +800,7 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) {
|
|
||||||
assert(a->after->offset != UINT64_MAX);
|
|
||||||
assert(a->after->current_size != UINT64_MAX);
|
|
||||||
|
|
||||||
- span += round_up_size(a->after->offset + a->after->current_size, 4096) - a->after->offset;
|
|
||||||
+ span += round_up_size(a->after->offset + a->after->current_size, context->grain_size) - a->after->offset;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (GrowPartitionPhase phase = 0; phase < _GROW_PARTITION_PHASE_MAX;) {
|
|
||||||
@@ -799,13 +820,13 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) {
|
|
||||||
assert(a->after->new_size != UINT64_MAX);
|
|
||||||
|
|
||||||
/* Calculate new size and align (but ensure this doesn't shrink the size) */
|
|
||||||
- m = MAX(a->after->new_size, round_down_size(a->after->new_size + span, 4096));
|
|
||||||
+ m = MAX(a->after->new_size, round_down_size(a->after->new_size + span, context->grain_size));
|
|
||||||
|
|
||||||
- xsz = partition_max_size(a->after);
|
|
||||||
+ xsz = partition_max_size(context, a->after);
|
|
||||||
if (xsz != UINT64_MAX && m > xsz)
|
|
||||||
m = xsz;
|
|
||||||
|
|
||||||
- span = charge_size(span, m - a->after->new_size);
|
|
||||||
+ span = charge_size(context, span, m - a->after->new_size);
|
|
||||||
a->after->new_size = m;
|
|
||||||
}
|
|
||||||
|
|
||||||
@@ -824,13 +845,13 @@ static int context_grow_partitions_on_free_area(Context *context, FreeArea *a) {
|
|
||||||
continue;
|
|
||||||
|
|
||||||
assert(p->new_size != UINT64_MAX);
|
|
||||||
- m = MAX(p->new_size, round_down_size(p->new_size + span, 4096));
|
|
||||||
+ m = MAX(p->new_size, round_down_size(p->new_size + span, context->grain_size));
|
|
||||||
|
|
||||||
- xsz = partition_max_size(p);
|
|
||||||
+ xsz = partition_max_size(context, p);
|
|
||||||
if (xsz != UINT64_MAX && m > xsz)
|
|
||||||
m = xsz;
|
|
||||||
|
|
||||||
- span = charge_size(span, m - p->new_size);
|
|
||||||
+ span = charge_size(context, span, m - p->new_size);
|
|
||||||
p->new_size = m;
|
|
||||||
|
|
||||||
if (span == 0)
|
|
||||||
@@ -910,7 +931,7 @@ static void context_place_partitions(Context *context) {
|
|
||||||
} else
|
|
||||||
start = context->start;
|
|
||||||
|
|
||||||
- start = round_up_size(start, 4096);
|
|
||||||
+ start = round_up_size(start, context->grain_size);
|
|
||||||
left = a->size;
|
|
||||||
|
|
||||||
LIST_FOREACH(partitions, p, context->partitions) {
|
|
||||||
@@ -1422,6 +1443,8 @@ static int determine_current_padding(
|
|
||||||
struct fdisk_context *c,
|
|
||||||
struct fdisk_table *t,
|
|
||||||
struct fdisk_partition *p,
|
|
||||||
+ uint64_t secsz,
|
|
||||||
+ uint64_t grainsz,
|
|
||||||
uint64_t *ret) {
|
|
||||||
|
|
||||||
size_t n_partitions;
|
|
||||||
@@ -1435,8 +1458,8 @@ static int determine_current_padding(
|
|
||||||
return log_error_errno(SYNTHETIC_ERRNO(EIO), "Partition has no end!");
|
|
||||||
|
|
||||||
offset = fdisk_partition_get_end(p);
|
|
||||||
- assert(offset < UINT64_MAX / 512);
|
|
||||||
- offset *= 512;
|
|
||||||
+ assert(offset < UINT64_MAX / secsz);
|
|
||||||
+ offset *= secsz;
|
|
||||||
|
|
||||||
n_partitions = fdisk_table_get_nents(t);
|
|
||||||
for (size_t i = 0; i < n_partitions; i++) {
|
|
||||||
@@ -1454,8 +1477,8 @@ static int determine_current_padding(
|
|
||||||
continue;
|
|
||||||
|
|
||||||
start = fdisk_partition_get_start(q);
|
|
||||||
- assert(start < UINT64_MAX / 512);
|
|
||||||
- start *= 512;
|
|
||||||
+ assert(start < UINT64_MAX / secsz);
|
|
||||||
+ start *= secsz;
|
|
||||||
|
|
||||||
if (start >= offset && (next == UINT64_MAX || next > start))
|
|
||||||
next = start;
|
|
||||||
@@ -1467,16 +1490,16 @@ static int determine_current_padding(
|
|
||||||
assert(next < UINT64_MAX);
|
|
||||||
next++; /* The last LBA is one sector before the end */
|
|
||||||
|
|
||||||
- assert(next < UINT64_MAX / 512);
|
|
||||||
- next *= 512;
|
|
||||||
+ assert(next < UINT64_MAX / secsz);
|
|
||||||
+ next *= secsz;
|
|
||||||
|
|
||||||
if (offset > next)
|
|
||||||
return log_error_errno(SYNTHETIC_ERRNO(EIO), "Partition end beyond disk end.");
|
|
||||||
}
|
|
||||||
|
|
||||||
assert(next >= offset);
|
|
||||||
- offset = round_up_size(offset, 4096);
|
|
||||||
- next = round_down_size(next, 4096);
|
|
||||||
+ offset = round_up_size(offset, grainsz);
|
|
||||||
+ next = round_down_size(next, grainsz);
|
|
||||||
|
|
||||||
*ret = LESS_BY(next, offset); /* Saturated subtraction, rounding might have fucked things up */
|
|
||||||
return 0;
|
|
||||||
@@ -1549,6 +1572,8 @@ static int context_load_partition_table(
|
|
||||||
bool from_scratch = false;
|
|
||||||
sd_id128_t disk_uuid;
|
|
||||||
size_t n_partitions;
|
|
||||||
+ unsigned long secsz;
|
|
||||||
+ uint64_t grainsz;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
assert(context);
|
|
||||||
@@ -1583,8 +1608,12 @@ static int context_load_partition_table(
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(errno, "Failed to stat block device '%s': %m", node);
|
|
||||||
|
|
||||||
- if (S_ISREG(st.st_mode) && st.st_size == 0)
|
|
||||||
+ if (S_ISREG(st.st_mode) && st.st_size == 0) {
|
|
||||||
+ /* User the fallback values if we have no better idea */
|
|
||||||
+ context->sector_size = 512;
|
|
||||||
+ context->grain_size = 4096;
|
|
||||||
return /* from_scratch = */ true;
|
|
||||||
+ }
|
|
||||||
|
|
||||||
r = -EINVAL;
|
|
||||||
}
|
|
||||||
@@ -1602,6 +1631,23 @@ static int context_load_partition_table(
|
|
||||||
if (flock(fdisk_get_devfd(c), arg_dry_run ? LOCK_SH : LOCK_EX) < 0)
|
|
||||||
return log_error_errno(errno, "Failed to lock block device: %m");
|
|
||||||
|
|
||||||
+ /* The offsets/sizes libfdisk returns to us will be in multiple of the sector size of the
|
|
||||||
+ * device. This is typically 512, and sometimes 4096. Let's query libfdisk once for it, and then use
|
|
||||||
+ * it for all our needs. Note that the values we use ourselves always are in bytes though, thus mean
|
|
||||||
+ * the same thing universally. Also note that regardless what kind of sector size is in use we'll
|
|
||||||
+ * place partitions at multiples of 4K. */
|
|
||||||
+ secsz = fdisk_get_sector_size(c);
|
|
||||||
+
|
|
||||||
+ /* Insist on a power of two, and that it's a multiple of 512, i.e. the traditional sector size. */
|
|
||||||
+ if (secsz < 512 || secsz != 1UL << log2u64(secsz))
|
|
||||||
+ return log_error_errno(errno, "Sector size %lu is not a power of two larger than 512? Refusing.", secsz);
|
|
||||||
+
|
|
||||||
+ /* Use at least 4K, and ensure it's a multiple of the sector size, regardless if that is smaller or
|
|
||||||
+ * larger */
|
|
||||||
+ grainsz = secsz < 4096 ? 4096 : secsz;
|
|
||||||
+
|
|
||||||
+ log_debug("Sector size of device is %lu bytes. Using grain size of %" PRIu64 ".", secsz, grainsz);
|
|
||||||
+
|
|
||||||
switch (arg_empty) {
|
|
||||||
|
|
||||||
case EMPTY_REFUSE:
|
|
||||||
@@ -1732,12 +1778,12 @@ static int context_load_partition_table(
|
|
||||||
}
|
|
||||||
|
|
||||||
sz = fdisk_partition_get_size(p);
|
|
||||||
- assert_se(sz <= UINT64_MAX/512);
|
|
||||||
- sz *= 512;
|
|
||||||
+ assert_se(sz <= UINT64_MAX/secsz);
|
|
||||||
+ sz *= secsz;
|
|
||||||
|
|
||||||
start = fdisk_partition_get_start(p);
|
|
||||||
- assert_se(start <= UINT64_MAX/512);
|
|
||||||
- start *= 512;
|
|
||||||
+ assert_se(start <= UINT64_MAX/secsz);
|
|
||||||
+ start *= secsz;
|
|
||||||
|
|
||||||
partno = fdisk_partition_get_partno(p);
|
|
||||||
|
|
||||||
@@ -1762,7 +1808,7 @@ static int context_load_partition_table(
|
|
||||||
pp->current_partition = p;
|
|
||||||
fdisk_ref_partition(p);
|
|
||||||
|
|
||||||
- r = determine_current_padding(c, t, p, &pp->current_padding);
|
|
||||||
+ r = determine_current_padding(c, t, p, secsz, grainsz, &pp->current_padding);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
@@ -1795,7 +1841,7 @@ static int context_load_partition_table(
|
|
||||||
np->current_partition = p;
|
|
||||||
fdisk_ref_partition(p);
|
|
||||||
|
|
||||||
- r = determine_current_padding(c, t, p, &np->current_padding);
|
|
||||||
+ r = determine_current_padding(c, t, p, secsz, grainsz, &np->current_padding);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
||||||
@@ -1812,26 +1858,26 @@ static int context_load_partition_table(
|
|
||||||
|
|
||||||
add_initial_free_area:
|
|
||||||
nsectors = fdisk_get_nsectors(c);
|
|
||||||
- assert(nsectors <= UINT64_MAX/512);
|
|
||||||
- nsectors *= 512;
|
|
||||||
+ assert(nsectors <= UINT64_MAX/secsz);
|
|
||||||
+ nsectors *= secsz;
|
|
||||||
|
|
||||||
first_lba = fdisk_get_first_lba(c);
|
|
||||||
- assert(first_lba <= UINT64_MAX/512);
|
|
||||||
- first_lba *= 512;
|
|
||||||
+ assert(first_lba <= UINT64_MAX/secsz);
|
|
||||||
+ first_lba *= secsz;
|
|
||||||
|
|
||||||
last_lba = fdisk_get_last_lba(c);
|
|
||||||
assert(last_lba < UINT64_MAX);
|
|
||||||
last_lba++;
|
|
||||||
- assert(last_lba <= UINT64_MAX/512);
|
|
||||||
- last_lba *= 512;
|
|
||||||
+ assert(last_lba <= UINT64_MAX/secsz);
|
|
||||||
+ last_lba *= secsz;
|
|
||||||
|
|
||||||
assert(last_lba >= first_lba);
|
|
||||||
|
|
||||||
if (left_boundary == UINT64_MAX) {
|
|
||||||
/* No partitions at all? Then the whole disk is up for grabs. */
|
|
||||||
|
|
||||||
- first_lba = round_up_size(first_lba, 4096);
|
|
||||||
- last_lba = round_down_size(last_lba, 4096);
|
|
||||||
+ first_lba = round_up_size(first_lba, grainsz);
|
|
||||||
+ last_lba = round_down_size(last_lba, grainsz);
|
|
||||||
|
|
||||||
if (last_lba > first_lba) {
|
|
||||||
r = context_add_free_area(context, last_lba - first_lba, NULL);
|
|
||||||
@@ -1842,9 +1888,9 @@ add_initial_free_area:
|
|
||||||
/* Add space left of first partition */
|
|
||||||
assert(left_boundary >= first_lba);
|
|
||||||
|
|
||||||
- first_lba = round_up_size(first_lba, 4096);
|
|
||||||
- left_boundary = round_down_size(left_boundary, 4096);
|
|
||||||
- last_lba = round_down_size(last_lba, 4096);
|
|
||||||
+ first_lba = round_up_size(first_lba, grainsz);
|
|
||||||
+ left_boundary = round_down_size(left_boundary, grainsz);
|
|
||||||
+ last_lba = round_down_size(last_lba, grainsz);
|
|
||||||
|
|
||||||
if (left_boundary > first_lba) {
|
|
||||||
r = context_add_free_area(context, left_boundary - first_lba, NULL);
|
|
||||||
@@ -1856,6 +1902,8 @@ add_initial_free_area:
|
|
||||||
context->start = first_lba;
|
|
||||||
context->end = last_lba;
|
|
||||||
context->total = nsectors;
|
|
||||||
+ context->sector_size = secsz;
|
|
||||||
+ context->grain_size = grainsz;
|
|
||||||
context->fdisk_context = TAKE_PTR(c);
|
|
||||||
|
|
||||||
return from_scratch;
|
|
||||||
@@ -2360,7 +2408,7 @@ static int context_discard_range(
|
|
||||||
if (S_ISBLK(st.st_mode)) {
|
|
||||||
uint64_t range[2], end;
|
|
||||||
|
|
||||||
- range[0] = round_up_size(offset, 512);
|
|
||||||
+ range[0] = round_up_size(offset, context->sector_size);
|
|
||||||
|
|
||||||
if (offset > UINT64_MAX - size)
|
|
||||||
return -ERANGE;
|
|
||||||
@@ -2369,7 +2417,7 @@ static int context_discard_range(
|
|
||||||
if (end <= range[0])
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
- range[1] = round_down_size(end - range[0], 512);
|
|
||||||
+ range[1] = round_down_size(end - range[0], context->sector_size);
|
|
||||||
if (range[1] <= 0)
|
|
||||||
return 0;
|
|
||||||
|
|
||||||
@@ -2519,6 +2567,7 @@ static int context_wipe_and_discard(Context *context, bool from_scratch) {
|
|
||||||
}
|
|
||||||
|
|
||||||
static int partition_encrypt(
|
|
||||||
+ Context *context,
|
|
||||||
Partition *p,
|
|
||||||
const char *node,
|
|
||||||
struct crypt_device **ret_cd,
|
|
||||||
@@ -2532,6 +2581,7 @@ static int partition_encrypt(
|
|
||||||
sd_id128_t uuid;
|
|
||||||
int r;
|
|
||||||
|
|
||||||
+ assert(context);
|
|
||||||
assert(p);
|
|
||||||
assert(p->encrypt != ENCRYPT_OFF);
|
|
||||||
|
|
||||||
@@ -2579,7 +2629,7 @@ static int partition_encrypt(
|
|
||||||
volume_key_size,
|
|
||||||
&(struct crypt_params_luks2) {
|
|
||||||
.label = strempty(p->new_label),
|
|
||||||
- .sector_size = 512U,
|
|
||||||
+ .sector_size = context->sector_size,
|
|
||||||
});
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to LUKS2 format future partition: %m");
|
|
||||||
@@ -2735,7 +2785,7 @@ static int context_copy_blocks(Context *context) {
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to lock loopback device: %m");
|
|
||||||
|
|
||||||
- r = partition_encrypt(p, d->node, &cd, &encrypted, &encrypted_dev_fd);
|
|
||||||
+ r = partition_encrypt(context, p, d->node, &cd, &encrypted, &encrypted_dev_fd);
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to encrypt device: %m");
|
|
||||||
|
|
||||||
@@ -2988,7 +3038,7 @@ static int context_mkfs(Context *context) {
|
|
||||||
return log_error_errno(r, "Failed to lock loopback device: %m");
|
|
||||||
|
|
||||||
if (p->encrypt != ENCRYPT_OFF) {
|
|
||||||
- r = partition_encrypt(p, d->node, &cd, &encrypted, &encrypted_dev_fd);
|
|
||||||
+ r = partition_encrypt(context, p, d->node, &cd, &encrypted, &encrypted_dev_fd);
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to encrypt device: %m");
|
|
||||||
|
|
||||||
@@ -3307,13 +3357,13 @@ static int context_mangle_partitions(Context *context) {
|
|
||||||
|
|
||||||
if (p->new_size != p->current_size) {
|
|
||||||
assert(p->new_size >= p->current_size);
|
|
||||||
- assert(p->new_size % 512 == 0);
|
|
||||||
+ assert(p->new_size % context->sector_size == 0);
|
|
||||||
|
|
||||||
r = fdisk_partition_size_explicit(p->current_partition, true);
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to enable explicit sizing: %m");
|
|
||||||
|
|
||||||
- r = fdisk_partition_set_size(p->current_partition, p->new_size / 512);
|
|
||||||
+ r = fdisk_partition_set_size(p->current_partition, p->new_size / context->sector_size);
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to grow partition: %m");
|
|
||||||
|
|
||||||
@@ -3353,8 +3403,8 @@ static int context_mangle_partitions(Context *context) {
|
|
||||||
_cleanup_(fdisk_unref_parttypep) struct fdisk_parttype *t = NULL;
|
|
||||||
|
|
||||||
assert(!p->new_partition);
|
|
||||||
- assert(p->offset % 512 == 0);
|
|
||||||
- assert(p->new_size % 512 == 0);
|
|
||||||
+ assert(p->offset % context->sector_size == 0);
|
|
||||||
+ assert(p->new_size % context->sector_size == 0);
|
|
||||||
assert(!sd_id128_is_null(p->new_uuid));
|
|
||||||
assert(p->new_label);
|
|
||||||
|
|
||||||
@@ -3378,11 +3428,11 @@ static int context_mangle_partitions(Context *context) {
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to enable explicit sizing: %m");
|
|
||||||
|
|
||||||
- r = fdisk_partition_set_start(q, p->offset / 512);
|
|
||||||
+ r = fdisk_partition_set_start(q, p->offset / context->sector_size);
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to position partition: %m");
|
|
||||||
|
|
||||||
- r = fdisk_partition_set_size(q, p->new_size / 512);
|
|
||||||
+ r = fdisk_partition_set_size(q, p->new_size / context->sector_size);
|
|
||||||
if (r < 0)
|
|
||||||
return log_error_errno(r, "Failed to grow partition: %m");
|
|
||||||
|
|
||||||
@@ -4746,18 +4796,20 @@ done:
|
|
||||||
}
|
|
||||||
|
|
||||||
static int determine_auto_size(Context *c) {
|
|
||||||
- uint64_t sum = round_up_size(GPT_METADATA_SIZE, 4096);
|
|
||||||
+ uint64_t sum;
|
|
||||||
Partition *p;
|
|
||||||
|
|
||||||
assert_se(c);
|
|
||||||
|
|
||||||
+ sum = round_up_size(GPT_METADATA_SIZE, 4096);
|
|
||||||
+
|
|
||||||
LIST_FOREACH(partitions, p, c->partitions) {
|
|
||||||
uint64_t m;
|
|
||||||
|
|
||||||
if (p->dropped)
|
|
||||||
continue;
|
|
||||||
|
|
||||||
- m = partition_min_size_with_padding(p);
|
|
||||||
+ m = partition_min_size_with_padding(c, p);
|
|
||||||
if (m > UINT64_MAX - sum)
|
|
||||||
return log_error_errno(SYNTHETIC_ERRNO(EOVERFLOW), "Image would grow too large, refusing.");
|
|
||||||
|
|
27
SOURCES/0047-sd-bus-properly-initialize-containers.patch
Normal file
27
SOURCES/0047-sd-bus-properly-initialize-containers.patch
Normal file
@ -0,0 +1,27 @@
|
|||||||
|
From 220a60a61a91153fd8e49e58884b9b0b904888f6 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Jan Synacek <jsynacek@redhat.com>
|
||||||
|
Date: Wed, 31 Oct 2018 12:50:19 +0100
|
||||||
|
Subject: [PATCH] sd-bus: properly initialize containers
|
||||||
|
|
||||||
|
Fixes a SIGSEGV introduced by commit 38a5315a3a6fab745d8c86ff9e486faaf50b28d1.
|
||||||
|
The same problem doesn't exist upstream, as the container structure
|
||||||
|
there is initialized using a compound literal, which is zeroed out by
|
||||||
|
default.
|
||||||
|
|
||||||
|
Related: #1635435
|
||||||
|
---
|
||||||
|
src/libsystemd/sd-bus/bus-message.c | 1 +
|
||||||
|
1 file changed, 1 insertion(+)
|
||||||
|
|
||||||
|
diff --git a/src/libsystemd/sd-bus/bus-message.c b/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
index d55cb14843..780c8c6185 100644
|
||||||
|
--- a/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
+++ b/src/libsystemd/sd-bus/bus-message.c
|
||||||
|
@@ -2004,6 +2004,7 @@ _public_ int sd_bus_message_open_container(
|
||||||
|
w = m->containers + m->n_containers++;
|
||||||
|
w->enclosing = type;
|
||||||
|
w->signature = TAKE_PTR(signature);
|
||||||
|
+ w->peeked_signature = NULL;
|
||||||
|
w->index = 0;
|
||||||
|
w->array_size = array_size;
|
||||||
|
w->before = before;
|
@ -0,0 +1,240 @@
|
|||||||
|
From 0977e6b34fb5f28fc94f1df32261742881fa9bbe Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Thu, 30 Aug 2018 08:45:11 +0000
|
||||||
|
Subject: [PATCH] cryptsetup-generator: introduce basic keydev support
|
||||||
|
|
||||||
|
Dracut has a support for unlocking encrypted drives with keyfile stored
|
||||||
|
on the external drive. This support is included in the generated initrd
|
||||||
|
only if systemd module is not included.
|
||||||
|
|
||||||
|
When systemd is used in initrd then attachment of encrypted drives is
|
||||||
|
handled by systemd-cryptsetup tools. Our generator has support for
|
||||||
|
keyfile, however, it didn't support keyfile on the external block
|
||||||
|
device (keydev).
|
||||||
|
|
||||||
|
This commit introduces basic keydev support. Keydev can be specified per
|
||||||
|
luks.uuid on the kernel command line. Keydev is automatically mounted
|
||||||
|
during boot and we look for keyfile in the keydev
|
||||||
|
mountpoint (i.e. keyfile path is prefixed with the keydev mount point
|
||||||
|
path). After crypt device is attached we automatically unmount
|
||||||
|
where keyfile resides.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
rd.luks.key=70bc876b-f627-4038-9049-3080d79d2165=/key:LABEL=KEYDEV
|
||||||
|
|
||||||
|
(cherry-picked from commit 70f5f48eb891b12e969577b464de61e15a2593da)
|
||||||
|
|
||||||
|
Resolves: #1656869
|
||||||
|
---
|
||||||
|
man/systemd-cryptsetup-generator.xml | 14 ++++
|
||||||
|
src/cryptsetup/cryptsetup-generator.c | 105 +++++++++++++++++++++++++-
|
||||||
|
2 files changed, 115 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/man/systemd-cryptsetup-generator.xml b/man/systemd-cryptsetup-generator.xml
|
||||||
|
index c37ee76b87..e30d69bfe7 100644
|
||||||
|
--- a/man/systemd-cryptsetup-generator.xml
|
||||||
|
+++ b/man/systemd-cryptsetup-generator.xml
|
||||||
|
@@ -144,6 +144,20 @@
|
||||||
|
to the one specified by <varname>rd.luks.key=</varname> or
|
||||||
|
<varname>luks.key=</varname> of the corresponding UUID, or the
|
||||||
|
password file that was specified without a UUID.</para>
|
||||||
|
+
|
||||||
|
+ <para>It is also possible to specify an external device which
|
||||||
|
+ should be mounted before we attempt to unlock the LUKS device.
|
||||||
|
+ systemd-cryptsetup will use password file stored on that
|
||||||
|
+ device. Device containing password file is specified by
|
||||||
|
+ appending colon and a device identifier to the password file
|
||||||
|
+ path. For example,
|
||||||
|
+ <varname>rd.luks.uuid=</varname>b40f1abf-2a53-400a-889a-2eccc27eaa40
|
||||||
|
+ <varname>rd.luks.key=</varname>b40f1abf-2a53-400a-889a-2eccc27eaa40=/keyfile:LABEL=keydev.
|
||||||
|
+ Hence, in this case, we will attempt to mount file system
|
||||||
|
+ residing on the block device with label <literal>keydev</literal>.
|
||||||
|
+ This syntax is for now only supported on a per-device basis,
|
||||||
|
+ i.e. you have to specify LUKS device UUID.</para>
|
||||||
|
+
|
||||||
|
<para><varname>rd.luks.key=</varname>
|
||||||
|
is honored only by initial RAM disk
|
||||||
|
(initrd) while
|
||||||
|
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
index f5a81829b9..8c7a76e789 100644
|
||||||
|
--- a/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
+++ b/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
@@ -24,6 +24,7 @@
|
||||||
|
typedef struct crypto_device {
|
||||||
|
char *uuid;
|
||||||
|
char *keyfile;
|
||||||
|
+ char *keydev;
|
||||||
|
char *name;
|
||||||
|
char *options;
|
||||||
|
bool create;
|
||||||
|
@@ -37,14 +38,71 @@ static Hashmap *arg_disks = NULL;
|
||||||
|
static char *arg_default_options = NULL;
|
||||||
|
static char *arg_default_keyfile = NULL;
|
||||||
|
|
||||||
|
+static int generate_keydev_mount(const char *name, const char *keydev, char **unit, char **mount) {
|
||||||
|
+ _cleanup_free_ char *u = NULL, *what = NULL, *where = NULL;
|
||||||
|
+ _cleanup_fclose_ FILE *f = NULL;
|
||||||
|
+ int r;
|
||||||
|
+
|
||||||
|
+ assert(name);
|
||||||
|
+ assert(keydev);
|
||||||
|
+ assert(unit);
|
||||||
|
+ assert(mount);
|
||||||
|
+
|
||||||
|
+ r = mkdir_parents("/run/systemd/cryptsetup", 0755);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+ r = mkdir("/run/systemd/cryptsetup", 0700);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+ where = strjoin("/run/systemd/cryptsetup/keydev-", name);
|
||||||
|
+ if (!where)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ r = mkdir(where, 0700);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+ r = unit_name_from_path(where, ".mount", &u);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+ r = generator_open_unit_file(arg_dest, NULL, u, &f);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+ what = fstab_node_to_udev_node(keydev);
|
||||||
|
+ if (!what)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ fprintf(f,
|
||||||
|
+ "[Unit]\n"
|
||||||
|
+ "DefaultDependencies=no\n\n"
|
||||||
|
+ "[Mount]\n"
|
||||||
|
+ "What=%s\n"
|
||||||
|
+ "Where=%s\n"
|
||||||
|
+ "Options=ro\n", what, where);
|
||||||
|
+
|
||||||
|
+ r = fflush_and_check(f);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return r;
|
||||||
|
+
|
||||||
|
+ *unit = TAKE_PTR(u);
|
||||||
|
+ *mount = TAKE_PTR(where);
|
||||||
|
+
|
||||||
|
+ return 0;
|
||||||
|
+}
|
||||||
|
+
|
||||||
|
static int create_disk(
|
||||||
|
const char *name,
|
||||||
|
const char *device,
|
||||||
|
+ const char *keydev,
|
||||||
|
const char *password,
|
||||||
|
const char *options) {
|
||||||
|
|
||||||
|
_cleanup_free_ char *n = NULL, *d = NULL, *u = NULL, *e = NULL,
|
||||||
|
- *filtered = NULL, *u_escaped = NULL, *password_escaped = NULL, *filtered_escaped = NULL, *name_escaped = NULL;
|
||||||
|
+ *filtered = NULL, *u_escaped = NULL, *password_escaped = NULL, *filtered_escaped = NULL, *name_escaped = NULL, *keydev_mount = NULL;
|
||||||
|
_cleanup_fclose_ FILE *f = NULL;
|
||||||
|
const char *dmname;
|
||||||
|
bool noauto, nofail, tmp, swap, netdev;
|
||||||
|
@@ -94,6 +152,9 @@ static int create_disk(
|
||||||
|
return log_oom();
|
||||||
|
}
|
||||||
|
|
||||||
|
+ if (keydev && !password)
|
||||||
|
+ return log_error_errno(-EINVAL, "Keydev is specified, but path to the password file is missing: %m");
|
||||||
|
+
|
||||||
|
r = generator_open_unit_file(arg_dest, NULL, n, &f);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
@@ -109,6 +170,20 @@ static int create_disk(
|
||||||
|
"After=%s\n",
|
||||||
|
netdev ? "remote-fs-pre.target" : "cryptsetup-pre.target");
|
||||||
|
|
||||||
|
+ if (keydev) {
|
||||||
|
+ _cleanup_free_ char *unit = NULL, *p = NULL;
|
||||||
|
+
|
||||||
|
+ r = generate_keydev_mount(name, keydev, &unit, &keydev_mount);
|
||||||
|
+ if (r < 0)
|
||||||
|
+ return log_error_errno(r, "Failed to generate keydev mount unit: %m");
|
||||||
|
+
|
||||||
|
+ p = prefix_root(keydev_mount, password_escaped);
|
||||||
|
+ if (!p)
|
||||||
|
+ return log_oom();
|
||||||
|
+
|
||||||
|
+ free_and_replace(password_escaped, p);
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
if (!nofail)
|
||||||
|
fprintf(f,
|
||||||
|
"Before=%s\n",
|
||||||
|
@@ -186,6 +261,11 @@ static int create_disk(
|
||||||
|
"ExecStartPost=/sbin/mkswap '/dev/mapper/%s'\n",
|
||||||
|
name_escaped);
|
||||||
|
|
||||||
|
+ if (keydev)
|
||||||
|
+ fprintf(f,
|
||||||
|
+ "ExecStartPost=" UMOUNT_PATH " %s\n\n",
|
||||||
|
+ keydev_mount);
|
||||||
|
+
|
||||||
|
r = fflush_and_check(f);
|
||||||
|
if (r < 0)
|
||||||
|
return log_error_errno(r, "Failed to write unit file %s: %m", n);
|
||||||
|
@@ -221,6 +301,7 @@ static int create_disk(
|
||||||
|
static void crypt_device_free(crypto_device *d) {
|
||||||
|
free(d->uuid);
|
||||||
|
free(d->keyfile);
|
||||||
|
+ free(d->keydev);
|
||||||
|
free(d->name);
|
||||||
|
free(d->options);
|
||||||
|
free(d);
|
||||||
|
@@ -309,11 +390,27 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
|
||||||
|
|
||||||
|
r = sscanf(value, "%m[0-9a-fA-F-]=%ms", &uuid, &uuid_value);
|
||||||
|
if (r == 2) {
|
||||||
|
+ char *c;
|
||||||
|
+ _cleanup_free_ char *keyfile = NULL, *keydev = NULL;
|
||||||
|
+
|
||||||
|
d = get_crypto_device(uuid);
|
||||||
|
if (!d)
|
||||||
|
return log_oom();
|
||||||
|
|
||||||
|
- free_and_replace(d->keyfile, uuid_value);
|
||||||
|
+ c = strrchr(uuid_value, ':');
|
||||||
|
+ if (!c)
|
||||||
|
+ /* No keydev specified */
|
||||||
|
+ return free_and_replace(d->keyfile, uuid_value);
|
||||||
|
+
|
||||||
|
+ *c = '\0';
|
||||||
|
+ keyfile = strdup(uuid_value);
|
||||||
|
+ keydev = strdup(++c);
|
||||||
|
+
|
||||||
|
+ if (!keyfile || !keydev)
|
||||||
|
+ return log_oom();
|
||||||
|
+
|
||||||
|
+ free_and_replace(d->keyfile, keyfile);
|
||||||
|
+ free_and_replace(d->keydev, keydev);
|
||||||
|
} else if (free_and_strdup(&arg_default_keyfile, value) < 0)
|
||||||
|
return log_oom();
|
||||||
|
|
||||||
|
@@ -394,7 +491,7 @@ static int add_crypttab_devices(void) {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
- r = create_disk(name, device, keyfile, (d && d->options) ? d->options : options);
|
||||||
|
+ r = create_disk(name, device, NULL, keyfile, (d && d->options) ? d->options : options);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
@@ -434,7 +531,7 @@ static int add_proc_cmdline_devices(void) {
|
||||||
|
else
|
||||||
|
options = "timeout=0";
|
||||||
|
|
||||||
|
- r = create_disk(d->name, device, d->keyfile ?: arg_default_keyfile, options);
|
||||||
|
+ r = create_disk(d->name, device, d->keydev, d->keyfile ?: arg_default_keyfile, options);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
}
|
@ -1,36 +0,0 @@
|
|||||||
From 77cde7d38bf8cd3438a867a6330c314f4580e43b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
|
||||||
Date: Wed, 2 Feb 2022 14:20:48 +0900
|
|
||||||
Subject: [PATCH] mkdir: allow to create directory whose path contains symlink
|
|
||||||
|
|
||||||
Fixes a regression caused by 3008a6f21c1c42efe852d69798a2fdd63fe657ec.
|
|
||||||
|
|
||||||
Before the commit, when `mkdir_parents_internal()` is called from `mkdir_p()`,
|
|
||||||
it uses `_mkdir()` as `flag` is zero. But after the commit, `mkdir_safe_internal()`
|
|
||||||
is always used. Hence, if the path contains a symlink, it fails with -ENOTDIR.
|
|
||||||
|
|
||||||
To fix the issue, this makes `mkdir_p()` calls `mkdir_parents_internal()` with
|
|
||||||
MKDIR_FOLLOW_SYMLINK flag.
|
|
||||||
|
|
||||||
Fixes #22334.
|
|
||||||
|
|
||||||
(cherry picked from commit 5117059ee9f84ed2fd37801ec0b90473db475422)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/basic/mkdir.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
|
|
||||||
index 6e2b94d024..88782ab0d4 100644
|
|
||||||
--- a/src/basic/mkdir.c
|
|
||||||
+++ b/src/basic/mkdir.c
|
|
||||||
@@ -162,7 +162,7 @@ int mkdir_p_internal(const char *prefix, const char *path, mode_t mode, uid_t ui
|
|
||||||
|
|
||||||
assert(_mkdirat != mkdirat);
|
|
||||||
|
|
||||||
- r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags, _mkdirat);
|
|
||||||
+ r = mkdir_parents_internal(prefix, path, mode, uid, gid, flags | MKDIR_FOLLOW_SYMLINK, _mkdirat);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
|
|
@ -0,0 +1,33 @@
|
|||||||
|
From 95bfd1d2f52698604e44c17dba2082f61b5f8eab Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lennart Poettering <lennart@poettering.net>
|
||||||
|
Date: Fri, 5 Oct 2018 22:37:37 +0200
|
||||||
|
Subject: [PATCH] cryptsetup: don't use %m if there's no error to show
|
||||||
|
|
||||||
|
We are not the ones receiving an error here, but the ones generating it,
|
||||||
|
hence we shouldn't show it with %m, that's just confusing, as it
|
||||||
|
suggests we received an error from some other call.
|
||||||
|
|
||||||
|
(cherry-picked from commit 2abe64666e544be6499f870618185f8819b4c152)
|
||||||
|
|
||||||
|
Related: #1656869
|
||||||
|
---
|
||||||
|
src/cryptsetup/cryptsetup-generator.c | 6 ++++--
|
||||||
|
1 file changed, 4 insertions(+), 2 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
index 8c7a76e789..52391bd185 100644
|
||||||
|
--- a/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
+++ b/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
@@ -152,8 +152,10 @@ static int create_disk(
|
||||||
|
return log_oom();
|
||||||
|
}
|
||||||
|
|
||||||
|
- if (keydev && !password)
|
||||||
|
- return log_error_errno(-EINVAL, "Keydev is specified, but path to the password file is missing: %m");
|
||||||
|
+ if (keydev && !password) {
|
||||||
|
+ log_error("Key device is specified, but path to the password file is missing.");
|
||||||
|
+ return -EINVAL;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
r = generator_open_unit_file(arg_dest, NULL, n, &f);
|
||||||
|
if (r < 0)
|
@ -1,26 +0,0 @@
|
|||||||
From 848b8dde6fe096b317abf0b4996f21c8fe6a39ce Mon Sep 17 00:00:00 2001
|
|
||||||
From: Yu Watanabe <watanabe.yu+github@gmail.com>
|
|
||||||
Date: Wed, 2 Feb 2022 15:06:27 +0900
|
|
||||||
Subject: [PATCH] mkdir: CHASE_NONEXISTENT cannot used in
|
|
||||||
chase_symlinks_and_stat()
|
|
||||||
|
|
||||||
(cherry picked from commit e22916e61d1fdb7b46918b605ebf783d9017f9d8)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/basic/mkdir.c | 2 +-
|
|
||||||
1 file changed, 1 insertion(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/basic/mkdir.c b/src/basic/mkdir.c
|
|
||||||
index 88782ab0d4..51a0d74e87 100644
|
|
||||||
--- a/src/basic/mkdir.c
|
|
||||||
+++ b/src/basic/mkdir.c
|
|
||||||
@@ -42,7 +42,7 @@ int mkdir_safe_internal(
|
|
||||||
if ((flags & MKDIR_FOLLOW_SYMLINK) && S_ISLNK(st.st_mode)) {
|
|
||||||
_cleanup_free_ char *p = NULL;
|
|
||||||
|
|
||||||
- r = chase_symlinks_and_stat(path, NULL, CHASE_NONEXISTENT, &p, &st, NULL);
|
|
||||||
+ r = chase_symlinks_and_stat(path, NULL, 0, &p, &st, NULL);
|
|
||||||
if (r < 0)
|
|
||||||
return r;
|
|
||||||
if (r == 0)
|
|
@ -0,0 +1,38 @@
|
|||||||
|
From 81df5f597257bd2579246de6182c4949b27396eb Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Tue, 4 Sep 2018 19:51:14 +0200
|
||||||
|
Subject: [PATCH] cryptsetup-generator: don't return error if target directory
|
||||||
|
already exists
|
||||||
|
|
||||||
|
(cherry-picked from commit 579875bc4a59b917fa32519e3d96d56dc591ad1e)
|
||||||
|
|
||||||
|
Related: #1656869
|
||||||
|
---
|
||||||
|
src/cryptsetup/cryptsetup-generator.c | 8 ++++----
|
||||||
|
1 file changed, 4 insertions(+), 4 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
index 52391bd185..03c513c26e 100644
|
||||||
|
--- a/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
+++ b/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
@@ -53,16 +53,16 @@ static int generate_keydev_mount(const char *name, const char *keydev, char **un
|
||||||
|
return r;
|
||||||
|
|
||||||
|
r = mkdir("/run/systemd/cryptsetup", 0700);
|
||||||
|
- if (r < 0)
|
||||||
|
- return r;
|
||||||
|
+ if (r < 0 && errno != EEXIST)
|
||||||
|
+ return -errno;
|
||||||
|
|
||||||
|
where = strjoin("/run/systemd/cryptsetup/keydev-", name);
|
||||||
|
if (!where)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
r = mkdir(where, 0700);
|
||||||
|
- if (r < 0)
|
||||||
|
- return r;
|
||||||
|
+ if (r < 0 && errno != EEXIST)
|
||||||
|
+ return -errno;
|
||||||
|
|
||||||
|
r = unit_name_from_path(where, ".mount", &u);
|
||||||
|
if (r < 0)
|
@ -1,137 +0,0 @@
|
|||||||
From 9cfc2fd3c58609252b3fd203af95bec1aab1b832 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Thu, 23 Dec 2021 12:55:40 +0100
|
|
||||||
Subject: [PATCH] meson: move efi file lists closer to where they are used
|
|
||||||
|
|
||||||
The goal is to have the detection of features and paths done first, and
|
|
||||||
then the build target constructions second.
|
|
||||||
|
|
||||||
(cherry picked from commit 65dcf9f9a0d877de0dc53558547462a7f1750c78)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/boot/efi/meson.build | 104 +++++++++++++++++++--------------------
|
|
||||||
1 file changed, 51 insertions(+), 53 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
|
|
||||||
index e10e51cf4e..1125c64ea3 100644
|
|
||||||
--- a/src/boot/efi/meson.build
|
|
||||||
+++ b/src/boot/efi/meson.build
|
|
||||||
@@ -99,59 +99,6 @@ if efi_lds == ''
|
|
||||||
subdir_done()
|
|
||||||
endif
|
|
||||||
|
|
||||||
-efi_headers = files('''
|
|
||||||
- bcd.h
|
|
||||||
- console.h
|
|
||||||
- cpio.h
|
|
||||||
- devicetree.h
|
|
||||||
- disk.h
|
|
||||||
- drivers.h
|
|
||||||
- graphics.h
|
|
||||||
- linux.h
|
|
||||||
- measure.h
|
|
||||||
- missing_efi.h
|
|
||||||
- pe.h
|
|
||||||
- random-seed.h
|
|
||||||
- shim.h
|
|
||||||
- splash.h
|
|
||||||
- util.h
|
|
||||||
- xbootldr.h
|
|
||||||
-'''.split())
|
|
||||||
-
|
|
||||||
-common_sources = '''
|
|
||||||
- assert.c
|
|
||||||
- devicetree.c
|
|
||||||
- disk.c
|
|
||||||
- graphics.c
|
|
||||||
- measure.c
|
|
||||||
- pe.c
|
|
||||||
- secure-boot.c
|
|
||||||
- util.c
|
|
||||||
-'''.split()
|
|
||||||
-
|
|
||||||
-systemd_boot_sources = '''
|
|
||||||
- bcd.c
|
|
||||||
- boot.c
|
|
||||||
- console.c
|
|
||||||
- drivers.c
|
|
||||||
- random-seed.c
|
|
||||||
- shim.c
|
|
||||||
- xbootldr.c
|
|
||||||
-'''.split()
|
|
||||||
-
|
|
||||||
-stub_sources = '''
|
|
||||||
- cpio.c
|
|
||||||
- initrd.c
|
|
||||||
- splash.c
|
|
||||||
- stub.c
|
|
||||||
-'''.split()
|
|
||||||
-
|
|
||||||
-if efi_arch[1] in ['ia32', 'x86_64']
|
|
||||||
- stub_sources += 'linux_x86.c'
|
|
||||||
-else
|
|
||||||
- stub_sources += 'linux.c'
|
|
||||||
-endif
|
|
||||||
-
|
|
||||||
conf.set10('HAVE_GNU_EFI', true)
|
|
||||||
conf.set_quoted('EFI_MACHINE_TYPE_NAME', efi_arch[0])
|
|
||||||
|
|
||||||
@@ -332,6 +279,57 @@ if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[
|
|
||||||
efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument']
|
|
||||||
endif
|
|
||||||
|
|
||||||
+############################################################
|
|
||||||
+
|
|
||||||
+efi_headers = files(
|
|
||||||
+ 'bcd.h',
|
|
||||||
+ 'console.h',
|
|
||||||
+ 'cpio.h',
|
|
||||||
+ 'devicetree.h',
|
|
||||||
+ 'disk.h',
|
|
||||||
+ 'drivers.h',
|
|
||||||
+ 'graphics.h',
|
|
||||||
+ 'linux.h',
|
|
||||||
+ 'measure.h',
|
|
||||||
+ 'missing_efi.h',
|
|
||||||
+ 'pe.h',
|
|
||||||
+ 'random-seed.h',
|
|
||||||
+ 'shim.h',
|
|
||||||
+ 'splash.h',
|
|
||||||
+ 'util.h',
|
|
||||||
+ 'xbootldr.h')
|
|
||||||
+
|
|
||||||
+common_sources = [
|
|
||||||
+ 'assert.c',
|
|
||||||
+ 'devicetree.c',
|
|
||||||
+ 'disk.c',
|
|
||||||
+ 'graphics.c',
|
|
||||||
+ 'measure.c',
|
|
||||||
+ 'pe.c',
|
|
||||||
+ 'secure-boot.c',
|
|
||||||
+ 'util.c']
|
|
||||||
+
|
|
||||||
+systemd_boot_sources = [
|
|
||||||
+ 'bcd.c',
|
|
||||||
+ 'boot.c',
|
|
||||||
+ 'console.c',
|
|
||||||
+ 'drivers.c',
|
|
||||||
+ 'random-seed.c',
|
|
||||||
+ 'shim.c',
|
|
||||||
+ 'xbootldr.c']
|
|
||||||
+
|
|
||||||
+stub_sources = [
|
|
||||||
+ 'cpio.c',
|
|
||||||
+ 'initrd.c',
|
|
||||||
+ 'splash.c',
|
|
||||||
+ 'stub.c']
|
|
||||||
+
|
|
||||||
+if efi_arch[1] in ['ia32', 'x86_64']
|
|
||||||
+ stub_sources += 'linux_x86.c'
|
|
||||||
+else
|
|
||||||
+ stub_sources += 'linux.c'
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
systemd_boot_objects = []
|
|
||||||
stub_objects = []
|
|
||||||
foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources
|
|
@ -0,0 +1,129 @@
|
|||||||
|
From 2a4d58bb2ab9ba5487785cc167932440a4f0c13d Mon Sep 17 00:00:00 2001
|
||||||
|
From: Michal Sekletar <msekleta@redhat.com>
|
||||||
|
Date: Tue, 4 Sep 2018 20:03:34 +0200
|
||||||
|
Subject: [PATCH] cryptsetup-generator: allow whitespace characters in keydev
|
||||||
|
specification
|
||||||
|
|
||||||
|
For example, <luks.uuid>=/keyfile:LABEL="KEYFILE FS" previously wouldn't
|
||||||
|
work, because we truncated label at the first whitespace character,
|
||||||
|
i.e. LABEL="KEYFILE".
|
||||||
|
|
||||||
|
(cherry-picked from commit 7949dfa73a44ae6524779689483d12243dfbcfdf)
|
||||||
|
|
||||||
|
Related: #1656869
|
||||||
|
---
|
||||||
|
src/cryptsetup/cryptsetup-generator.c | 64 ++++++++++++++++++---------
|
||||||
|
1 file changed, 43 insertions(+), 21 deletions(-)
|
||||||
|
|
||||||
|
diff --git a/src/cryptsetup/cryptsetup-generator.c b/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
index 03c513c26e..52c1262728 100644
|
||||||
|
--- a/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
+++ b/src/cryptsetup/cryptsetup-generator.c
|
||||||
|
@@ -5,11 +5,13 @@
|
||||||
|
|
||||||
|
#include "alloc-util.h"
|
||||||
|
#include "dropin.h"
|
||||||
|
+#include "escape.h"
|
||||||
|
#include "fd-util.h"
|
||||||
|
#include "fileio.h"
|
||||||
|
#include "fstab-util.h"
|
||||||
|
#include "generator.h"
|
||||||
|
#include "hashmap.h"
|
||||||
|
+#include "id128-util.h"
|
||||||
|
#include "log.h"
|
||||||
|
#include "mkdir.h"
|
||||||
|
#include "parse-util.h"
|
||||||
|
@@ -39,7 +41,7 @@ static char *arg_default_options = NULL;
|
||||||
|
static char *arg_default_keyfile = NULL;
|
||||||
|
|
||||||
|
static int generate_keydev_mount(const char *name, const char *keydev, char **unit, char **mount) {
|
||||||
|
- _cleanup_free_ char *u = NULL, *what = NULL, *where = NULL;
|
||||||
|
+ _cleanup_free_ char *u = NULL, *what = NULL, *where = NULL, *name_escaped = NULL;
|
||||||
|
_cleanup_fclose_ FILE *f = NULL;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
@@ -56,7 +58,11 @@ static int generate_keydev_mount(const char *name, const char *keydev, char **un
|
||||||
|
if (r < 0 && errno != EEXIST)
|
||||||
|
return -errno;
|
||||||
|
|
||||||
|
- where = strjoin("/run/systemd/cryptsetup/keydev-", name);
|
||||||
|
+ name_escaped = cescape(name);
|
||||||
|
+ if (!name_escaped)
|
||||||
|
+ return -ENOMEM;
|
||||||
|
+
|
||||||
|
+ where = strjoin("/run/systemd/cryptsetup/keydev-", name_escaped);
|
||||||
|
if (!where)
|
||||||
|
return -ENOMEM;
|
||||||
|
|
||||||
|
@@ -386,36 +392,52 @@ static int parse_proc_cmdline_item(const char *key, const char *value, void *dat
|
||||||
|
return log_oom();
|
||||||
|
|
||||||
|
} else if (streq(key, "luks.key")) {
|
||||||
|
+ size_t n;
|
||||||
|
+ _cleanup_free_ char *keyfile = NULL, *keydev = NULL;
|
||||||
|
+ char *c;
|
||||||
|
+ const char *keyspec;
|
||||||
|
|
||||||
|
if (proc_cmdline_value_missing(key, value))
|
||||||
|
return 0;
|
||||||
|
|
||||||
|
- r = sscanf(value, "%m[0-9a-fA-F-]=%ms", &uuid, &uuid_value);
|
||||||
|
- if (r == 2) {
|
||||||
|
- char *c;
|
||||||
|
- _cleanup_free_ char *keyfile = NULL, *keydev = NULL;
|
||||||
|
+ n = strspn(value, LETTERS DIGITS "-");
|
||||||
|
+ if (value[n] != '=') {
|
||||||
|
+ if (free_and_strdup(&arg_default_keyfile, value) < 0)
|
||||||
|
+ return log_oom();
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- d = get_crypto_device(uuid);
|
||||||
|
- if (!d)
|
||||||
|
- return log_oom();
|
||||||
|
+ uuid = strndup(value, n);
|
||||||
|
+ if (!uuid)
|
||||||
|
+ return log_oom();
|
||||||
|
|
||||||
|
- c = strrchr(uuid_value, ':');
|
||||||
|
- if (!c)
|
||||||
|
- /* No keydev specified */
|
||||||
|
- return free_and_replace(d->keyfile, uuid_value);
|
||||||
|
+ if (!id128_is_valid(uuid)) {
|
||||||
|
+ log_warning("Failed to parse luks.key= kernel command line switch. UUID is invalid, ignoring.");
|
||||||
|
+ return 0;
|
||||||
|
+ }
|
||||||
|
+
|
||||||
|
+ d = get_crypto_device(uuid);
|
||||||
|
+ if (!d)
|
||||||
|
+ return log_oom();
|
||||||
|
|
||||||
|
- *c = '\0';
|
||||||
|
- keyfile = strdup(uuid_value);
|
||||||
|
- keydev = strdup(++c);
|
||||||
|
+ keyspec = value + n + 1;
|
||||||
|
+ c = strrchr(keyspec, ':');
|
||||||
|
+ if (c) {
|
||||||
|
+ *c = '\0';
|
||||||
|
+ keyfile = strdup(keyspec);
|
||||||
|
+ keydev = strdup(c + 1);
|
||||||
|
|
||||||
|
if (!keyfile || !keydev)
|
||||||
|
return log_oom();
|
||||||
|
+ } else {
|
||||||
|
+ /* No keydev specified */
|
||||||
|
+ keyfile = strdup(keyspec);
|
||||||
|
+ if (!keyfile)
|
||||||
|
+ return log_oom();
|
||||||
|
+ }
|
||||||
|
|
||||||
|
- free_and_replace(d->keyfile, keyfile);
|
||||||
|
- free_and_replace(d->keydev, keydev);
|
||||||
|
- } else if (free_and_strdup(&arg_default_keyfile, value) < 0)
|
||||||
|
- return log_oom();
|
||||||
|
-
|
||||||
|
+ free_and_replace(d->keyfile, keyfile);
|
||||||
|
+ free_and_replace(d->keydev, keydev);
|
||||||
|
} else if (streq(key, "luks.name")) {
|
||||||
|
|
||||||
|
if (proc_cmdline_value_missing(key, value))
|
@ -1,77 +0,0 @@
|
|||||||
From a6c93d3200c0fd0eeee3a725b428cee94108cf48 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Thu, 23 Dec 2021 13:05:01 +0100
|
|
||||||
Subject: [PATCH] meson: move efi summary() section to src/boot/efi
|
|
||||||
|
|
||||||
This way we can add the entries more naturally in the same place where
|
|
||||||
they are defined.
|
|
||||||
|
|
||||||
(cherry picked from commit 3f871f120520aa2d11218735b0741bacc0309b4d)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
meson.build | 16 ++++------------
|
|
||||||
src/boot/efi/meson.build | 9 +++++++++
|
|
||||||
2 files changed, 13 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/meson.build b/meson.build
|
|
||||||
index e07875a054..f040eeab99 100644
|
|
||||||
--- a/meson.build
|
|
||||||
+++ b/meson.build
|
|
||||||
@@ -43,6 +43,10 @@ endif
|
|
||||||
skip_deps = want_ossfuzz or want_libfuzzer
|
|
||||||
fuzzer_build = want_ossfuzz or want_libfuzzer
|
|
||||||
|
|
||||||
+# Create a title-less summary section early, so it ends up first in the output.
|
|
||||||
+# More items are added later after they have been detected.
|
|
||||||
+summary({'build mode' : get_option('mode')})
|
|
||||||
+
|
|
||||||
#####################################################################
|
|
||||||
|
|
||||||
# Try to install the git pre-commit hook
|
|
||||||
@@ -3902,7 +3906,6 @@ alt_time_epoch = run_command('date', '-Is', '-u', '-d', '@@0@'.format(time_epoch
|
|
||||||
check : true).stdout().strip()
|
|
||||||
|
|
||||||
summary({
|
|
||||||
- 'build mode' : get_option('mode'),
|
|
||||||
'split /usr' : split_usr,
|
|
||||||
'split bin-sbin' : split_bin,
|
|
||||||
'prefix directory' : prefixdir,
|
|
||||||
@@ -3960,17 +3963,6 @@ summary({
|
|
||||||
# CPPFLAGS: ${OUR_CPPFLAGS} ${CPPFLAGS}
|
|
||||||
# LDFLAGS: ${OUR_LDFLAGS} ${LDFLAGS}
|
|
||||||
|
|
||||||
-if conf.get('ENABLE_EFI') == 1 and conf.get('HAVE_GNU_EFI') == 1
|
|
||||||
- summary({
|
|
||||||
- 'EFI machine type' : efi_arch[0],
|
|
||||||
- 'EFI CC' : '@0@'.format(' '.join(efi_cc)),
|
|
||||||
- 'EFI LD' : efi_ld,
|
|
||||||
- 'EFI lds' : efi_lds,
|
|
||||||
- 'EFI crt0' : efi_crt0,
|
|
||||||
- 'EFI include directory' : efi_incdir},
|
|
||||||
- section : 'Extensible Firmware Interface')
|
|
||||||
-endif
|
|
||||||
-
|
|
||||||
found = []
|
|
||||||
missing = []
|
|
||||||
|
|
||||||
diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
|
|
||||||
index 1125c64ea3..dd318079fc 100644
|
|
||||||
--- a/src/boot/efi/meson.build
|
|
||||||
+++ b/src/boot/efi/meson.build
|
|
||||||
@@ -279,6 +279,15 @@ if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[
|
|
||||||
efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument']
|
|
||||||
endif
|
|
||||||
|
|
||||||
+summary({
|
|
||||||
+ 'EFI machine type' : efi_arch[0],
|
|
||||||
+ 'EFI CC' : '@0@'.format(' '.join(efi_cc)),
|
|
||||||
+ 'EFI LD' : efi_ld,
|
|
||||||
+ 'EFI lds' : efi_lds,
|
|
||||||
+ 'EFI crt0' : efi_crt0,
|
|
||||||
+ 'EFI include directory' : efi_incdir},
|
|
||||||
+ section : 'Extensible Firmware Interface')
|
|
||||||
+
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
efi_headers = files(
|
|
@ -1,53 +0,0 @@
|
|||||||
From 340f8e02cf4db0e6b3733bfcc14630b3ce8181a5 Mon Sep 17 00:00:00 2001
|
|
||||||
From: =?UTF-8?q?Zbigniew=20J=C4=99drzejewski-Szmek?= <zbyszek@in.waw.pl>
|
|
||||||
Date: Thu, 23 Dec 2021 13:19:42 +0100
|
|
||||||
Subject: [PATCH] meson: report SBAT settings
|
|
||||||
|
|
||||||
(cherry picked from commit e4e44a0107645891e82a538100a7590eb59a516c)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/boot/efi/meson.build | 14 +++++++++++++-
|
|
||||||
1 file changed, 13 insertions(+), 1 deletion(-)
|
|
||||||
|
|
||||||
diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
|
|
||||||
index dd318079fc..e628068596 100644
|
|
||||||
--- a/src/boot/efi/meson.build
|
|
||||||
+++ b/src/boot/efi/meson.build
|
|
||||||
@@ -130,7 +130,6 @@ elif get_option('sbat-distro') != ''
|
|
||||||
if (value == '' or value == 'auto') and not meson.is_cross_build()
|
|
||||||
cmd = 'if [ -e /etc/os-release ]; then . /etc/os-release; else . /usr/lib/os-release; fi; echo $@0@'.format(sbatvar[1])
|
|
||||||
value = run_command(sh, '-c', cmd).stdout().strip()
|
|
||||||
- message('@0@ (from @1@): @2@'.format(sbatvar[0], sbatvar[1], value))
|
|
||||||
endif
|
|
||||||
if value == ''
|
|
||||||
error('Required @0@ option not set and autodetection failed'.format(sbatvar[0]))
|
|
||||||
@@ -147,8 +146,11 @@ elif get_option('sbat-distro') != ''
|
|
||||||
pkgver = get_option('sbat-distro-version')
|
|
||||||
if pkgver == ''
|
|
||||||
efi_conf.set('SBAT_DISTRO_VERSION', 'GIT_VERSION')
|
|
||||||
+ # This is determined during build, not configuration, so we can't display it yet.
|
|
||||||
+ sbat_distro_version_display = '(git version)'
|
|
||||||
else
|
|
||||||
efi_conf.set_quoted('SBAT_DISTRO_VERSION', pkgver)
|
|
||||||
+ sbat_distro_version_display = pkgver
|
|
||||||
endif
|
|
||||||
endif
|
|
||||||
|
|
||||||
@@ -288,6 +290,16 @@ summary({
|
|
||||||
'EFI include directory' : efi_incdir},
|
|
||||||
section : 'Extensible Firmware Interface')
|
|
||||||
|
|
||||||
+if efi_conf.get('SBAT_DISTRO', '') != ''
|
|
||||||
+ summary({
|
|
||||||
+ 'SBAT distro': efi_conf.get('SBAT_DISTRO'),
|
|
||||||
+ 'SBAT distro generation': efi_conf.get('SBAT_DISTRO_GENERATION'),
|
|
||||||
+ 'SBAT distro version': sbat_distro_version_display,
|
|
||||||
+ 'SBAT distro summary': efi_conf.get('SBAT_DISTRO_SUMMARY'),
|
|
||||||
+ 'SBAT distro URL': efi_conf.get('SBAT_DISTRO_URL')},
|
|
||||||
+ section : 'Extensible Firmware Interface')
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
efi_headers = files(
|
|
@ -0,0 +1,25 @@
|
|||||||
|
From c16785e970b83590fc9de4ea0f7e410470d88db5 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Vojtech Trefny <vtrefny@redhat.com>
|
||||||
|
Date: Tue, 4 Dec 2018 16:47:36 +0100
|
||||||
|
Subject: [PATCH] rules: watch metadata changes on DASD devices
|
||||||
|
|
||||||
|
To make sure the change event is emitted and udev db is updated
|
||||||
|
after metadata changes.
|
||||||
|
|
||||||
|
(cherry picked from commit 38397c8ce044fdc0138c9919168a856c0e16f720)
|
||||||
|
|
||||||
|
Resolves: #1638676
|
||||||
|
---
|
||||||
|
rules/60-block.rules | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/rules/60-block.rules b/rules/60-block.rules
|
||||||
|
index 343fc06f85..a1458e9188 100644
|
||||||
|
--- a/rules/60-block.rules
|
||||||
|
+++ b/rules/60-block.rules
|
||||||
|
@@ -8,4 +8,4 @@ ACTION=="add", SUBSYSTEM=="module", KERNEL=="block", ATTR{parameters/events_dfl_
|
||||||
|
ACTION=="change", SUBSYSTEM=="scsi", ENV{DEVTYPE}=="scsi_device", TEST=="block", ATTR{block/*/uevent}="change"
|
||||||
|
|
||||||
|
# watch metadata changes, caused by tools closing the device node which was opened for writing
|
||||||
|
-ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*|xvd*|pmem*|mmcblk*", OPTIONS+="watch"
|
||||||
|
+ACTION!="remove", SUBSYSTEM=="block", KERNEL=="loop*|nvme*|sd*|vd*|xvd*|pmem*|mmcblk*|dasd*", OPTIONS+="watch"
|
@ -1,79 +0,0 @@
|
|||||||
From 2d3b47dcd5a4b356c481f89c483db3eb308fcab9 Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Janssen <medhefgo@web.de>
|
|
||||||
Date: Tue, 28 Dec 2021 13:10:39 +0100
|
|
||||||
Subject: [PATCH] boot: Build BCD parser only on arches supported by Windows
|
|
||||||
|
|
||||||
(cherry picked from commit 77fcf28cb88b302453b4c991a6571cb37f10634d)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
src/boot/efi/boot.c | 2 ++
|
|
||||||
src/boot/efi/meson.build | 21 ++++++++++++---------
|
|
||||||
2 files changed, 14 insertions(+), 9 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/src/boot/efi/boot.c b/src/boot/efi/boot.c
|
|
||||||
index 0286914b8b..83358406f2 100644
|
|
||||||
--- a/src/boot/efi/boot.c
|
|
||||||
+++ b/src/boot/efi/boot.c
|
|
||||||
@@ -1941,6 +1941,7 @@ static void config_entry_add_osx(Config *config) {
|
|
||||||
}
|
|
||||||
|
|
||||||
static void config_entry_add_windows(Config *config, EFI_HANDLE *device, EFI_FILE *root_dir) {
|
|
||||||
+#if defined(__i386__) || defined(__x86_64__) || defined(__arm__) || defined(__aarch64__)
|
|
||||||
_cleanup_freepool_ CHAR8 *bcd = NULL;
|
|
||||||
CHAR16 *title = NULL;
|
|
||||||
EFI_STATUS err;
|
|
||||||
@@ -1961,6 +1962,7 @@ static void config_entry_add_windows(Config *config, EFI_HANDLE *device, EFI_FIL
|
|
||||||
config_entry_add_loader_auto(config, device, root_dir, NULL,
|
|
||||||
L"auto-windows", 'w', title ?: L"Windows Boot Manager",
|
|
||||||
L"\\EFI\\Microsoft\\Boot\\bootmgfw.efi");
|
|
||||||
+#endif
|
|
||||||
}
|
|
||||||
|
|
||||||
static void config_entry_add_linux(
|
|
||||||
diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
|
|
||||||
index e628068596..6a0c8da9ba 100644
|
|
||||||
--- a/src/boot/efi/meson.build
|
|
||||||
+++ b/src/boot/efi/meson.build
|
|
||||||
@@ -331,7 +331,6 @@ common_sources = [
|
|
||||||
'util.c']
|
|
||||||
|
|
||||||
systemd_boot_sources = [
|
|
||||||
- 'bcd.c',
|
|
||||||
'boot.c',
|
|
||||||
'console.c',
|
|
||||||
'drivers.c',
|
|
||||||
@@ -351,6 +350,18 @@ else
|
|
||||||
stub_sources += 'linux.c'
|
|
||||||
endif
|
|
||||||
|
|
||||||
+# BCD parser only makes sense on arches that Windows supports.
|
|
||||||
+if efi_arch[1] in ['ia32', 'x86_64', 'arm', 'aarch64']
|
|
||||||
+ systemd_boot_sources += 'bcd.c'
|
|
||||||
+ tests += [
|
|
||||||
+ [['src/boot/efi/test-bcd.c'],
|
|
||||||
+ [],
|
|
||||||
+ [libzstd],
|
|
||||||
+ [],
|
|
||||||
+ 'HAVE_ZSTD'],
|
|
||||||
+ ]
|
|
||||||
+endif
|
|
||||||
+
|
|
||||||
systemd_boot_objects = []
|
|
||||||
stub_objects = []
|
|
||||||
foreach file : fundamental_source_paths + common_sources + systemd_boot_sources + stub_sources
|
|
||||||
@@ -408,14 +419,6 @@ endforeach
|
|
||||||
|
|
||||||
############################################################
|
|
||||||
|
|
||||||
-tests += [
|
|
||||||
- [['src/boot/efi/test-bcd.c'],
|
|
||||||
- [],
|
|
||||||
- [libzstd],
|
|
||||||
- [],
|
|
||||||
- 'HAVE_ZSTD'],
|
|
||||||
-]
|
|
||||||
-
|
|
||||||
test_efi_disk_img = custom_target(
|
|
||||||
'test-efi-disk.img',
|
|
||||||
input : [efi_stubs[0][0], efi_stubs[1][1]],
|
|
@ -0,0 +1,41 @@
|
|||||||
|
From 75c9af80cf3529c76988451e63f98010c86f48f1 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Lubomir Rintel <lkundrak@v3.sk>
|
||||||
|
Date: Wed, 28 Nov 2018 11:44:20 +0100
|
||||||
|
Subject: [PATCH] sysctl.d: switch net.ipv4.conf.all.rp_filter from 1 to 2
|
||||||
|
|
||||||
|
This switches the RFC3704 Reverse Path filtering from Strict mode to Loose
|
||||||
|
mode. The Strict mode breaks some pretty common and reasonable use cases,
|
||||||
|
such as keeping connections via one default route alive after another one
|
||||||
|
appears (e.g. plugging an Ethernet cable when connected via Wi-Fi).
|
||||||
|
|
||||||
|
The strict filter also makes it impossible for NetworkManager to do
|
||||||
|
connectivity check on a newly arriving default route (it starts with a
|
||||||
|
higher metric and is bumped lower if there's connectivity).
|
||||||
|
|
||||||
|
Kernel's default is 0 (no filter), but a Loose filter is good enough. The
|
||||||
|
few use cases where a Strict mode could make sense can easily override
|
||||||
|
this.
|
||||||
|
|
||||||
|
The distributions that don't care about the client use cases and prefer a
|
||||||
|
strict filter could just ship a custom configuration in
|
||||||
|
/usr/lib/sysctl.d/ to override this.
|
||||||
|
|
||||||
|
Cherry-picked from: 230450d4e4f1f5fc9fa4295ed9185eea5b6ea16e
|
||||||
|
Resolves: #1653824
|
||||||
|
---
|
||||||
|
sysctl.d/50-default.conf | 2 +-
|
||||||
|
1 file changed, 1 insertion(+), 1 deletion(-)
|
||||||
|
|
||||||
|
diff --git a/sysctl.d/50-default.conf b/sysctl.d/50-default.conf
|
||||||
|
index e263cf0628..b0645f33e7 100644
|
||||||
|
--- a/sysctl.d/50-default.conf
|
||||||
|
+++ b/sysctl.d/50-default.conf
|
||||||
|
@@ -22,7 +22,7 @@ kernel.sysrq = 16
|
||||||
|
kernel.core_uses_pid = 1
|
||||||
|
|
||||||
|
# Source route verification
|
||||||
|
-net.ipv4.conf.all.rp_filter = 1
|
||||||
|
+net.ipv4.conf.all.rp_filter = 2
|
||||||
|
|
||||||
|
# Do not accept source routing
|
||||||
|
net.ipv4.conf.all.accept_source_route = 0
|
@ -1,96 +0,0 @@
|
|||||||
From 38afe3074812ab355bc20a36d41871f1b4f4386b Mon Sep 17 00:00:00 2001
|
|
||||||
From: Jan Janssen <medhefgo@web.de>
|
|
||||||
Date: Wed, 29 Dec 2021 15:02:04 +0100
|
|
||||||
Subject: [PATCH] meson: Remove efi-cc option
|
|
||||||
|
|
||||||
Changing the efi compiler this way doesn't really work. The gnu-efi
|
|
||||||
header checks as well as supported compiler flag checks use the
|
|
||||||
regular cc that meson detects. Changing the compiler this way will
|
|
||||||
end up with bad compiler flags. For the very same reason, this does
|
|
||||||
not work with a cross-compiler without going through proper meson
|
|
||||||
cross-compilation steps either.
|
|
||||||
|
|
||||||
The proper way to build systemd-boot with a different compiler is to
|
|
||||||
use a different build folder and then just use the proper ninja build
|
|
||||||
target to only build the bootloader/stub.
|
|
||||||
|
|
||||||
(cherry picked from commit 52adf0e91ef00d21a2e83f7669d0823667ce6b6c)
|
|
||||||
|
|
||||||
Related: #2017035
|
|
||||||
---
|
|
||||||
meson_options.txt | 2 --
|
|
||||||
src/boot/efi/meson.build | 14 ++++----------
|
|
||||||
2 files changed, 4 insertions(+), 12 deletions(-)
|
|
||||||
|
|
||||||
diff --git a/meson_options.txt b/meson_options.txt
|
|
||||||
index 401f0933d7..62cdeb4201 100644
|
|
||||||
--- a/meson_options.txt
|
|
||||||
+++ b/meson_options.txt
|
|
||||||
@@ -414,8 +414,6 @@ option('dbus', type : 'combo', choices : ['auto', 'true', 'false'],
|
|
||||||
|
|
||||||
option('gnu-efi', type : 'combo', choices : ['auto', 'true', 'false'],
|
|
||||||
description : 'gnu-efi support for sd-boot')
|
|
||||||
-option('efi-cc', type : 'array',
|
|
||||||
- description : 'the compiler to use for EFI modules')
|
|
||||||
# Note that LLD does not support PE/COFF relocations
|
|
||||||
# https://lists.llvm.org/pipermail/llvm-dev/2021-March/149234.html
|
|
||||||
option('efi-ld', type : 'combo', choices : ['auto', 'bfd', 'gold'],
|
|
||||||
diff --git a/src/boot/efi/meson.build b/src/boot/efi/meson.build
|
|
||||||
index 6a0c8da9ba..11e6bf2dd0 100644
|
|
||||||
--- a/src/boot/efi/meson.build
|
|
||||||
+++ b/src/boot/efi/meson.build
|
|
||||||
@@ -44,10 +44,6 @@ if not cc.has_header_symbol('efi.h', 'EFI_IMAGE_MACHINE_X64',
|
|
||||||
endif
|
|
||||||
|
|
||||||
objcopy = find_program('objcopy')
|
|
||||||
-efi_cc = get_option('efi-cc')
|
|
||||||
-if efi_cc.length() == 0
|
|
||||||
- efi_cc = cc.cmd_array()
|
|
||||||
-endif
|
|
||||||
|
|
||||||
efi_ld = get_option('efi-ld')
|
|
||||||
if efi_ld == 'auto'
|
|
||||||
@@ -62,7 +58,7 @@ efi_libdir = ''
|
|
||||||
foreach dir : [get_option('efi-libdir'),
|
|
||||||
'/usr/lib/gnuefi' / efi_arch[0],
|
|
||||||
run_command('realpath', '-e',
|
|
||||||
- '/usr/lib' / run_command(efi_cc, '-print-multi-os-directory').stdout().strip()).stdout().strip()]
|
|
||||||
+ '/usr/lib' / run_command(cc.cmd_array(), '-print-multi-os-directory').stdout().strip()).stdout().strip()]
|
|
||||||
if dir != '' and fs.is_dir(dir)
|
|
||||||
efi_libdir = dir
|
|
||||||
break
|
|
||||||
@@ -275,15 +271,13 @@ if run_command('grep', '-q', '__CTOR_LIST__', efi_lds).returncode() == 0
|
|
||||||
]
|
|
||||||
endif
|
|
||||||
|
|
||||||
-efi_cc_version = run_command(efi_cc, '--version').stdout().split('\n')[0]
|
|
||||||
-if efi_cc_version.contains('clang') and efi_cc_version.split('.')[0].split(' ')[-1].to_int() <= 10
|
|
||||||
+if cc.get_id() == 'clang' and cc.version().split('.')[0].to_int() <= 10
|
|
||||||
# clang <= 10 doesn't pass -T to the linker and then even complains about it being unused
|
|
||||||
efi_ldflags += ['-Wl,-T,' + efi_lds, '-Wno-unused-command-line-argument']
|
|
||||||
endif
|
|
||||||
|
|
||||||
summary({
|
|
||||||
'EFI machine type' : efi_arch[0],
|
|
||||||
- 'EFI CC' : '@0@'.format(' '.join(efi_cc)),
|
|
||||||
'EFI LD' : efi_ld,
|
|
||||||
'EFI lds' : efi_lds,
|
|
||||||
'EFI crt0' : efi_crt0,
|
|
||||||
@@ -368,7 +362,7 @@ foreach file : fundamental_source_paths + common_sources + systemd_boot_sources
|
|
||||||
o_file = custom_target(file.split('/')[-1] + '.o',
|
|
||||||
input : file,
|
|
||||||
output : file.split('/')[-1] + '.o',
|
|
||||||
- command : [efi_cc, '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags],
|
|
||||||
+ command : [cc.cmd_array(), '-c', '@INPUT@', '-o', '@OUTPUT@', efi_cflags],
|
|
||||||
depend_files : efi_headers + fundamental_headers)
|
|
||||||
if (fundamental_source_paths + common_sources + systemd_boot_sources).contains(file)
|
|
||||||
systemd_boot_objects += o_file
|
|
||||||
@@ -389,7 +383,7 @@ foreach tuple : [['systemd_boot.so', systemd_boot_efi_name, systemd_boot_objects
|
|
||||||
tuple[0],
|
|
||||||
input : tuple[2],
|
|
||||||
output : tuple[0],
|
|
||||||
- command : [efi_cc, '-o', '@OUTPUT@', efi_ldflags, efi_cflags, tuple[2], '-lefi', '-lgnuefi', '-lgcc'],
|
|
||||||
+ command : [cc.cmd_array(), '-o', '@OUTPUT@', efi_ldflags, efi_cflags, tuple[2], '-lefi', '-lgnuefi', '-lgcc'],
|
|
||||||
install : tuple[3],
|
|
||||||
install_dir : bootlibdir)
|
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue
Block a user