mirror of
https://github.com/morgan9e/systemd
synced 2026-04-14 08:25:20 +09:00
core/namespace: honor MountEntry.read_only, .options, and so on in static entries
Otherwise, ProtectHome=tmpfs makes /home/ and friends not read-only. Also, mount options for /run/ specified in MountAPIVFS=yes are not applied. The function append_static_mounts() was introduced in5327c910d2, but at that time, there were neither .read_only nor .options in the struct. But, when later the struct is extended, the function was not updated and they were not copied from the static table. The fields has been used in static tables sincee4da7d8c79, and also in94293d65cd. Fixes #34825.
This commit is contained in:
@@ -714,11 +714,16 @@ static int append_static_mounts(MountList *ml, const MountEntry *mounts, size_t
|
||||
if (!me)
|
||||
return log_oom_debug();
|
||||
|
||||
*me = (MountEntry) {
|
||||
.path_const = mount_entry_path(m),
|
||||
.mode = m->mode,
|
||||
.ignore = m->ignore || ignore_protect,
|
||||
};
|
||||
/* No dynamic values allowed. */
|
||||
assert(m->path_const);
|
||||
assert(!m->path_malloc);
|
||||
assert(!m->unprefixed_path_malloc);
|
||||
assert(!m->source_malloc);
|
||||
assert(!m->options_malloc);
|
||||
assert(!m->overlay_layers);
|
||||
|
||||
*me = *m;
|
||||
me->ignore = me->ignore || ignore_protect;
|
||||
}
|
||||
|
||||
return 0;
|
||||
|
||||
@@ -55,13 +55,22 @@ if [[ -z "${COVERAGE_BUILD_DIR:-}" ]]; then
|
||||
bash -xec "test ! -w /home; test ! -w /root; test ! -w /run/user; test ! -e $MARK"
|
||||
systemd-run --wait --pipe -p ProtectHome=read-only \
|
||||
bash -xec "test ! -w /home; test ! -w /root; test ! -w /run/user; test -e $MARK"
|
||||
systemd-run --wait --pipe -p ProtectHome=tmpfs \
|
||||
bash -xec "test -w /home; test -w /root; test -w /run/user; test ! -e $MARK"
|
||||
systemd-run --wait --pipe -p ProtectHome=tmpfs -p TemporaryFileSystem=/home/foo \
|
||||
bash -xec "test ! -w /home; test ! -w /root; test ! -w /run/user; test ! -e $MARK; test -w /home/foo"
|
||||
systemd-run --wait --pipe -p ProtectHome=no \
|
||||
bash -xec "test -w /home; test -w /root; test -w /run/user; test -e $MARK"
|
||||
rm -f "$MARK"
|
||||
fi
|
||||
|
||||
systemd-run --wait --pipe -p PrivateMounts=true -p MountAPIVFS=yes \
|
||||
bash -xec '[[ "$(findmnt --mountpoint /proc --noheadings -o FSTYPE)" == proc ]];
|
||||
[[ "$$(findmnt --mountpoint /dev --noheadings -o FSTYPE)" =~ (devtmpfs|tmpfs) ]];
|
||||
[[ "$$(findmnt --mountpoint /sys --noheadings -o FSTYPE)" =~ (sysfs|tmpfs) ]];
|
||||
[[ "$$(findmnt --mountpoint /run --noheadings -o FSTYPE)" == tmpfs ]];
|
||||
[[ "$$(findmnt --mountpoint /run --noheadings -o VFS-OPTIONS)" =~ rw ]];
|
||||
[[ "$$(findmnt --mountpoint /run --noheadings -o VFS-OPTIONS)" =~ nosuid ]];
|
||||
[[ "$$(findmnt --mountpoint /run --noheadings -o VFS-OPTIONS)" =~ nodev ]]'
|
||||
|
||||
if proc_supports_option "hidepid=off"; then
|
||||
systemd-run --wait --pipe -p ProtectProc=noaccess -p User=testuser \
|
||||
bash -xec 'test -e /proc/1; test ! -r /proc/1; test -r /proc/$$$$/comm'
|
||||
|
||||
Reference in New Issue
Block a user