On Mon, Dec 23, 2024 at 10:15:25PM +0800, Kaixiong Yu wrote: > This moves all mmap related sysctls to mm/mmap.c, as part of the > kernel/sysctl.c cleaning, also move the variable declaration from > kernel/sysctl.c into mm/mmap.c. > > Signed-off-by: Kaixiong Yu <yukaixiong@xxxxxxxxxx> > Reviewed-by: Kees Cook <kees@xxxxxxxxxx> Looks good to me, thanks! Reviewed-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx> > --- > v4: > - const qualify struct ctl_table mmap_table > v3: > - change the title > v2: > - fix sysctl_max_map_count undeclared issue in mm/nommu.c > --- > --- > kernel/sysctl.c | 50 +-------------------------------------------- > mm/mmap.c | 54 +++++++++++++++++++++++++++++++++++++++++++++++++ > 2 files changed, 55 insertions(+), 49 deletions(-) > > diff --git a/kernel/sysctl.c b/kernel/sysctl.c > index aea3482106e0..9c245898f535 100644 > --- a/kernel/sysctl.c > +++ b/kernel/sysctl.c > @@ -127,12 +127,6 @@ enum sysctl_writes_mode { > > static enum sysctl_writes_mode sysctl_writes_strict = SYSCTL_WRITES_STRICT; > #endif /* CONFIG_PROC_SYSCTL */ > - > -#if defined(HAVE_ARCH_PICK_MMAP_LAYOUT) || \ > - defined(CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT) > -int sysctl_legacy_va_layout; > -#endif > - > #endif /* CONFIG_SYSCTL */ > > /* > @@ -2037,16 +2031,7 @@ static struct ctl_table vm_table[] = { > .extra1 = SYSCTL_ONE, > .extra2 = SYSCTL_FOUR, > }, > -#ifdef CONFIG_MMU > - { > - .procname = "max_map_count", > - .data = &sysctl_max_map_count, > - .maxlen = sizeof(sysctl_max_map_count), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - }, > -#else > +#ifndef CONFIG_MMU > { > .procname = "nr_trim_pages", > .data = &sysctl_nr_trim_pages, > @@ -2064,17 +2049,6 @@ static struct ctl_table vm_table[] = { > .proc_handler = proc_dointvec_minmax, > .extra1 = SYSCTL_ZERO, > }, Nitty, but this bit belongs in mm/nommu.c? > -#if defined(HAVE_ARCH_PICK_MMAP_LAYOUT) || \ > - defined(CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT) > - { > - .procname = "legacy_va_layout", > - .data = &sysctl_legacy_va_layout, > - .maxlen = sizeof(sysctl_legacy_va_layout), > - .mode = 0644, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = SYSCTL_ZERO, > - }, > -#endif > #ifdef CONFIG_MMU > { > .procname = "mmap_min_addr", > @@ -2100,28 +2074,6 @@ static struct ctl_table vm_table[] = { > .extra1 = SYSCTL_ZERO, > }, > #endif > -#ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS > - { > - .procname = "mmap_rnd_bits", > - .data = &mmap_rnd_bits, > - .maxlen = sizeof(mmap_rnd_bits), > - .mode = 0600, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = (void *)&mmap_rnd_bits_min, > - .extra2 = (void *)&mmap_rnd_bits_max, > - }, > -#endif > -#ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS > - { > - .procname = "mmap_rnd_compat_bits", > - .data = &mmap_rnd_compat_bits, > - .maxlen = sizeof(mmap_rnd_compat_bits), > - .mode = 0600, > - .proc_handler = proc_dointvec_minmax, > - .extra1 = (void *)&mmap_rnd_compat_bits_min, > - .extra2 = (void *)&mmap_rnd_compat_bits_max, > - }, > -#endif > }; > > int __init sysctl_init_bases(void) > diff --git a/mm/mmap.c b/mm/mmap.c > index aef835984b1c..cc579aafd7ba 100644 > --- a/mm/mmap.c > +++ b/mm/mmap.c > @@ -1603,6 +1603,57 @@ struct vm_area_struct *_install_special_mapping( > &special_mapping_vmops); > } > > +#ifdef CONFIG_SYSCTL > +#if defined(HAVE_ARCH_PICK_MMAP_LAYOUT) || \ > + defined(CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT) > +int sysctl_legacy_va_layout; > +#endif > + > +static const struct ctl_table mmap_table[] = { > + { > + .procname = "max_map_count", > + .data = &sysctl_max_map_count, > + .maxlen = sizeof(sysctl_max_map_count), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + }, > +#if defined(HAVE_ARCH_PICK_MMAP_LAYOUT) || \ > + defined(CONFIG_ARCH_WANT_DEFAULT_TOPDOWN_MMAP_LAYOUT) > + { > + .procname = "legacy_va_layout", > + .data = &sysctl_legacy_va_layout, > + .maxlen = sizeof(sysctl_legacy_va_layout), > + .mode = 0644, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = SYSCTL_ZERO, > + }, > +#endif > +#ifdef CONFIG_HAVE_ARCH_MMAP_RND_BITS > + { > + .procname = "mmap_rnd_bits", > + .data = &mmap_rnd_bits, > + .maxlen = sizeof(mmap_rnd_bits), > + .mode = 0600, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = (void *)&mmap_rnd_bits_min, > + .extra2 = (void *)&mmap_rnd_bits_max, > + }, > +#endif > +#ifdef CONFIG_HAVE_ARCH_MMAP_RND_COMPAT_BITS > + { > + .procname = "mmap_rnd_compat_bits", > + .data = &mmap_rnd_compat_bits, > + .maxlen = sizeof(mmap_rnd_compat_bits), > + .mode = 0600, > + .proc_handler = proc_dointvec_minmax, > + .extra1 = (void *)&mmap_rnd_compat_bits_min, > + .extra2 = (void *)&mmap_rnd_compat_bits_max, > + }, > +#endif > +}; > +#endif /* CONFIG_SYSCTL */ > + > /* > * initialise the percpu counter for VM > */ > @@ -1612,6 +1663,9 @@ void __init mmap_init(void) > > ret = percpu_counter_init(&vm_committed_as, 0, GFP_KERNEL); > VM_BUG_ON(ret); > +#ifdef CONFIG_SYSCTL > + register_sysctl_init("vm", mmap_table); > +#endif > } > > /* > -- > 2.34.1 >