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

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: 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
Loading
Loading
Loading
Loading
+66 −0
Original line number Original line Diff line number Diff line
@@ -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()
		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()
	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()
	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()
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.