diff options
author | Joel Granados <joel.granados@gmail.com> | 2023-08-09 12:49:57 +0200 |
---|---|---|
committer | Luis Chamberlain <mcgrof@kernel.org> | 2023-08-15 15:26:17 -0700 |
commit | bff97cf11b261972cae90299432238cc9a9a6a51 (patch) | |
tree | 8ddd834cc0cd9d81af48189754485d9bc547920c /kernel | |
parent | b1f01e2baefc5dbe240bbf529a813b452c064204 (diff) | |
download | linux-stable-bff97cf11b261972cae90299432238cc9a9a6a51.tar.gz linux-stable-bff97cf11b261972cae90299432238cc9a9a6a51.tar.bz2 linux-stable-bff97cf11b261972cae90299432238cc9a9a6a51.zip |
sysctl: Add a size arg to __register_sysctl_table
We make these changes in order to prepare __register_sysctl_table and
its callers for when we remove the sentinel element (empty element at
the end of ctl_table arrays). We don't actually remove any sentinels in
this commit, but we *do* make sure to use ARRAY_SIZE so the table_size
is available when the removal occurs.
We add a table_size argument to __register_sysctl_table and adjust
callers, all of which pass ctl_table pointers and need an explicit call
to ARRAY_SIZE. We implement a size calculation in register_net_sysctl in
order to forward the size of the array pointer received from the network
register calls.
The new table_size argument does not yet have any effect in the
init_header call which is still dependent on the sentinel's presence.
table_size *does* however drive the `kzalloc` allocation in
__register_sysctl_table with no adverse effects as the allocated memory
is either one element greater than the calculated ctl_table array (for
the calls in ipc_sysctl.c, mq_sysctl.c and ucount.c) or the exact size
of the calculated ctl_table array (for the call from sysctl_net.c and
register_sysctl). This approach will allows us to "just" remove the
sentinel without further changes to __register_sysctl_table as
table_size will represent the exact size for all the callers at that
point.
Signed-off-by: Joel Granados <j.granados@samsung.com>
Signed-off-by: Luis Chamberlain <mcgrof@kernel.org>
Diffstat (limited to 'kernel')
-rw-r--r-- | kernel/ucount.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/kernel/ucount.c b/kernel/ucount.c index ee8e57fd6f90..2b80264bb79f 100644 --- a/kernel/ucount.c +++ b/kernel/ucount.c @@ -104,7 +104,8 @@ bool setup_userns_sysctls(struct user_namespace *ns) for (i = 0; i < UCOUNT_COUNTS; i++) { tbl[i].data = &ns->ucount_max[i]; } - ns->sysctls = __register_sysctl_table(&ns->set, "user", tbl); + ns->sysctls = __register_sysctl_table(&ns->set, "user", tbl, + ARRAY_SIZE(user_table)); } if (!ns->sysctls) { kfree(tbl); |