Thread (15 messages) 15 messages, 11 authors, 2025-01-29

Re: Re: Re: [PATCH v2] treewide: const qualify ctl_tables where applicable

From: Jani Nikula <hidden>
Date: 2025-01-27 14:56:13
Also in: bpf, dri-devel, intel-gfx, intel-xe, io-uring, kexec, keyrings, linux-arm-kernel, linux-crypto, linux-fsdevel, linux-hardening, linux-hyperv, linux-mm, linux-nfs, linux-raid, linux-rdma, linux-riscv, linux-s390, linux-scsi, linux-security-module, linux-serial, linux-trace-kernel, linux-xfs, lkml, netfs, ocfs2-devel, xen-devel

On Mon, 27 Jan 2025, Joel Granados [off-list ref] wrote:
On Wed, Jan 22, 2025 at 01:41:35PM +0100, Ard Biesheuvel wrote:
quoted
On Wed, 22 Jan 2025 at 13:25, Joel Granados [off-list ref] wrote:
quoted
On Tue, Jan 21, 2025 at 02:40:16PM +0100, Alexander Gordeev wrote:
quoted
On Fri, Jan 10, 2025 at 03:16:08PM +0100, Joel Granados wrote:

Hi Joel,
quoted
Add the const qualifier to all the ctl_tables in the tree except for
watchdog_hardlockup_sysctl, memory_allocation_profiling_sysctls,
loadpin_sysctl_table and the ones calling register_net_sysctl (./net,
drivers/inifiniband dirs). These are special cases as they use a
registration function with a non-const qualified ctl_table argument or
modify the arrays before passing them on to the registration function.

Constifying ctl_table structs will prevent the modification of
proc_handler function pointers as the arrays would reside in .rodata.
This is made possible after commit 78eb4ea25cd5 ("sysctl: treewide:
constify the ctl_table argument of proc_handlers") constified all the
proc_handlers.
I could identify at least these occurences in s390 code as well:
Hey Alexander

Thx for bringing these to my attention. I had completely missed them as
the spatch only deals with ctl_tables outside functions.

Short answer:
These should not be included in the current patch because they are a
different pattern from how sysctl tables are usually used. So I will not
include them.

With that said, I think it might be interesting to look closer at them
as they seem to be complicating the proc_handler (I have to look at them
closer).

I see that they are defining a ctl_table struct within the functions and
just using the data (from the incoming ctl_table) to forward things down
to proc_do{u,}intvec_* functions. This is very odd and I have only seen
it done in order to change the incoming ctl_table (which is not what is
being done here).

I will take a closer look after the merge window and circle back with
more info. Might take me a while as I'm not very familiar with s390
code; any additional information on why those are being used inside the
functions would be helpfull.
Using const data on the stack is not as useful, because the stack is
always mapped writable.

Global data structures marked 'const' will be moved into an ELF
section that is typically mapped read-only in its entirely, and so the
data cannot be modified by writing to it directly. No such protection
is possible for the stack, and so the constness there is only enforced
at compile time.
I completely agree with you. No reason to use const within those
functions. But why define those ctl_tables in function to begin with.
Can't you just use the ones that are defined outside the functions?
You could have static const within functions too. You get the rodata
protection and function local scope, best of both worlds?

BR,
Jani.


-- 
Jani Nikula, Intel
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help