[LTP] [PATCH 2/4] ima_conditionals.sh: Split test by request
Petr Vorel
pvorel@suse.cz
Thu Oct 2 10:36:59 CEST 2025
This helps to run all testcases on systems without CONFIG_IMA_WRITE_POLICY=y
(disabled by default in mainline, therefore disabled for some distros,
e.g. openSUSE Tumbleweed), if SUT reboots.
The downside is creating user account 4x instead just once.
Signed-off-by: Petr Vorel <pvorel@suse.cz>
---
runtest/ima | 5 +-
.../integrity/ima/tests/ima_conditionals.sh | 67 ++++++++++++-------
2 files changed, 47 insertions(+), 25 deletions(-)
diff --git a/runtest/ima b/runtest/ima
index 01942eefa3..c8d0c6801e 100644
--- a/runtest/ima
+++ b/runtest/ima
@@ -6,5 +6,8 @@ ima_violations ima_violations.sh
ima_keys ima_keys.sh
ima_kexec ima_kexec.sh
ima_selinux ima_selinux.sh
-ima_conditionals ima_conditionals.sh
+ima_conditionals_uid ima_conditionals.sh -r uid
+ima_conditionals_fowner ima_conditionals.sh -r fowner
+ima_conditionals_gid ima_conditionals.sh -r gid
+ima_conditionals_fgroup ima_conditionals.sh -r fgroup
evm_overlay evm_overlay.sh
diff --git a/testcases/kernel/security/integrity/ima/tests/ima_conditionals.sh b/testcases/kernel/security/integrity/ima/tests/ima_conditionals.sh
index a8b2e1015a..afa2ae05da 100755
--- a/testcases/kernel/security/integrity/ima/tests/ima_conditionals.sh
+++ b/testcases/kernel/security/integrity/ima/tests/ima_conditionals.sh
@@ -11,35 +11,68 @@
TST_NEEDS_CMDS="cat chgrp chown id sg sudo useradd userdel"
TST_SETUP="setup"
-TST_CNT=1
+TST_TESTFUNC="test"
REQUIRE_TMP_USER=1
+TST_OPTS="r:"
+TST_USAGE="usage"
+TST_PARSE_ARGS="parse_args"
+REQUEST="uid"
+
+parse_args()
+{
+ REQUEST="$2"
+}
+
+usage()
+{
+ cat << EOF
+usage: $0 [-r <uid|fowner|gid|fgroup>]
+
+OPTIONS
+-r Specify the request to be measured. One of:
+ uid, fowner, gid, fgroup
+ Default: uid
+EOF
+}
setup()
{
+ case "$REQUEST" in
+ fgroup|fowner|gid|uid)
+ tst_res TINFO "request '$REQUEST'"
+ ;;
+ *) tst_brk TBROK "Invalid -r '$REQUEST', use: -r <uid|fowner|gid|fgroup>";;
+ esac
+
if check_need_signed_policy; then
tst_brk TCONF "policy have to be signed"
fi
}
-verify_measurement()
+test()
{
+ # needs to be checked each run (not in setup)
+ require_policy_writable
+
local request="$1"
local test_file="$PWD/test.txt"
local cmd="cat $test_file > /dev/null"
-
local value="$(id -u $IMA_USER)"
- [ "$request" = 'gid' -o "$request" = 'fgroup' ] && value="$(id -g $IMA_USER)"
- # needs to be checked each run (not in setup)
- require_policy_writable
+ if [ "$REQUEST" = 'gid' -o "$REQUEST" = 'fgroup' ]; then
+ if tst_kvcmp -lt 5.16; then
+ tst_brk TCONF "gid and fgroup options require kernel 5.16 or newer"
+ fi
+ value="$(id -g $IMA_USER)"
+ fi
ROD rm -f $test_file
- tst_res TINFO "verify measuring user files when requested via $request"
- ROD echo "measure $request=$value" \> $IMA_POLICY
- ROD echo "$(cat /proc/uptime) $request test" \> $test_file
+ tst_res TINFO "verify measuring user files when requested via $REQUEST"
+ ROD echo "measure $REQUEST=$value" \> $IMA_POLICY
+ ROD echo "$(cat /proc/uptime) $REQUEST test" \> $test_file
- case "$request" in
+ case "$REQUEST" in
fgroup)
chgrp $IMA_USER $test_file
sh -c "$cmd"
@@ -50,24 +83,10 @@ verify_measurement()
;;
gid) sudo sg $IMA_USER "sh -c '$cmd'";;
uid) sudo -n -u $IMA_USER sh -c "$cmd";;
- *) tst_brk TBROK "Invalid res type '$1'";;
esac
ima_check $test_file
}
-test1()
-{
- verify_measurement uid
- verify_measurement fowner
-
- if tst_kvcmp -lt 5.16; then
- tst_brk TCONF "gid and fgroup options require kernel 5.16 or newer"
- fi
-
- verify_measurement gid
- verify_measurement fgroup
-}
-
. ima_setup.sh
tst_run
--
2.51.0
More information about the ltp
mailing list