static int sysctl_check_table_array(const char *path, struct ctl_table *table)
 {
+       unsigned int extra;
        int err = 0;
 
        if ((table->proc_handler == proc_douintvec) ||
        if (table->proc_handler == proc_dou8vec_minmax) {
                if (table->maxlen != sizeof(u8))
                        err |= sysctl_err(path, table, "array not allowed");
+
+               if (table->extra1) {
+                       extra = *(unsigned int *) table->extra1;
+                       if (extra > 255U)
+                               err |= sysctl_err(path, table,
+                                               "range value too large for proc_dou8vec_minmax");
+               }
+               if (table->extra2) {
+                       extra = *(unsigned int *) table->extra2;
+                       if (extra > 255U)
+                               err |= sysctl_err(path, table,
+                                               "range value too large for proc_dou8vec_minmax");
+               }
        }
 
        if (table->proc_handler == proc_dobool) {
 
        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),
        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),
        {}
 };