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.org
Signed-off-by: Luis 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: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Luis R. Rodriguez 2017-07-12 14:33:49 -07:00 committed by Linus Torvalds
parent 64b671204a
commit 1c0357c846
1 changed files with 66 additions and 0 deletions

View File

@ -75,6 +75,13 @@ function check_production_sysctl_writes_strict()
echo "1" > ${WRITES_STRICT}
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()
@ -89,6 +96,10 @@ test_reqs()
echo "$0: You need perl installed"
exit 1
fi
if ! which getconf 2> /dev/null > /dev/null; then
echo "$0: You need getconf installed"
exit 1
fi
}
function load_req_mod()
@ -103,6 +114,23 @@ function load_req_mod()
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()
{
if [ ! -z $TARGET ]; then
@ -229,7 +257,42 @@ run_numerictests()
else
echo "ok"
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
}
@ -305,15 +368,18 @@ run_stringtests()
sysctl_test_0001()
{
TARGET="${SYSCTL}/int_0001"
reset_vals
ORIG=$(cat "${TARGET}")
TEST_STR=$(( $ORIG + 1 ))
run_numerictests
run_limit_digit
}
sysctl_test_0002()
{
TARGET="${SYSCTL}/string_0001"
reset_vals
ORIG=$(cat "${TARGET}")
TEST_STR="Testing sysctl"
# Only string sysctls support seeking/appending.