summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJoel Granados <joel.granados@kernel.org>2026-08-13 08:39:31 +0200
committerJoel Granados <joel.granados@kernel.org>2026-09-10 14:52:15 +0200
commit1da0344016a7094ced23dce104a93af535e8ba83 (patch)
tree2f8b9084fca889819810ddbafd9de811949bf951
parent242bac52294e437218f5815b16d3de984bb55593 (diff)
downloadlinux-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-xtools/testing/selftests/sysctl/sysctl.sh60
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()