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 | 61 | ALL_TESTS="$ALL_TESTS 0007:5:1" |
| 62 | 62 | ALL_TESTS="$ALL_TESTS 0008:150:1" |
| 63 | 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 | 67 | # Kselftest framework requirement - SKIP code is 4. |
| 66 | 68 | ksft_skip=4 |
| @@ -149,6 +151,7 @@ function load_req_mod() · 82 unmodified lines | ||
| 149 | 151 | |
| 150 | 152 | test_finish() |
| 151 | 153 | { |
| 154 | + echo "$MODPROBE" > /proc/sys/kernel/modprobe | |
| 152 | 155 | echo "Test completed" |
| 153 | 156 | } |
| 154 | 157 | |
| @@ -443,6 +446,30 @@ kmod_test_0009() · 288 unmodified lines | ||
| 443 | 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 | 473 | list_tests() |
| 447 | 474 | { |
| 448 | 475 | echo "Test ID list:" |
| @@ -460,6 +487,8 @@ list_tests() · 11 unmodified lines | ||
| 460 | 487 | echo "0007 x $(get_test_count 0007) - multithreaded tests with default setup test request_module() and get_fs_type()" |
| 461 | 488 | echo "0008 x $(get_test_count 0008) - multithreaded - push kmod_concurrent over max_modprobes for request_module()" |
| 462 | 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 | 494 | usage() |
| @@ -616,6 +645,7 @@ test_reqs · 150 unmodified lines | ||
| 616 | 645 | allow_user_defaults |
| 617 | 646 | load_req_mod |
| 618 | 647 | |
| 648 | +MODPROBE=$(</proc/sys/kernel/modprobe) | |
| 619 | 649 | trap "test_finish" EXIT |
| 620 | 650 | |
| 621 | 651 | parse_args $@ |