Re: [PATCH] vmcore: replace strncpy with strtomem

2024-03-27 Thread Baoquan He
On 03/27/24 at 09:10pm, Justin Stitt wrote:
> strncpy() is in the process of being replaced as it is deprecated in
> some situations [1]. While the specific use of strncpy that this patch
> targets is not exactly deprecated, the real mission is to rid the kernel
> of all its uses.
> 
> Looking at vmcoredd_header's definition:
> | struct vmcoredd_header {
> | __u32 n_namesz; /* Name size */
> | __u32 n_descsz; /* Content size */
> | __u32 n_type;   /* NT_VMCOREDD */
> | __u8 name[8];   /* LINUX\0\0\0 */
> | __u8 dump_name[VMCOREDD_MAX_NAME_BYTES]; /* Device dump's name 
> */
> | };
> ... we can see that both `name` and `dump_name` are u8s. It seems `name`
> wants to be NUL-padded (based on the comment above), but for the sake of
> symmetry lets NUL-pad both of these.
> 
> Mark these buffers as __nonstring and use strtomem_pad.

Thanks.

I didn't build, wondering if '__nonstring' has to be set so that
strtomem_pad() can be used.

Thanks
Baoquan

> 
> Link: 
> https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings
>  [1]
> Link: https://github.com/KSPP/linux/issues/90
> Cc: linux-harden...@vger.kernel.org
> Signed-off-by: Justin Stitt 
> ---
> Note: build-tested only.
> 
> Found with: $ rg "strncpy\("
> ---
>  fs/proc/vmcore.c| 5 ++---
>  include/uapi/linux/vmcore.h | 4 ++--
>  2 files changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
> index 1fb213f379a5..5d7ecf3b75e8 100644
> --- a/fs/proc/vmcore.c
> +++ b/fs/proc/vmcore.c
> @@ -1370,9 +1370,8 @@ static void vmcoredd_write_header(void *buf, struct 
> vmcoredd_data *data,
>   vdd_hdr->n_descsz = size + sizeof(vdd_hdr->dump_name);
>   vdd_hdr->n_type = NT_VMCOREDD;
>  
> - strncpy((char *)vdd_hdr->name, VMCOREDD_NOTE_NAME,
> - sizeof(vdd_hdr->name));
> - memcpy(vdd_hdr->dump_name, data->dump_name, sizeof(vdd_hdr->dump_name));
> + strtomem_pad(vdd_hdr->name, VMCOREDD_NOTE_NAME, 0);
> + strtomem_pad(vdd_hdr->dump_name, data->dump_name, 0);



>  }
>  
>  /**
> diff --git a/include/uapi/linux/vmcore.h b/include/uapi/linux/vmcore.h
> index 3e9da91866ff..7053e2b62fa0 100644
> --- a/include/uapi/linux/vmcore.h
> +++ b/include/uapi/linux/vmcore.h
> @@ -11,8 +11,8 @@ struct vmcoredd_header {
>   __u32 n_namesz; /* Name size */
>   __u32 n_descsz; /* Content size */
>   __u32 n_type;   /* NT_VMCOREDD */
> - __u8 name[8];   /* LINUX\0\0\0 */
> - __u8 dump_name[VMCOREDD_MAX_NAME_BYTES]; /* Device dump's name */
> + __u8 name[8] __nonstring;   /* LINUX\0\0\0 */
> + __u8 dump_name[VMCOREDD_MAX_NAME_BYTES] __nonstring; /* Device dump's 
> name */
>  };
>  
>  #endif /* _UAPI_VMCORE_H */
> 
> ---
> base-commit: 928a87efa42302a23bb9554be081a28058495f22
> change-id: 20240327-strncpy-fs-proc-vmcore-c-b18d761feaef
> 
> Best regards,
> --
> Justin Stitt 
> 




[PATCH] vmcore: replace strncpy with strtomem

2024-03-27 Thread Justin Stitt
strncpy() is in the process of being replaced as it is deprecated in
some situations [1]. While the specific use of strncpy that this patch
targets is not exactly deprecated, the real mission is to rid the kernel
of all its uses.

