@@ -63,6 +63,8 @@ ALL_TESTS="$ALL_TESTS 0008:150:1"
63
63
ALL_TESTS=" $ALL_TESTS 0009:150:1"
64
64
ALL_TESTS=" $ALL_TESTS 0010:1:1"
65
65
ALL_TESTS=" $ALL_TESTS 0011:1:1"
66
+ ALL_TESTS=" $ALL_TESTS 0012:1:1"
67
+ ALL_TESTS=" $ALL_TESTS 0013:1:1"
66
68
67
69
# Kselftest framework requirement - SKIP code is 4.
68
70
ksft_skip=4
@@ -470,6 +472,38 @@ kmod_test_0011()
470
472
echo " $MODPROBE " > /proc/sys/kernel/modprobe
471
473
}
472
474
475
+ kmod_check_visibility ()
476
+ {
477
+ local name=" $1 "
478
+ local cmd=" $2 "
479
+
480
+ modprobe $DEFAULT_KMOD_DRIVER
481
+
482
+ local priv=$( eval $cmd )
483
+ local unpriv=$( capsh --drop=CAP_SYSLOG -- -c " $cmd " )
484
+
485
+ if [ " $priv " = " $unpriv " ] || \
486
+ [ " ${priv: 0: 3} " = " 0x0" ] || \
487
+ [ " ${unpriv: 0: 3} " != " 0x0" ] ; then
488
+ echo " ${FUNCNAME[0]} : FAIL, $name visible to unpriv: '$priv ' vs '$unpriv '" >&2
489
+ exit 1
490
+ else
491
+ echo " ${FUNCNAME[0]} : OK!"
492
+ fi
493
+ }
494
+
495
+ kmod_test_0012 ()
496
+ {
497
+ kmod_check_visibility /proc/modules \
498
+ " grep '^${DEFAULT_KMOD_DRIVER} \b' /proc/modules | awk '{print \$ NF}'"
499
+ }
500
+
501
+ kmod_test_0013 ()
502
+ {
503
+ kmod_check_visibility ' /sys/module/*/sections/*' \
504
+ " cat /sys/module/${DEFAULT_KMOD_DRIVER} /sections/.*text | head -n1"
505
+ }
506
+
473
507
list_tests ()
474
508
{
475
509
echo " Test ID list:"
@@ -489,6 +523,8 @@ list_tests()
489
523
echo " 0009 x $( get_test_count 0009) - multithreaded - push kmod_concurrent over max_modprobes for get_fs_type()"
490
524
echo " 0010 x $( get_test_count 0010) - test nonexistent modprobe path"
491
525
echo " 0011 x $( get_test_count 0011) - test completely disabling module autoloading"
526
+ echo " 0012 x $( get_test_count 0012) - test /proc/modules address visibility under CAP_SYSLOG"
527
+ echo " 0013 x $( get_test_count 0013) - test /sys/module/*/sections/* visibility under CAP_SYSLOG"
492
528
}
493
529
494
530
usage ()
0 commit comments