2023-05-30 23:55:29

by Luis Chamberlain

[permalink] [raw]
Subject: [PATCH 0/2] sysctl: move umh and keys sysctls

If you look at kernel/sysctl.c there are two sysctl arrays which
are declared in header files but registered with no good reason now
on kernel/sysctl.c instead of the place they belong. So just do
the registration where it belongs.

The penalty of this is just 66 bytes for moving both registrations
to its own file, but soon we'll be removing all sysctl empty entries
at each array, and we've already done tons of cleanup on fs/proc/proc_sysctl.c
which saved us hundreds of bytes so we have few karma points.

With this, we no now only have two sysctl arrays left to start clearing
up the kernel one and the vm one.

Luis Chamberlain (2):
sysctl: move umh sysctl registration to its own file
sysctl: move security keys sysctl registration to its own file

include/linux/key.h | 3 ---
include/linux/umh.h | 2 --
kernel/sysctl.c | 5 -----
kernel/umh.c | 11 ++++++++++-
security/keys/sysctl.c | 7 +++++++
5 files changed, 17 insertions(+), 11 deletions(-)

--
2.39.2



2023-05-31 00:21:28

by Luis Chamberlain

[permalink] [raw]
Subject: [PATCH 1/2] sysctl: move umh sysctl registration to its own file

Move the umh sysctl registration to its own file, the array is
already there. We do this to remove the clutter out of kernel/sysctl.c
to avoid merge conflicts.

This also lets the sysctls not be built at all now when CONFIG_SYSCTL
is not enabled.

This has a small penalty of 23 bytes but soon we'll be removing
all the empty entries on sysctl arrays so just do this cleanup
now:

./scripts/bloat-o-meter vmlinux.base vmlinux.1
add/remove: 2/0 grow/shrink: 0/1 up/down: 49/-26 (23)
Function old new delta
init_umh_sysctls - 33 +33
__pfx_init_umh_sysctls - 16 +16
sysctl_init_bases 111 85 -26
Total: Before=21256914, After=21256937, chg +0.00%

Signed-off-by: Luis Chamberlain <[email protected]>
---
include/linux/umh.h | 2 --
kernel/sysctl.c | 1 -
kernel/umh.c | 11 ++++++++++-
3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/include/linux/umh.h b/include/linux/umh.h
index 5d1f6129b847..daa6a7048c11 100644
--- a/include/linux/umh.h
+++ b/include/linux/umh.h
@@ -42,8 +42,6 @@ call_usermodehelper_setup(const char *path, char **argv, char **envp,
extern int
call_usermodehelper_exec(struct subprocess_info *info, int wait);

-extern struct ctl_table usermodehelper_table[];
-
enum umh_disable_depth {
UMH_ENABLED = 0,
UMH_FREEZING,
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 241b817c0240..caf4a91522a1 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -2322,7 +2322,6 @@ static struct ctl_table vm_table[] = {
int __init sysctl_init_bases(void)
{
register_sysctl_init("kernel", kern_table);
- register_sysctl_init("kernel/usermodehelper", usermodehelper_table);
#ifdef CONFIG_KEYS
register_sysctl_init("kernel/keys", key_sysctls);
#endif
diff --git a/kernel/umh.c b/kernel/umh.c
index 60aa9e764a38..41088c5c39fd 100644
--- a/kernel/umh.c
+++ b/kernel/umh.c
@@ -544,7 +544,8 @@ static int proc_cap_handler(struct ctl_table *table, int write,
return 0;
}

-struct ctl_table usermodehelper_table[] = {
+#if defined(CONFIG_SYSCTL)
+static struct ctl_table usermodehelper_table[] = {
{
.procname = "bset",
.data = &usermodehelper_bset,
@@ -561,3 +562,11 @@ struct ctl_table usermodehelper_table[] = {
},
{ }
};
+
+static int __init init_umh_sysctls(void)
+{
+ register_sysctl_init("kernel/usermodehelper", usermodehelper_table);
+ return 0;
+}
+early_initcall(init_umh_sysctls);
+#endif /* CONFIG_SYSCTL */
--
2.39.2


2023-06-06 21:00:55

by Jarkko Sakkinen

[permalink] [raw]
Subject: Re: [PATCH 1/2] sysctl: move umh sysctl registration to its own file

On Wed May 31, 2023 at 2:29 AM EEST, Luis Chamberlain wrote:
> Move the umh sysctl registration to its own file, the array is
> already there. We do this to remove the clutter out of kernel/sysctl.c
> to avoid merge conflicts.
>
> This also lets the sysctls not be built at all now when CONFIG_SYSCTL
> is not enabled.
>
> This has a small penalty of 23 bytes but soon we'll be removing
> all the empty entries on sysctl arrays so just do this cleanup
> now:
>
> ./scripts/bloat-o-meter vmlinux.base vmlinux.1
> add/remove: 2/0 grow/shrink: 0/1 up/down: 49/-26 (23)
> Function old new delta
> init_umh_sysctls - 33 +33
> __pfx_init_umh_sysctls - 16 +16
> sysctl_init_bases 111 85 -26
> Total: Before=21256914, After=21256937, chg +0.00%
>
> Signed-off-by: Luis Chamberlain <[email protected]>
> ---
> include/linux/umh.h | 2 --
> kernel/sysctl.c | 1 -
> kernel/umh.c | 11 ++++++++++-
> 3 files changed, 10 insertions(+), 4 deletions(-)

Acked-by: Jarkko Sakkinen <[email protected]>

BR, Jarkko