Re: [PATCH v3 00/11] sysctl: treewide: constify ctl_table argument of sysctl handlers

Thomas Weißschuh
2024-05-03T14:09:43Z

Hey Joel,

On 2024-05-03 11:03:32+0000, Joel Granados wrote:
> Here is my feedback for your outstanding constification patches [1] and [2].

Thanks!

> # You need to split the patch
> The answer that you got from Jakub in the network subsystem is very clear and
> baring a change of heart from the network folks, this will go in as but as a
> split patchset. Please split it considering the following:
> 1. Create a different patchset for drivers/, fs/, kernel/, net, and a
> miscellaneous that includes whatever does not fit into the others.
> 2. Consider that this might take several releases.
> 3. Consider the following sufix for the interim function name "_const". Like in
> kfree_const. Please not "_new".

Ack. "_new" was an intentionally unacceptable placeholder.

> 4. Please publish the final result somewhere. This is important so someone can
> take over in case you need to stop.

Will do. Both for each single series and a combination of all of them.

> 5. Consistently mention the motivation in your cover letters. I specify more
> further down in "#Motivation".
> 6. Also mention that this is part of a bigger effort (like you did in your
> original cover letters). I would include [3,4,5,6]
> 7. Include a way to show what made it into .rodata. I specify more further down
> in "#Show the move".
>
> # Motivation
> As I read it, the motivation for these constification efforts are:
> 1. It provides increased safety: Having things in .rodata section reduces the
> attack surface. This is especially relevant for structures that have function
> pointers (like ctl_table); having these in .rodata means that these pointers
> always point to the "intended" function and cannot be changed.
> 2. Compiler optimizations: This was just a comment in the patchsets that I have
> mentioned ([3,4,5]). Do you know what optimizations specifically? Does it
> have to do with enhancing locality for the data in .rodata? Do you have other
> specific optimizations in mind?

I don't know about anything that would make it faster.
It's more about safety and transmission of intent to API users,
especially callback implementers.