Looking at vmcoredd_header's definition:
|   struct vmcoredd_header {
|   __u32 n_namesz; /* Name size */
|   __u32 n_descsz; /* Content size */
|   __u32 n_type;   /* NT_VMCOREDD */
|   __u8 name[8];   /* LINUX\0\0\0 */
|   __u8 dump_name[VMCOREDD_MAX_NAME_BYTES]; /* Device dump's name 
*/
|   };
... we can see that both `name` and `dump_name` are u8s. It seems `name`
wants to be NUL-padded (based on the comment above), but for the sake of
symmetry lets NUL-pad both of these.

Mark these buffers as __nonstring and use strtomem_pad.

Link: 
https://www.kernel.org/doc/html/latest/process/deprecated.html#strncpy-on-nul-terminated-strings
 [1]
Link: https://github.com/KSPP/linux/issues/90
Cc: linux-harden...@vger.kernel.org
Signed-off-by: Justin Stitt 
---
Note: build-tested only.

Found with: $ rg "strncpy\("
---
 fs/proc/vmcore.c| 5 ++---
 include/uapi/linux/vmcore.h | 4 ++--
 2 files changed, 4 insertions(+), 5 deletions(-)

diff --git a/fs/proc/vmcore.c b/fs/proc/vmcore.c
index 1fb213f379a5..5d7ecf3b75e8 100644
--- a/fs/proc/vmcore.c
+++ b/fs/proc/vmcore.c
@@ -1370,9 +1370,8 @@ static void vmcoredd_write_header(void *buf, struct 
vmcoredd_data *data,
vdd_hdr->n_descsz = size + sizeof(vdd_hdr->dump_name);
vdd_hdr->n_type = NT_VMCOREDD;
 
-   strncpy((char *)vdd_hdr->name, VMCOREDD_NOTE_NAME,
-   sizeof(vdd_hdr->name));
-   memcpy(vdd_hdr->dump_name, data->dump_name, sizeof(vdd_hdr->dump_name));
+   strtomem_pad(vdd_hdr->name, VMCOREDD_NOTE_NAME, 0);
+   strtomem_pad(vdd_hdr->dump_name, data->dump_name, 0);
 }
 
 /**
diff --git a/include/uapi/linux/vmcore.h b/include/uapi/linux/vmcore.h
index 3e9da91866ff..7053e2b62fa0 100644
--- a/include/uapi/linux/vmcore.h
+++ b/include/uapi/linux/vmcore.h
@@ -11,8 +11,8 @@ struct vmcoredd_header {
__u32 n_namesz; /* Name size */
__u32 n_descsz; /* Content size */
__u32 n_type;   /* NT_VMCOREDD */
-   __u8 name[8];   /* LINUX\0\0\0 */
-   __u8 dump_name[VMCOREDD_MAX_NAME_BYTES]; /* Device dump's name */
+   __u8 name[8] __nonstring;   /* LINUX\0\0\0 */
+   __u8 dump_name[VMCOREDD_MAX_NAME_BYTES] __nonstring; /* Device dump's 
name */
 };
 
 #endif /* _UAPI_VMCORE_H */

---
base-commit: 928a87efa42302a23bb9554be081a28058495f22
change-id: 20240327-strncpy-fs-proc-vmcore-c-b18d761feaef

Best regards,
--
Justin Stitt 




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

2024-03-27 Thread Dave Chinner
On Fri, Mar 15, 2024 at 09:48:09PM +0100, Thomas Weißschuh wrote:
> Adapt the proc_hander function signature to make it clear that handlers
> are not supposed to modify their ctl_table argument.
> 
> This is a prerequisite to moving the static ctl_table structs into
> .rodata.
> By migrating all handlers at once a lengthy transition can be avoided.
> 
> The patch was mostly generated by coccinelle with the following script:
> 
> @@
> identifier func, ctl, write, buffer, lenp, ppos;
> @@
> 
> int func(
> - struct ctl_table *ctl,
> + const struct ctl_table *ctl,
>   int write, void *buffer, size_t *lenp, loff_t *ppos)
> { ... }

Which seems to have screwed up the formatting of the XFS code...

