diff options
| author | Joel Granados <joel.granados@kernel.org> | 2026-08-13 08:39:31 +0200 |
|---|---|---|
| committer | Joel Granados <joel.granados@kernel.org> | 2026-09-10 14:52:15 +0200 |
| commit | 1da0344016a7094ced23dce104a93af535e8ba83 (patch) | |
| tree | 2f8b9084fca889819810ddbafd9de811949bf951 | |
| parent | 242bac52294e437218f5815b16d3de984bb55593 (diff) | |
| download | linux-next-1da0344016a7094ced23dce104a93af535e8ba83.tar.gz linux-next-1da0344016a7094ced23dce104a93af535e8ba83.zip | |
sysctl: Add 0013 to test partially updated vectors
Add coverage for partially updated sysctl vectors with test 0013. It
makes sure that the sysctl vector is unchanged when one of the elements
is not valid.
Reviewed-by: Bradley Morgan <include@grrlz.net>
Signed-off-by: Joel Granados <joel.granados@kernel.org>
| -rwxr-xr-x | tools/testing/selftests/sysctl/sysctl.sh | 60 |
1 files changed, 60 insertions, 0 deletions
diff --git a/tools/testing/selftests/sysctl/sysctl.sh b/tools/testing/selftests/sysctl/sysctl.sh index b2d8bd9026a7..95e93709088a 100755 --- a/tools/testing/selftests/sysctl/sysctl.sh +++ b/tools/testing/selftests/sysctl/sysctl.sh @@ -4,6 +4,7 @@ # This performs a series tests against the proc sysctl interface. +# shellcheck disable=SC2317 # Kselftest framework requirement - SKIP code is 4. ksft_skip=4 @@ -12,6 +13,9 @@ TEST_DRIVER="test_${TEST_NAME}" TEST_DIR=$(dirname $0) TEST_FILE=$(mktemp) +# initialize for individual tests +rc=0 + # This represents # # TEST_ID:TEST_COUNT:ENABLED:TARGET:SKIP_NO_TARGET @@ -37,6 +41,7 @@ ALL_TESTS="$ALL_TESTS 0009:1:1:unregister_error:0" ALL_TESTS="$ALL_TESTS 0010:1:1:mnt/mnt_error:0" ALL_TESTS="$ALL_TESTS 0011:1:1:empty_add:0" ALL_TESTS="$ALL_TESTS 0012:1:1:u8_valid:0" +ALL_TESTS="$ALL_TESTS 0013:1:1:int_0003:1" function allow_user_defaults() { @@ -196,6 +201,18 @@ verify_diff_w() return $? } +# Verify that an erroneous ($2) update fails and does not change TARGET +verify_no_partial_update() +{ + TEST_STR="$1" + echo -n "$TEST_STR" > "$TARGET" + + if echo -n "$2" > "$TARGET" 2> /dev/null; then + return 1 + fi + verify_diff_w "${TARGET}" +} + test_rc() { if [[ $rc != 0 ]]; then @@ -501,6 +518,40 @@ run_limit_digit_int_array() test_rc } +# You used an int array and one of the elements is not acceptable +run_int_array_no_partial_update() +{ + echo -n "Testing invalid array element does not partially update ... " + # Expect failure because of 3rd element (abc). + if ! verify_no_partial_update "1 2 3 4" "10 20 abc 40"; then + echo "FAIL" >&2 + rc=1 + else + echo "OK" + fi + test_rc + + echo -n "Testing out of range array element does not partially update ... " + # Expect failure because of 3rd element (greater than int) + if ! verify_no_partial_update "1 2 3 4" "10 20 $((INT_MAX + 1)) 40"; then + echo "FAIL" >&2 + rc=1 + else + echo "OK" + fi + test_rc + + echo -n "Testing invalid first array element does not update ... " + # Expect failure of 1st element + if ! verify_no_partial_update "1 2 3 4" "abc 20 30 40"; then + echo "FAIL" >&2 + rc=1 + else + echo "OK" + fi + test_rc +} + # You are using an unsigned int run_limit_digit_uint() { @@ -880,6 +931,14 @@ sysctl_test_0012() return 0 } +sysctl_test_0013() +{ + TARGET="${SYSCTL}/$(get_test_target 0013)" + reset_vals + + run_int_array_no_partial_update +} + list_tests() { echo "Test ID list:" @@ -900,6 +959,7 @@ list_tests() echo "0010 x $(get_test_count 0010) - tests sysct mount point" echo "0011 x $(get_test_count 0011) - tests empty directories" echo "0012 x $(get_test_count 0012) - tests range check for u8 proc_handler" + echo "0013 x $(get_test_count 0013) - tests partially update vectors on error" } usage() |
