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:
Родитель
64b671204a
Коммит
1c0357c846
|
@ -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.
|
||||
|
|
Загрузка…
Ссылка в новой задаче