> 3. Readability: because it is easier to know up-front that data is not supposed
> to change or its obvious that a function is re-entrant. Actually a lot of the
> readability reasons is about knowing things "up-front".
> As we move forward with the constification in sysctl, please include a more
> detailed motivation in all your cover letters. This helps maintainers (that
> don't have the context) understand what you are trying to do. It does not need
> to be my three points, but it should be more than just "put things into
> .rodata". Please tell me if I have missed anything in the motivation.

Will do.

> # Show the move
> I created [8] because there is no easy way to validate which objects made it
> into .rodata. I ran [8] for your Dec 2nd patcheset [7] and there are less in
> .rodata than I expected (the results are in [9]) Why is that? Is it something
> that has not been posted to the lists yet?

Constifying the APIs only *allows* the actual table to be constified
themselves.
Then each table definition will have to be touched and "const" added.

See patches 17 and 18 in [7] for two examples.

Some tables in net/ are already "const" as the static definitions are
never registered themselves but only their copies are.

This seems to explain your findings.

> Best

Thanks!

> [1] https://lore.kernel.org/all/20240423-sysctl-const-handler-v3-0-e0beccb836e2@weissschuh.net/
> [2] https://lore.kernel.org/all/20240418-sysctl-const-table-arg-v2-1-4012abc31311@weissschuh.net
> [3] [PATCH v2 00/14] ASoC: Constify local snd_sof_dsp_ops
> https://lore.kernel.org/all/20240426-n-const-ops-var-v2-0-e553fe67ae82@kernel.org
> [4] [PATCH v2 00/19] backlight: Constify lcd_ops
> https://lore.kernel.org/all/20240424-video-backlight-lcd-ops-v2-0-1aaa82b07bc6@kernel.org
> [5] [PATCH 1/4] iommu: constify pointer to bus_type
> https://lore.kernel.org/all/20240216144027.185959-1-krzysztof.kozlowski@linaro.org
> [6] [PATCH 00/29] const xattr tables
> https://lore.kernel.org/all/20230930050033.41174-1-wedsonaf@gmail.com
> [7] https://lore.kernel.org/all/20231204-const-sysctl-v2-0-7a5060b11447@weissschuh.net/
>
> [8]

[snip]

> [9]
> section: .rodata obj_name : kern_table
> section: .rodata obj_name : sysctl_mount_point
> section: .rodata obj_name : addrconf_sysctl
> section: .rodata obj_name : ax25_param_table
> section: .rodata obj_name : mpls_table
> section: .rodata obj_name : mpls_dev_table
> section: .data obj_name : sld_sysctls
> section: .data obj_name : kern_panic_table
> section: .data obj_name : kern_exit_table
> section: .data obj_name : vm_table
> section: .data obj_name : signal_debug_table
> section: .data obj_name : usermodehelper_table
> section: .data obj_name : kern_reboot_table
> section: .data obj_name : user_table
> section: .bss obj_name : sched_core_sysctls
> section: .data obj_name : sched_fair_sysctls
> section: .data obj_name : sched_rt_sysctls
> section: .data obj_name : sched_dl_sysctls
> section: .data obj_name : printk_sysctls
> section: .data obj_name : pid_ns_ctl_table_vm
> section: .data obj_name : seccomp_sysctl_table
> section: .data obj_name : uts_kern_table
> section: .data obj_name : vm_oom_kill_table
> section: .data obj_name : vm_page_writeback_sysctls
> section: .data obj_name : page_alloc_sysctl_table
> section: .data obj_name : hugetlb_table
> section: .data obj_name : fs_stat_sysctls
> section: .data obj_name : fs_exec_sysctls
> section: .data obj_name : fs_pipe_sysctls
> section: .data obj_name : namei_sysctls
> section: .data obj_name : fs_dcache_sysctls
> section: .data obj_name : inodes_sysctls
> section: .data obj_name : fs_namespace_sysctls
> section: .data obj_name : dnotify_sysctls
> section: .data obj_name : inotify_table
> section: .data obj_name : epoll_table
> section: .data obj_name : aio_sysctls
> section: .data obj_name : locks_sysctls
> section: .data obj_name : coredump_sysctls
> section: .data obj_name : fs_shared_sysctls
> section: .data obj_name : fs_dqstats_table
> section: .data obj_name : root_table
> section: .data obj_name : pty_table
> section: .data obj_name : xfs_table
> section: .data obj_name : ipc_sysctls
> section: .data obj_name : key_sysctls
> section: .data obj_name : kernel_io_uring_disabled_table
> section: .data obj_name : tty_table
> section: .data obj_name : random_table
> section: .data obj_name : scsi_table
> section: .data obj_name : iwcm_ctl_table
> section: .data obj_name : net_core_table
> section: .data obj_name : netns_core_table
> section: .bss obj_name : nf_log_sysctl_table
> section: .data obj_name : nf_log_sysctl_ftable
> section: .data obj_name : vs_vars
> section: .data obj_name : vs_vars_table
> section: .data obj_name : ipv4_route_netns_table
> section: .data obj_name : ipv4_route_table
> section: .data obj_name : ip4_frags_ns_ctl_table
> section: .data obj_name : ip4_frags_ctl_table
> section: .data obj_name : ctl_forward_entry
> section: .data obj_name : ipv4_table
> section: .data obj_name : ipv4_net_table
> section: .data obj_name : unix_table
> section: .data obj_name : ipv6_route_table_template
> section: .data obj_name : ipv6_icmp_table_template
> section: .data obj_name : ip6_frags_ns_ctl_table
> section: .data obj_name : ip6_frags_ctl_table
> section: .data obj_name : ipv6_table_template
> section: .data obj_name : ipv6_rotable
> section: .data obj_name : sctp_net_table
> section: .data obj_name : sctp_table
> section: .data obj_name : smc_table
> section: .data obj_name : lowpan_frags_ns_ctl_table
> section: .data obj_name : lowpan_frags_ctl_table