Resolves: RHEL-108555,RHEL-108568,RHEL-108576,RHEL-108584,RHEL-108596,RHEL-108598,RHEL-109096,RHEL-109488,RHEL-111065,RHEL-31756,RHEL-50103
93 lines
3.5 KiB
Diff
93 lines
3.5 KiB
Diff
From f3f939b236636fdca38e89ca564a669f0da4fd4d Mon Sep 17 00:00:00 2001
|
||
From: Frantisek Sumsal <frantisek@sumsal.cz>
|
||
Date: Fri, 19 May 2023 18:42:36 +0200
|
||
Subject: [PATCH] test: check if we correctly handle invalid UTF-8 in mount
|
||
stuff
|
||
|
||
Provides coverage for #27611.
|
||
|
||
(cherry picked from commit b74df879fc81d4668ce14532a76c23b85e651170)
|
||
|
||
Resolves: RHEL-108584
|
||
---
|
||
.../units/testsuite-07.mount-invalid-chars.sh | 70 +++++++++++++++++++
|
||
1 file changed, 70 insertions(+)
|
||
create mode 100755 test/units/testsuite-07.mount-invalid-chars.sh
|
||
|
||
diff --git a/test/units/testsuite-07.mount-invalid-chars.sh b/test/units/testsuite-07.mount-invalid-chars.sh
|
||
new file mode 100755
|
||
index 0000000000..617ea697c8
|
||
--- /dev/null
|
||
+++ b/test/units/testsuite-07.mount-invalid-chars.sh
|
||
@@ -0,0 +1,70 @@
|
||
+#!/usr/bin/env bash
|
||
+# SPDX-License-Identifier: LGPL-2.1-or-later
|
||
+set -eux
|
||
+set -o pipefail
|
||
+
|
||
+# Don't send invalid characters over dbus if a mount contains them
|
||
+
|
||
+at_exit() {
|
||
+ mountpoint -q /proc/1/mountinfo && umount /proc/1/mountinfo
|
||
+ [[ -e /tmp/fstab.bak ]] && mv -f /tmp/fstab /etc/fstab
|
||
+ rm -f /run/systemd/system/foo-*.mount
|
||
+ systemctl daemon-reload
|
||
+}
|
||
+
|
||
+trap at_exit EXIT
|
||
+
|
||
+# Check invalid characters directly in /proc/mountinfo
|
||
+#
|
||
+# This is a bit tricky (and hacky), since we have to temporarily replace
|
||
+# PID 1's /proc/mountinfo, but we have to keep the original mounts intact,
|
||
+# otherwise systemd would unmount them on reload
|
||
+TMP_MOUNTINFO="$(mktemp)"
|
||
+
|
||
+cp /proc/1/mountinfo "$TMP_MOUNTINFO"
|
||
+# Add a mount entry with a "Unicode non-character" in it
|
||
+echo -ne '69 1 252:2 / /foo/mountinfo rw,relatime shared:1 - cifs //foo\ufffebar rw,seclabel\n' >>"$TMP_MOUNTINFO"
|
||
+mount --bind "$TMP_MOUNTINFO" /proc/1/mountinfo
|
||
+systemctl daemon-reload
|
||
+# On affected versions this would throw an error:
|
||
+# Failed to get properties: Bad message
|
||
+systemctl status foo-mountinfo.mount
|
||
+
|
||
+umount /proc/1/mountinfo
|
||
+systemctl daemon-reload
|
||
+rm -f "$TMP_MOUNTINFO"
|
||
+
|
||
+# Check invalid characters in a mount unit
|
||
+#
|
||
+# systemd already handles this and refuses to load the invalid string, e.g.:
|
||
+# foo-fstab.mount:9: String is not UTF-8 clean, ignoring assignment: What=//localhost/foo<6F><6F><EFBFBD>bar
|
||
+#
|
||
+# a) Unit generated from /etc/fstab
|
||
+[[ -e /etc/fstab ]] && cp -f /etc/fstab /tmp/fstab.bak
|
||
+
|
||
+echo -ne '//localhost/foo\ufffebar /foo/fstab cifs defaults 0 0\n' >/etc/fstab
|
||
+systemctl daemon-reload
|
||
+[[ "$(systemctl show -P UnitFileState foo-fstab.mount)" == bad ]]
|
||
+
|
||
+# b) Unit generated from /etc/fstab (but the invalid character is in options)
|
||
+echo -ne '//localhost/foobar /foo/fstab/opt cifs nosuid,a\ufffeb,noexec 0 0\n' >/etc/fstab
|
||
+systemctl daemon-reload
|
||
+[[ "$(systemctl show -P UnitFileState foo-fstab-opt.mount)" == bad ]]
|
||
+rm -f /etc/fstab
|
||
+
|
||
+[[ -e /tmp/fstab.bak ]] && mv -f /tmp/fstab /etc/fstab
|
||
+systemctl daemon-reload
|
||
+
|
||
+# c) Mount unit
|
||
+mkdir -p /run/systemd/system
|
||
+echo -ne '[Mount]\nWhat=//localhost/foo\ufffebar\nWhere=/foo/unit\nType=cifs\nOptions=noexec\n' >/run/systemd/system/foo-unit.mount
|
||
+systemctl daemon-reload
|
||
+[[ "$(systemctl show -P UnitFileState foo-unit.mount)" == bad ]]
|
||
+rm -f /run/systemd/system/foo-unit.mount
|
||
+
|
||
+# d) Mount unit (but the invalid character is in Options=)
|
||
+mkdir -p /run/systemd/system
|
||
+echo -ne '[Mount]\nWhat=//localhost/foobar\nWhere=/foo/unit/opt\nType=cifs\nOptions=noexec,a\ufffeb,nosuid\n' >/run/systemd/system/foo-unit-opt.mount
|
||
+systemctl daemon-reload
|
||
+[[ "$(systemctl show -P UnitFileState foo-unit-opt.mount)" == bad ]]
|
||
+rm -f /run/systemd/system/foo-unit-opt.mount
|