diff options
Diffstat (limited to 'kernel/sysctl-test.c')
| -rw-r--r-- | kernel/sysctl-test.c | 50 | 
1 files changed, 50 insertions, 0 deletions
| diff --git a/kernel/sysctl-test.c b/kernel/sysctl-test.c index 6ef887c19c48..3ac98bb7fb82 100644 --- a/kernel/sysctl-test.c +++ b/kernel/sysctl-test.c @@ -367,6 +367,54 @@ static void sysctl_test_api_dointvec_write_single_greater_int_max(  	KUNIT_EXPECT_EQ(test, 0, *((int *)table.data));  } +/* + * Test that registering an invalid extra value is not allowed. + */ +static void sysctl_test_register_sysctl_sz_invalid_extra_value( +		struct kunit *test) +{ +	unsigned char data = 0; +	struct ctl_table table_foo[] = { +		{ +			.procname	= "foo", +			.data		= &data, +			.maxlen		= sizeof(u8), +			.mode		= 0644, +			.proc_handler	= proc_dou8vec_minmax, +			.extra1		= SYSCTL_FOUR, +			.extra2		= SYSCTL_ONE_THOUSAND, +		}, +	}; + +	struct ctl_table table_bar[] = { +		{ +			.procname	= "bar", +			.data		= &data, +			.maxlen		= sizeof(u8), +			.mode		= 0644, +			.proc_handler	= proc_dou8vec_minmax, +			.extra1		= SYSCTL_NEG_ONE, +			.extra2		= SYSCTL_ONE_HUNDRED, +		}, +	}; + +	struct ctl_table table_qux[] = { +		{ +			.procname	= "qux", +			.data		= &data, +			.maxlen		= sizeof(u8), +			.mode		= 0644, +			.proc_handler	= proc_dou8vec_minmax, +			.extra1		= SYSCTL_ZERO, +			.extra2		= SYSCTL_TWO_HUNDRED, +		}, +	}; + +	KUNIT_EXPECT_NULL(test, register_sysctl("foo", table_foo)); +	KUNIT_EXPECT_NULL(test, register_sysctl("foo", table_bar)); +	KUNIT_EXPECT_NOT_NULL(test, register_sysctl("foo", table_qux)); +} +  static struct kunit_case sysctl_test_cases[] = {  	KUNIT_CASE(sysctl_test_api_dointvec_null_tbl_data),  	KUNIT_CASE(sysctl_test_api_dointvec_table_maxlen_unset), @@ -378,6 +426,7 @@ static struct kunit_case sysctl_test_cases[] = {  	KUNIT_CASE(sysctl_test_dointvec_write_happy_single_negative),  	KUNIT_CASE(sysctl_test_api_dointvec_write_single_less_int_min),  	KUNIT_CASE(sysctl_test_api_dointvec_write_single_greater_int_max), +	KUNIT_CASE(sysctl_test_register_sysctl_sz_invalid_extra_value),  	{}  }; @@ -388,4 +437,5 @@ static struct kunit_suite sysctl_test_suite = {  kunit_test_suites(&sysctl_test_suite); +MODULE_DESCRIPTION("KUnit test of proc sysctl");  MODULE_LICENSE("GPL v2"); |