Assorted remote/shared/resolved hardening fixes flagged by kres (#42978)
This commit is contained in:
@@ -798,6 +798,49 @@ test ! -f "$fake_root$hierarchy/now-is-mutable"
|
||||
)
|
||||
|
||||
|
||||
( init_trap
|
||||
: "Malformed work_dir metadata is rejected without removing unrelated paths"
|
||||
[[ -z "$roots_dir" ]] && exit 0
|
||||
|
||||
fake_root="$roots_dir/empty-work-dir"
|
||||
hierarchy=/opt
|
||||
extension_data_dir="$fake_root/var/lib/extensions.mutable$hierarchy"
|
||||
work_dir_file="$fake_root$hierarchy/.systemd-sysext/work_dir"
|
||||
traversal_target="$roots_dir/work-dir-traversal-target"
|
||||
absolute_target="$fake_root/work-dir-absolute-target"
|
||||
|
||||
[[ "$FSTYPE" == "fuseblk" ]] && exit 0
|
||||
|
||||
prepare_root "$fake_root" "$hierarchy"
|
||||
prepare_extension_image "$fake_root" "$hierarchy"
|
||||
prepare_read_only_hierarchy "$fake_root" "$hierarchy"
|
||||
touch "$fake_root/root-sentinel"
|
||||
mkdir "$traversal_target" "$absolute_target"
|
||||
touch "$traversal_target/sentinel" "$absolute_target/sentinel"
|
||||
prepend_trap "rm -rf ${traversal_target@Q} ${absolute_target@Q}"
|
||||
|
||||
run_systemd_sysext "$fake_root" --mutable=yes merge
|
||||
prepend_trap "rm -rf ${extension_data_dir@Q}"
|
||||
|
||||
# Mutable overlays bind-mount the metadata directory read-only. Unmount that bind first to simulate
|
||||
# corrupted on-disk metadata, then try malformed work_dir values.
|
||||
umount "$fake_root$hierarchy/.systemd-sysext"
|
||||
work_dir=$(<"$work_dir_file")
|
||||
|
||||
for invalid_work_dir in "" ../work-dir-traversal-target /work-dir-absolute-target; do
|
||||
printf '%s\n' "$invalid_work_dir" >"$work_dir_file"
|
||||
(! run_systemd_sysext "$fake_root" unmerge)
|
||||
test -f "$fake_root/root-sentinel"
|
||||
test -f "$traversal_target/sentinel"
|
||||
test -f "$absolute_target/sentinel"
|
||||
done
|
||||
|
||||
# Restore valid metadata and unmerge normally, so the test case leaves no mounted hierarchy behind.
|
||||
printf '%s\n' "$work_dir" >"$work_dir_file"
|
||||
run_systemd_sysext "$fake_root" unmerge
|
||||
)
|
||||
|
||||
|
||||
( init_trap
|
||||
: "/var/lib/extensions.mutable/… does not exist, auto-mutability, read-only merged"
|
||||
fake_root=${roots_dir:+"$roots_dir/simple-read-only-explicit"}
|
||||
|
||||
Reference in New Issue
Block a user