> diff --git a/fs/xfs/xfs_sysctl.c b/fs/xfs/xfs_sysctl.c
> index a191f6560f98..a3ca192eca79 100644
> --- a/fs/xfs/xfs_sysctl.c
> +++ b/fs/xfs/xfs_sysctl.c
> @@ -10,12 +10,11 @@ static struct ctl_table_header *xfs_table_header;
>  
>  #ifdef CONFIG_PROC_FS
>  STATIC int
> -xfs_stats_clear_proc_handler(
> - struct ctl_table*ctl,
> - int write,
> - void*buffer,
> - size_t  *lenp,
> - loff_t  *ppos)
> +xfs_stats_clear_proc_handler(const struct ctl_table *ctl,
> +  intwrite,
> +  void   *buffer,
> +  size_t *lenp,
> +  loff_t *ppos)

... because this doesn't match any format I've ever seen in the
kernel. The diff for this change shold be just:

@@ -10,7 +10,7 @@ static struct ctl_table_header *xfs_table_header;
 #ifdef CONFIG_PROC_FS
 STATIC int
 xfs_stats_clear_proc_handler(
-   struct ctl_table*ctl,
+   const struct ctl_table  *ctl,
int write,
void*buffer,
size_t  *lenp,

>  {
>   int ret, *valp = ctl->data;
>  
> @@ -30,12 +29,11 @@ xfs_stats_clear_proc_handler(
>  }
>  
>  STATIC int
> -xfs_panic_mask_proc_handler(
> - struct ctl_table*ctl,
> - int write,
> - void*buffer,
> - size_t  *lenp,
> - loff_t  *ppos)
> +xfs_panic_mask_proc_handler(const struct ctl_table *ctl,
> + int write,
> + void*buffer,
> + size_t  *lenp,
> + loff_t  *ppos)
>  {
>   int ret, *valp = ctl->data;
>  
> @@ -51,12 +49,11 @@ xfs_panic_mask_proc_handler(
>  #endif /* CONFIG_PROC_FS */
>  
>  STATIC int
> -xfs_deprecated_dointvec_minmax(
> - struct ctl_table*ctl,
> - int write,
> - void*buffer,
> - size_t  *lenp,
> - loff_t  *ppos)
> +xfs_deprecated_dointvec_minmax(const struct ctl_table *ctl,
> +int  write,
> +void *buffer,
> +size_t   *lenp,
> +loff_t   *ppos)
>  {
>   if (write) {
>   printk_ratelimited(KERN_WARNING

And these need fixing as well.

A further quick glance at the patch reveals that there are other
similar screwed up conversions as well.

> diff --git a/kernel/delayacct.c b/kernel/delayacct.c
> index 6f0c358e73d8..513791ef573d 100644
> --- a/kernel/delayacct.c
> +++ b/kernel/delayacct.c
> @@ -44,8 +44,9 @@ void delayacct_init(void)
>  }
>  
>  #ifdef CONFIG_PROC_SYSCTL
> -static int sysctl_delayacct(struct ctl_table *table, int write, void *buffer,
> -  size_t *lenp, loff_t *ppos)
> +static int sysctl_delayacct(const struct ctl_table *table, int write,
> + void *buffer,
> + size_t *lenp, loff_t *ppos)
>  {
>   int state = delayacct_on;
>   struct ctl_table t;

Like this.

> diff --git a/kernel/events/core.c b/kernel/events/core.c
> index 724e6d7e128f..e2955e0d9f44 100644
> --- a/kernel/events/core.c
> +++ b/kernel/events/core.c
> @@ -450,7 +450,8 @@ static void update_perf_cpu_limits(void)
>  
>  static bool perf_rotate_context(struct perf_cpu_pmu_context *cpc);
>  
> -int perf_event_max_sample_rate_handler(struct ctl_table *table, int write,
> +int perf_event_max_sample_rate_handler(const struct ctl_table *table,
> +int write,
>  void *buffer, size_t *lenp, loff_t *ppos)
>  {
>   int ret;

And this.

> @@ -474,8 +475,10 @@ int perf_event_max_sample_rate_handler(struct ctl_table 
> *table, int write,
>  
>  int sysctl_perf_cpu_time_max_percent __read_mostly = 
> 

[PATCH 04/11] utsname: constify ctl_table arguments of utility function

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers themselves will change to
"const struct ctl_table". As a preparation for that adapt the internal
helper.

Signed-off-by: Thomas Weißschuh 
---
 kernel/utsname_sysctl.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/utsname_sysctl.c b/kernel/utsname_sysctl.c
index 019e3a1566cf..46590d4addc8 100644
--- a/kernel/utsname_sysctl.c
+++ b/kernel/utsname_sysctl.c
@@ -15,7 +15,7 @@
 
 #ifdef CONFIG_PROC_SYSCTL
 
-static void *get_uts(struct ctl_table *table)
+static void *get_uts(const struct ctl_table *table)
 {
char *which = table->data;
struct uts_namespace *uts_ns;

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH 06/11] ipv4/sysctl: constify ctl_table arguments of utility functions

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers themselves will change to
"const struct ctl_table". As a preparation for that adapt the internal
helpers.

Signed-off-by: Thomas Weißschuh 
---
 net/ipv4/sysctl_net_ipv4.c | 6 --
 1 file changed, 4 insertions(+), 2 deletions(-)

diff --git a/net/ipv4/sysctl_net_ipv4.c b/net/ipv4/sysctl_net_ipv4.c
index 7e4f16a7dcc1..363dc2a487ac 100644
--- a/net/ipv4/sysctl_net_ipv4.c
+++ b/net/ipv4/sysctl_net_ipv4.c
@@ -130,7 +130,8 @@ static int ipv4_privileged_ports(struct ctl_table *table, 
int write,
return ret;
 }
 
-static void inet_get_ping_group_range_table(struct ctl_table *table, kgid_t 
*low, kgid_t *high)
+static void inet_get_ping_group_range_table(const struct ctl_table *table,
+   kgid_t *low, kgid_t *high)
 {
kgid_t *data = table->data;
struct net *net =
@@ -145,7 +146,8 @@ static void inet_get_ping_group_range_table(struct 
ctl_table *table, kgid_t *low
 }
 
 /* Update system visible IP port range */
-static void set_ping_group_range(struct ctl_table *table, kgid_t low, kgid_t 
high)
+static void set_ping_group_range(const struct ctl_table *table,
+kgid_t low, kgid_t high)
 {
kgid_t *data = table->data;
struct net *net =

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH 07/11] ipv6/addrconf: constify ctl_table arguments of utility functions

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers themselves will change to
"const struct ctl_table". As a preparation for that adapt the internal
helpers.

Signed-off-by: Thomas Weißschuh 
---
 net/ipv6/addrconf.c | 8 
 1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/net/ipv6/addrconf.c b/net/ipv6/addrconf.c
index 247bd4d8ee45..c72f3b63e41d 100644
--- a/net/ipv6/addrconf.c
+++ b/net/ipv6/addrconf.c
@@ -862,7 +862,7 @@ static void addrconf_forward_change(struct net *net, __s32 
newf)
}
 }
 
-static int addrconf_fixup_forwarding(struct ctl_table *table, int *p, int newf)
+static int addrconf_fixup_forwarding(const struct ctl_table *table, int *p, 
int newf)
 {
struct net *net;
int old;
@@ -930,7 +930,7 @@ static void addrconf_linkdown_change(struct net *net, __s32 
newf)
}
 }
 
-static int addrconf_fixup_linkdown(struct ctl_table *table, int *p, int newf)
+static int addrconf_fixup_linkdown(const struct ctl_table *table, int *p, int 
newf)
 {
struct net *net;
int old;
@@ -6375,7 +6375,7 @@ static void addrconf_disable_change(struct net *net, 
__s32 newf)
}
 }
 
-static int addrconf_disable_ipv6(struct ctl_table *table, int *p, int newf)
+static int addrconf_disable_ipv6(const struct ctl_table *table, int *p, int 
newf)
 {
struct net *net = (struct net *)table->extra2;
int old;
@@ -,7 +,7 @@ void addrconf_disable_policy_idev(struct inet6_dev *idev, 
int val)
 }
 
 static
-int addrconf_disable_policy(struct ctl_table *ctl, int *valp, int val)
+int addrconf_disable_policy(const struct ctl_table *ctl, int *valp, int val)
 {
struct net *net = (struct net *)ctl->extra2;
struct inet6_dev *idev;

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


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

2024-03-27 Thread Thomas Weißschuh
* Patch 1 is a bugfix for the stack_erasing sysctl handler
* Patches 2-10 change various helper functions throughout the kernel to
  be able to handle 'const ctl_table'.
* Patch 11 changes the signatures of all proc handlers through the tree.
  Some other signatures are also adapted, for details see the commit
  message.

Only patch 1 changes any code at all.

The series was compile-tested on top of next-20230315 for
i386, x86_64, arm, arm64, riscv, loongarch and s390.

This series was split from my larger series sysctl-const series [0].
It only focusses on the proc_handlers but is an important step to be
able to move all static definitions of ctl_table into .rodata.

[0] 
https://lore.kernel.org/lkml/20231204-const-sysctl-v2-0-7a5060b11...@weissschuh.net/

Signed-off-by: Thomas Weißschuh 
---
Thomas Weißschuh (11):
  stackleak: don't modify ctl_table argument
  cgroup: bpf: constify ctl_table arguments and fields
  hugetlb: constify ctl_table arguments of utility functions
  utsname: constify ctl_table arguments of utility function
  neighbour: constify ctl_table arguments of utility function
  ipv4/sysctl: constify ctl_table arguments of utility functions
  ipv6/addrconf: constify ctl_table arguments of utility functions
  ipv6/ndisc: constify ctl_table arguments of utility function
  ipvs: constify ctl_table arguments of utility functions
  sysctl: constify ctl_table arguments of utility function
  sysctl: treewide: constify the ctl_table argument of handlers

 arch/arm64/kernel/armv8_deprecated.c  |   2 +-
 arch/arm64/kernel/fpsimd.c|   2 +-
 arch/s390/appldata/appldata_base.c|  10 +--
 arch/s390/kernel/debug.c  |   2 +-
 arch/s390/kernel/topology.c   |   2 +-
 arch/s390/mm/cmm.c|   6 +-
 arch/x86/kernel/itmt.c|   2 +-
 drivers/cdrom/cdrom.c |   6 +-
 drivers/char/random.c |   5 +-
 drivers/macintosh/mac_hid.c   |   2 +-
 drivers/net/vrf.c |   2 +-
 drivers/parport/procfs.c  |  14 ++--
 drivers/perf/arm_pmuv3.c  |   6 +-
 drivers/perf/riscv_pmu_sbi.c  |   2 +-
 fs/coredump.c |   4 +-
 fs/dcache.c   |   3 +-
 fs/drop_caches.c  |   4 +-
 fs/exec.c |   6 +-
 fs/file_table.c   |   3 +-
 fs/fs-writeback.c |   2 +-
 fs/inode.c|   3 +-
 fs/pipe.c |   2 +-
 fs/quota/dquot.c  |   4 +-
 fs/xfs/xfs_sysctl.c   |  33 -
 include/linux/filter.h|   2 +-
 include/linux/ftrace.h|   4 +-
 include/linux/mm.h|   8 +--
 include/linux/perf_event.h|   6 +-
 include/linux/security.h  |   2 +-
 include/linux/sysctl.h|  36 +-
 include/linux/vmstat.h|   6 +-
 include/linux/writeback.h |   2 +-
 include/net/ndisc.h   |   2 +-
 include/net/neighbour.h   |   6 +-
 include/net/netfilter/nf_hooks_lwtunnel.h |   2 +-
 ipc/ipc_sysctl.c  |  14 ++--
 kernel/bpf/syscall.c  |   4 +-
 kernel/delayacct.c|   5 +-
 kernel/events/callchain.c |   2 +-
 kernel/events/core.c  |   9 ++-
 kernel/fork.c |   2 +-
 kernel/hung_task.c|   7 +-
 kernel/kexec_core.c   |   2 +-
 kernel/kprobes.c  |   2 +-
 kernel/latencytop.c   |   5 +-
 kernel/pid_namespace.c|   4 +-
 kernel/pid_sysctl.h   |   2 +-
 kernel/printk/internal.h  |   2 +-
 kernel/printk/printk.c|   2 +-
 kernel/printk/sysctl.c|   6 +-
 kernel/sched/core.c   |  15 ++--
 kernel/sched/rt.c |  20 +++---
 kernel/sched/topology.c   |   6 +-
 kernel/seccomp.c  |   7 +-
 kernel/stackleak.c|  12 ++--
 kernel/sysctl.c   | 109 --
 kernel/time/timer.c   |   4 +-
 kernel/trace/ftrace.c |   2 +-
 kernel/trace/trace.c  |   2 +-
 kernel/trace/trace_events_user.c  |   3 +-
 kernel/trace/trace_stack.c|   2 +-
 kernel/umh.c  |   4 +-
 kernel/utsname_sysctl.c   |   6 +-
 kernel/watchdog.c |  15 ++--
 mm/compaction.c   |  17 +++--
 mm/hugetlb.c   

[PATCH 03/11] hugetlb: constify ctl_table arguments of utility functions

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers themselves will change to
"const struct ctl_table". As a preparation for that adapt the internal
helpers.

Signed-off-by: Thomas Weißschuh 
---
 mm/hugetlb.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

diff --git a/mm/hugetlb.c b/mm/hugetlb.c
index 23ef240ba48a..b0d89ab98eaa 100644
--- a/mm/hugetlb.c
+++ b/mm/hugetlb.c
@@ -4929,7 +4929,7 @@ static unsigned int allowed_mems_nr(struct hstate *h)
 }
 
 #ifdef CONFIG_SYSCTL
-static int proc_hugetlb_doulongvec_minmax(struct ctl_table *table, int write,
+static int proc_hugetlb_doulongvec_minmax(const struct ctl_table *table, int 
write,
  void *buffer, size_t *length,
  loff_t *ppos, unsigned long *out)
 {
@@ -4946,7 +4946,7 @@ static int proc_hugetlb_doulongvec_minmax(struct 
ctl_table *table, int write,
 }
 
 static int hugetlb_sysctl_handler_common(bool obey_mempolicy,
-struct ctl_table *table, int write,
+const struct ctl_table *table, int write,
 void *buffer, size_t *length, loff_t *ppos)
 {
struct hstate *h = _hstate;

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH 08/11] ipv6/ndisc: constify ctl_table arguments of utility function

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers themselves will change to
"const struct ctl_table". As a preparation for that adapt the internal
helper.

Signed-off-by: Thomas Weißschuh 
---
 net/ipv6/ndisc.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c
index ae134634c323..945d5f5ca039 100644
--- a/net/ipv6/ndisc.c
+++ b/net/ipv6/ndisc.c
@@ -1936,7 +1936,7 @@ static struct notifier_block ndisc_netdev_notifier = {
 };
 
 #ifdef CONFIG_SYSCTL
-static void ndisc_warn_deprecated_sysctl(struct ctl_table *ctl,
+static void ndisc_warn_deprecated_sysctl(const struct ctl_table *ctl,
 const char *func, const char *dev_name)
 {
static char warncomm[TASK_COMM_LEN];

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH 01/11] stackleak: don't modify ctl_table argument

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers will change to
"const struct ctl_table".
As a preparation for that adapt the logic to work with a temporary
variable, similar to how it is done in other parts of the kernel.

Fixes: 964c9dff0091 ("stackleak: Allow runtime disabling of kernel stack 
erasing")
Acked-by: Kees Cook 
Signed-off-by: Thomas Weißschuh 
---
 kernel/stackleak.c | 7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/kernel/stackleak.c b/kernel/stackleak.c
index 34c9d81eea94..b292e5ca0b7d 100644
--- a/kernel/stackleak.c
+++ b/kernel/stackleak.c
@@ -27,10 +27,11 @@ static int stack_erasing_sysctl(struct ctl_table *table, 
int write,
int ret = 0;
int state = !static_branch_unlikely(_erasing_bypass);
int prev_state = state;
+   struct ctl_table tmp = *table;
 
-   table->data = 
-   table->maxlen = sizeof(int);
-   ret = proc_dointvec_minmax(table, write, buffer, lenp, ppos);
+   tmp.data = 
+   tmp.maxlen = sizeof(int);
+   ret = proc_dointvec_minmax(, write, buffer, lenp, ppos);
state = !!state;
if (ret || !write || state == prev_state)
return ret;

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH 02/11] cgroup: bpf: constify ctl_table arguments and fields

2024-03-27 Thread Thomas Weißschuh
In a future commit the sysctl core will only use
"const struct ctl_table". As a preparation for that adapt the cgroup-bpf
code.

Signed-off-by: Thomas Weißschuh 
---
 include/linux/filter.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/include/linux/filter.h b/include/linux/filter.h
index c99bc3df2d28..3238dcff5703 100644
--- a/include/linux/filter.h
+++ b/include/linux/filter.h
@@ -1366,7 +1366,7 @@ struct bpf_sock_ops_kern {
 
 struct bpf_sysctl_kern {
struct ctl_table_header *head;
-   struct ctl_table *table;
+   const struct ctl_table *table;
void *cur_val;
size_t cur_len;
void *new_val;

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH 05/11] neighbour: constify ctl_table arguments of utility function

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers themselves will change to
"const struct ctl_table". As a preparation for that adapt the internal
helper.

Signed-off-by: Thomas Weißschuh 
---
 net/core/neighbour.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/net/core/neighbour.c b/net/core/neighbour.c
index 552719c3bbc3..1fb71107accf 100644
--- a/net/core/neighbour.c
+++ b/net/core/neighbour.c
@@ -3573,7 +3573,7 @@ static void neigh_copy_dflt_parms(struct net *net, struct 
neigh_parms *p,
rcu_read_unlock();
 }
 
-static void neigh_proc_update(struct ctl_table *ctl, int write)
+static void neigh_proc_update(const struct ctl_table *ctl, int write)
 {
struct net_device *dev = ctl->extra1;
struct neigh_parms *p = ctl->extra2;

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH 09/11] ipvs: constify ctl_table arguments of utility functions

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers themselves will change to
"const struct ctl_table". As a preparation for that adapt the internal
helpers.

Signed-off-by: Thomas Weißschuh 
---
 net/netfilter/ipvs/ip_vs_ctl.c | 7 ---
 1 file changed, 4 insertions(+), 3 deletions(-)

diff --git a/net/netfilter/ipvs/ip_vs_ctl.c b/net/netfilter/ipvs/ip_vs_ctl.c
index 143a341bbc0a..689ac521ea2d 100644
--- a/net/netfilter/ipvs/ip_vs_ctl.c
+++ b/net/netfilter/ipvs/ip_vs_ctl.c
@@ -1924,7 +1924,8 @@ proc_do_sync_ports(struct ctl_table *table, int write,
return rc;
 }
 
-static int ipvs_proc_est_cpumask_set(struct ctl_table *table, void *buffer)
+static int ipvs_proc_est_cpumask_set(const struct ctl_table *table,
+void *buffer)
 {
struct netns_ipvs *ipvs = table->extra2;
cpumask_var_t *valp = table->data;
@@ -1962,8 +1963,8 @@ static int ipvs_proc_est_cpumask_set(struct ctl_table 
*table, void *buffer)
return ret;
 }
 
-static int ipvs_proc_est_cpumask_get(struct ctl_table *table, void *buffer,
-size_t size)
+static int ipvs_proc_est_cpumask_get(const struct ctl_table *table,
+void *buffer, size_t size)
 {
struct netns_ipvs *ipvs = table->extra2;
cpumask_var_t *valp = table->data;

-- 
2.44.0


___
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec


[PATCH 10/11] sysctl: constify ctl_table arguments of utility function

2024-03-27 Thread Thomas Weißschuh
In a future commit the proc_handlers themselves will change to
"const struct ctl_table". As a preparation for that adapt the internal
helper.

Signed-off-by: Thomas Weißschuh 
---
 include/linux/sysctl.h |  2 +-
 kernel/sysctl.c| 21 +++--
 2 files changed, 12 insertions(+), 11 deletions(-)

diff --git a/include/linux/sysctl.h b/include/linux/sysctl.h
index ee7d33b89e9e..99ea26b16c0d 100644
--- a/include/linux/sysctl.h
+++ b/include/linux/sysctl.h
@@ -238,7 +238,7 @@ extern struct ctl_table_header 
*register_sysctl_mount_point(const char *path);
 
 void do_sysctl_args(void);
 bool sysctl_is_alias(char *param);
-int do_proc_douintvec(struct ctl_table *table, int write,
+int do_proc_douintvec(const struct ctl_table *table, int write,
  void *buffer, size_t *lenp, loff_t *ppos,
  int (*conv)(unsigned long *lvalp,
  unsigned int *valp,
diff --git a/kernel/sysctl.c b/kernel/sysctl.c
index 157f7ce2942d..93824d8a3636 100644
--- a/kernel/sysctl.c
+++ b/kernel/sysctl.c
@@ -205,7 +205,7 @@ static int _proc_do_string(char *data, int maxlen, int 
write,
return 0;
 }
 
-static void warn_sysctl_write(struct ctl_table *table)
+static void warn_sysctl_write(const struct ctl_table *table)
 {
pr_warn_once("%s wrote to %s when file position was not 0!\n"
"This will not be supported in the future. To silence this\n"
@@ -223,7 +223,7 @@ static void warn_sysctl_write(struct ctl_table *table)
  * handlers can ignore the return value.
  */
 static bool proc_first_pos_non_zero_ignore(loff_t *ppos,
-  struct ctl_table *table)
+  const struct ctl_table *table)
 {
if (!*ppos)
return false;
@@ -468,7 +468,7 @@ static int do_proc_douintvec_conv(unsigned long *lvalp,
 
 static const char proc_wspace_sep[] = { ' ', '\t', '\n' };
 
-static int __do_proc_dointvec(void *tbl_data, struct ctl_table *table,
+static int __do_proc_dointvec(void *tbl_data, const struct ctl_table *table,
  int write, void *buffer,
  size_t *lenp, loff_t *ppos,
  int (*conv)(bool *negp, unsigned long *lvalp, int *valp,
@@ -541,7 +541,7 @@ static int __do_proc_dointvec(void *tbl_data, struct 
ctl_table *table,
return err;
 }
 
-static int do_proc_dointvec(struct ctl_table *table, int write,
+static int do_proc_dointvec(const struct ctl_table *table, int write,
  void *buffer, size_t *lenp, loff_t *ppos,
  int (*conv)(bool *negp, unsigned long *lvalp, int *valp,
  int write, void *data),
@@ -552,7 +552,7 @@ static int do_proc_dointvec(struct ctl_table *table, int 
write,
 }
 
 static int do_proc_douintvec_w(unsigned int *tbl_data,
-  struct ctl_table *table,
+  const struct ctl_table *table,
   void *buffer,
   size_t *lenp, loff_t *ppos,
   int (*conv)(unsigned long *lvalp,
@@ -639,7 +639,7 @@ static int do_proc_douintvec_r(unsigned int *tbl_data, void 
*buffer,
return err;
 }
 
-static int __do_proc_douintvec(void *tbl_data, struct ctl_table *table,
+static int __do_proc_douintvec(void *tbl_data, const struct ctl_table *table,
   int write, void *buffer,
   size_t *lenp, loff_t *ppos,
   int (*conv)(unsigned long *lvalp,
@@ -675,7 +675,7 @@ static int __do_proc_douintvec(void *tbl_data, struct 
ctl_table *table,
return do_proc_douintvec_r(i, buffer, lenp, ppos, conv, data);
 }
 
-int do_proc_douintvec(struct ctl_table *table, int write,
+int do_proc_douintvec(const struct ctl_table *table, int write,
  void *buffer, size_t *lenp, loff_t *ppos,
  int (*conv)(unsigned long *lvalp,
  unsigned int *valp,
@@ -1023,8 +1023,9 @@ static int sysrq_sysctl_handler(struct ctl_table *table, 
int write,
 }
 #endif
 
-static int __do_proc_doulongvec_minmax(void *data, struct ctl_table *table,
-   int write, void *buffer, size_t *lenp, loff_t *ppos,
+static int __do_proc_doulongvec_minmax(void *data,
+   const struct ctl_table *table, int write,
+   void *buffer, size_t *lenp, loff_t *ppos,
unsigned long convmul, unsigned long convdiv)
 {
unsigned long *i, *min, *max;
@@ -1096,7 +1097,7 @@ static int __do_proc_doulongvec_minmax(void *data, struct 
ctl_table *table,
return err;
 }
 
-static int do_proc_doulongvec_minmax(struct ctl_table *table, int write,
+static int do_proc_doulongvec_minmax(const struct ctl_table *table, int write,
void *buffer, size_t *lenp, loff_t *ppos, unsigned long convmul,
unsigned long convdiv)
 {

-- 
2.44.0