Test that request_module() fails with -ENOENT when /proc/sys/kernel/modprobe contains (a) a nonexistent path, and (b) an empty path. Case (b) is a regression test for the patch "kmod: make request_module() return an error when autoloading is disabled". Tested with 'kmod.sh -t 0010 && kmod.sh -t 0011', and also simply with 'kmod.sh' to run all kmod tests.
Unified · Split
| @@ -61,6 +61,8 @@ ALL_TESTS="$ALL_TESTS 0006:10:1" · 60 unmodified lines | |||
| 61 | ALL_TESTS="$ALL_TESTS 0007:5:1" | 61 | ALL_TESTS="$ALL_TESTS 0007:5:1" |
| 62 | ALL_TESTS="$ALL_TESTS 0008:150:1" | 62 | ALL_TESTS="$ALL_TESTS 0008:150:1" |
| 63 | ALL_TESTS="$ALL_TESTS 0009:150:1" | 63 | ALL_TESTS="$ALL_TESTS 0009:150:1" |
| 64 | ALL_TESTS="$ALL_TESTS 0010:1:1" | ||
| 65 | ALL_TESTS="$ALL_TESTS 0011:1:1" | ||
| 64 | 66 | ||
| 65 | # Kselftest framework requirement - SKIP code is 4. | 67 | # Kselftest framework requirement - SKIP code is 4. |
| 66 | ksft_skip=4 | 68 | ksft_skip=4 |
| @@ -149,6 +151,7 @@ function load_req_mod() · 82 unmodified lines | |||
| 149 | 151 | ||
| 150 | test_finish() | 152 | test_finish() |
| 151 | { | 153 | { |
| 154 | echo "$MODPROBE" > /proc/sys/kernel/modprobe | ||
| 152 | echo "Test completed" | 155 | echo "Test completed" |
| 153 | } | 156 | } |
| 154 | 157 | ||
| @@ -443,6 +446,30 @@ kmod_test_0009() · 288 unmodified lines | |||
| 443 | config_expect_result ${FUNCNAME[0]} SUCCESS | 446 | config_expect_result ${FUNCNAME[0]} SUCCESS |
| 444 | } | 447 | } |
| 445 | 448 | ||
| 449 | kmod_test_0010() | ||
| 450 | { | ||
| 451 | kmod_defaults_driver | ||
| 452 | config_num_threads 1 | ||
| 453 | echo "/KMOD_TEST_NONEXISTENT" > /proc/sys/kernel/modprobe | ||
| 454 | config_trigger ${FUNCNAME[0]} | ||
| 455 | config_expect_result ${FUNCNAME[0]} -ENOENT | ||
| 456 | echo "$MODPROBE" > /proc/sys/kernel/modprobe | ||
| 457 | } | ||
| 458 | |||
| 459 | kmod_test_0011() | ||
| 460 | { | ||
| 461 | kmod_defaults_driver | ||
| 462 | config_num_threads 1 | ||
| 463 | # This causes the kernel to not even try executing modprobe. The error | ||
| 464 | # code is still -ENOENT like when modprobe doesn't exist, so we can't | ||
| 465 | # easily test for the exact difference. But this still is a useful test | ||
| 466 | # since there was a bug where request_module() returned 0 in this case. | ||
| 467 | echo > /proc/sys/kernel/modprobe | ||
| 468 | config_trigger ${FUNCNAME[0]} | ||
| 469 | config_expect_result ${FUNCNAME[0]} -ENOENT | ||
| 470 | echo "$MODPROBE" > /proc/sys/kernel/modprobe | ||
| 471 | } | ||
| 472 | |||
| 446 | list_tests() | 473 | list_tests() |
| 447 | { | 474 | { |
| 448 | echo "Test ID list:" | 475 | echo "Test ID list:" |
| @@ -460,6 +487,8 @@ list_tests() · 11 unmodified lines | |||
| 460 | echo "0007 x $(get_test_count 0007) - multithreaded tests with default setup test request_module() and get_fs_type()" | 487 | echo "0007 x $(get_test_count 0007) - multithreaded tests with default setup test request_module() and get_fs_type()" |
| 461 | echo "0008 x $(get_test_count 0008) - multithreaded - push kmod_concurrent over max_modprobes for request_module()" | 488 | echo "0008 x $(get_test_count 0008) - multithreaded - push kmod_concurrent over max_modprobes for request_module()" |
| 462 | echo "0009 x $(get_test_count 0009) - multithreaded - push kmod_concurrent over max_modprobes for get_fs_type()" | 489 | echo "0009 x $(get_test_count 0009) - multithreaded - push kmod_concurrent over max_modprobes for get_fs_type()" |
| 490 | echo "0010 x $(get_test_count 0010) - test nonexistent modprobe path" | ||
| 491 | echo "0011 x $(get_test_count 0011) - test completely disabling module autoloading" | ||
| 463 | } | 492 | } |
| 464 | 493 | ||
| 465 | usage() | 494 | usage() |
| @@ -616,6 +645,7 @@ test_reqs · 150 unmodified lines | |||
| 616 | allow_user_defaults | 645 | allow_user_defaults |
| 617 | load_req_mod | 646 | load_req_mod |
| 618 | 647 | ||
| 648 | MODPROBE=$(</proc/sys/kernel/modprobe) | ||
| 619 | trap "test_finish" EXIT | 649 | trap "test_finish" EXIT |
| 620 | 650 | ||
| 621 | parse_args $@ | 651 | parse_args $@ |