Commit 1c0357c8 authored by Luis R. Rodriguez's avatar Luis R. Rodriguez Committed by Linus Torvalds

test_sysctl: test against PAGE_SIZE for int

Add the following tests to ensure we do not regress:

  o Test using a buffer full of space (PAGE_SIZE-1) followed by a
    single digit works

  o Test using a buffer full of spaces (PAGE_SIZE or over) will fail

As tests increase instead of unloading the module and reloading it we
can just do a shell reset_vals() with a reset to values we know are set
at init on the driver.

Link: http://lkml.kernel.org/r/20170630224431.17374-4-mcgrof@kernel.orgSigned-off-by: default avatarLuis R. Rodriguez <mcgrof@kernel.org>
Cc: Kees Cook <keescook@chromium.org>
Cc: "Eric W. Biederman" <ebiederm@xmission.com>
Cc: Shuah Khan <shuah@kernel.org>
Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 64b67120
...@@ -75,6 +75,13 @@ function check_production_sysctl_writes_strict() ...@@ -75,6 +75,13 @@ function check_production_sysctl_writes_strict()
echo "1" > ${WRITES_STRICT} echo "1" > ${WRITES_STRICT}
fi fi
fi fi
if [ -z $PAGE_SIZE ]; then
PAGE_SIZE=$(getconf PAGESIZE)
fi
if [ -z $MAX_DIGITS ]; then
MAX_DIGITS=$(($PAGE_SIZE/8))
fi
} }
test_reqs() test_reqs()
...@@ -89,6 +96,10 @@ test_reqs() ...@@ -89,6 +96,10 @@ test_reqs()
echo "$0: You need perl installed" echo "$0: You need perl installed"
exit 1 exit 1
fi fi
if ! which getconf 2> /dev/null > /dev/null; then
echo "$0: You need getconf installed"
exit 1
fi
} }
function load_req_mod() function load_req_mod()
...@@ -103,6 +114,23 @@ function load_req_mod() ...@@ -103,6 +114,23 @@ function load_req_mod()
fi fi
} }
reset_vals()
{
VAL=""
TRIGGER=$(basename ${TARGET})
case "$TRIGGER" in
int_0001)
VAL="60"
;;
string_0001)
VAL="(none)"
;;
*)
;;
esac
echo -n $VAL > $TARGET
}
set_orig() set_orig()
{ {
if [ ! -z $TARGET ]; then if [ ! -z $TARGET ]; then
...@@ -229,7 +257,42 @@ run_numerictests() ...@@ -229,7 +257,42 @@ run_numerictests()
else else
echo "ok" echo "ok"
fi fi
test_rc
}
# Your test must accept digits 3 and 4 to use this
run_limit_digit()
{
echo -n "Checking ignoring spaces up to PAGE_SIZE works on write ..."
reset_vals
LIMIT=$((MAX_DIGITS -1))
TEST_STR="3"
(perl -e 'print " " x '$LIMIT';'; echo "${TEST_STR}") | \
dd of="${TARGET}" 2>/dev/null
if ! verify "${TARGET}"; then
echo "FAIL" >&2
rc=1
else
echo "ok"
fi
test_rc
echo -n "Checking passing PAGE_SIZE of spaces fails on write ..."
reset_vals
LIMIT=$((MAX_DIGITS))
TEST_STR="4"
(perl -e 'print " " x '$LIMIT';'; echo "${TEST_STR}") | \
dd of="${TARGET}" 2>/dev/null
if verify "${TARGET}"; then
echo "FAIL" >&2
rc=1
else
echo "ok"
fi
test_rc test_rc
} }
...@@ -305,15 +368,18 @@ run_stringtests() ...@@ -305,15 +368,18 @@ run_stringtests()
sysctl_test_0001() sysctl_test_0001()
{ {
TARGET="${SYSCTL}/int_0001" TARGET="${SYSCTL}/int_0001"
reset_vals
ORIG=$(cat "${TARGET}") ORIG=$(cat "${TARGET}")
TEST_STR=$(( $ORIG + 1 )) TEST_STR=$(( $ORIG + 1 ))
run_numerictests run_numerictests
run_limit_digit
} }
sysctl_test_0002() sysctl_test_0002()
{ {
TARGET="${SYSCTL}/string_0001" TARGET="${SYSCTL}/string_0001"
reset_vals
ORIG=$(cat "${TARGET}") ORIG=$(cat "${TARGET}")
TEST_STR="Testing sysctl" TEST_STR="Testing sysctl"
# Only string sysctls support seeking/appending. # Only string sysctls support seeking/appending.
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment