For improved const-correctness.
Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
---
arch/s390/mm/mmap.c | 4 ++--
arch/sparc/kernel/sys_sparc_64.c | 2 +-
arch/x86/mm/mmap.c | 6 +++---
include/linux/sched/mm.h | 4 ++--
mm/util.c | 6 +++---
5 files changed, 11 insertions(+), 11 deletions(-)
diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c
index 547104ccc22a..767c5c26f9a3 100644
--- a/arch/s390/mm/mmap.c
+++ b/arch/s390/mm/mmap.c
@@ -27,7 +27,7 @@ static unsigned long stack_maxrandom_size(void)
return STACK_RND_MASK << PAGE_SHIFT;
}
-static inline int mmap_is_legacy(struct rlimit *rlim_stack)
+static inline int mmap_is_legacy(const struct rlimit *rlim_stack)
{
if (current->personality & ADDR_COMPAT_LAYOUT)
return 1;
@@ -169,7 +169,7 @@ unsigned long arch_get_unmapped_area_topdown(struct file *filp, unsigned long ad
* This function, called very early during the creation of a new
* process VM image, sets up which VM layout function to use:
*/
-void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
+void arch_pick_mmap_layout(struct mm_struct *mm, const struct rlimit *rlim_stack)
{
unsigned long random_factor = 0UL;
diff --git a/arch/sparc/kernel/sys_sparc_64.c b/arch/sparc/kernel/sys_sparc_64.c
index 785e9909340f..55faf2effa46 100644
--- a/arch/sparc/kernel/sys_sparc_64.c
+++ b/arch/sparc/kernel/sys_sparc_64.c
@@ -294,7 +294,7 @@ static unsigned long mmap_rnd(void)
return rnd << PAGE_SHIFT;
}
-void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
+void arch_pick_mmap_layout(struct mm_struct *mm, const struct rlimit *rlim_stack)
{
unsigned long random_factor = mmap_rnd();
unsigned long gap;
diff --git a/arch/x86/mm/mmap.c b/arch/x86/mm/mmap.c
index 708f85dc9380..82f3a987f7cf 100644
--- a/arch/x86/mm/mmap.c
+++ b/arch/x86/mm/mmap.c
@@ -80,7 +80,7 @@ unsigned long arch_mmap_rnd(void)
}
static unsigned long mmap_base(unsigned long rnd, unsigned long task_size,
- struct rlimit *rlim_stack)
+ const struct rlimit *rlim_stack)
{
unsigned long gap = rlim_stack->rlim_cur;
unsigned long pad = stack_maxrandom_size(task_size) + stack_guard_gap;
@@ -110,7 +110,7 @@ static unsigned long mmap_legacy_base(unsigned long rnd,
*/
static void arch_pick_mmap_base(unsigned long *base, unsigned long *legacy_base,
unsigned long random_factor, unsigned long task_size,
- struct rlimit *rlim_stack)
+ const struct rlimit *rlim_stack)
{
*legacy_base = mmap_legacy_base(random_factor, task_size);
if (mmap_is_legacy())
@@ -119,7 +119,7 @@ static void arch_pick_mmap_base(unsigned long *base, unsigned long *legacy_base,
*base = mmap_base(random_factor, task_size, rlim_stack);
}
-void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
+void arch_pick_mmap_layout(struct mm_struct *mm, const struct rlimit *rlim_stack)
{
if (mmap_is_legacy())
mm_flags_clear(MMF_TOPDOWN, mm);
diff --git a/include/linux/sched/mm.h b/include/linux/sched/mm.h
index 2201da0afecc..0232d983b715 100644
--- a/include/linux/sched/mm.h
+++ b/include/linux/sched/mm.h
@@ -178,7 +178,7 @@ static inline void mm_update_next_owner(struct mm_struct *mm)
#endif
extern void arch_pick_mmap_layout(struct mm_struct *mm,
- struct rlimit *rlim_stack);
+ const struct rlimit *rlim_stack);
unsigned long
arch_get_unmapped_area(struct file *filp, unsigned long addr,
@@ -211,7 +211,7 @@ generic_get_unmapped_area_topdown(struct file *filp, unsigned long addr,
unsigned long flags, vm_flags_t vm_flags);
#else
static inline void arch_pick_mmap_layout(struct mm_struct *mm,
- struct rlimit *rlim_stack) {}
+ const struct rlimit *rlim_stack) {}
#endif
static inline bool in_vfork(struct task_struct *tsk)
diff --git a/mm/util.c b/mm/util.c
index 241d2eaf26ca..38f8b9fa297c 100644
--- a/mm/util.c
+++ b/mm/util.c
@@ -431,7 +431,7 @@ static int mmap_is_legacy(const struct rlimit *rlim_stack)
#define MIN_GAP (SZ_128M)
#define MAX_GAP (STACK_TOP / 6 * 5)
-static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack)
+static unsigned long mmap_base(unsigned long rnd, const struct rlimit *rlim_stack)
{
#ifdef CONFIG_STACK_GROWSUP
/*
@@ -462,7 +462,7 @@ static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack)
#endif
}
-void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
+void arch_pick_mmap_layout(struct mm_struct *mm, const struct rlimit *rlim_stack)
{
unsigned long random_factor = 0UL;
@@ -478,7 +478,7 @@ void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
}
}
#elif defined(CONFIG_MMU) && !defined(HAVE_ARCH_PICK_MMAP_LAYOUT)
-void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)
+void arch_pick_mmap_layout(struct mm_struct *mm, const struct rlimit *rlim_stack)
{
mm->mmap_base = TASK_UNMAPPED_BASE;
mm_flags_clear(MMF_TOPDOWN, mm);
--
2.47.2
Hi Max, kernel test robot noticed the following build warnings: [auto build test WARNING on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/Max-Kellermann/mm-shmem-add-const-to-lots-of-pointer-parameters/20250830-023442 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20250829183159.2223948-9-max.kellermann%40ionos.com patch subject: [PATCH 08/12] arch, mm/util: add const to arch_pick_mmap_layout() parameter config: s390-randconfig-002-20250830 (https://download.01.org/0day-ci/archive/20250831/202508310153.i186f6o5-lkp@intel.com/config) compiler: s390-linux-gcc (GCC) 8.5.0 reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250831/202508310153.i186f6o5-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202508310153.i186f6o5-lkp@intel.com/ All warnings (new ones prefixed by >>): arch/s390/mm/mmap.c: In function 'arch_pick_mmap_layout': >> arch/s390/mm/mmap.c:187:44: warning: passing argument 2 of 'mmap_base' discards 'const' qualifier from pointer target type [-Wdiscarded-qualifiers] mm->mmap_base = mmap_base(random_factor, rlim_stack); ^~~~~~~~~~ arch/s390/mm/mmap.c:50:26: note: expected 'struct rlimit *' but argument is of type 'const struct rlimit *' struct rlimit *rlim_stack) ~~~~~~~~~~~~~~~^~~~~~~~~~ vim +187 arch/s390/mm/mmap.c 9b11c7912d00d0 Martin Schwidefsky 2017-04-24 167 6252d702c5311c Martin Schwidefsky 2008-02-09 168 /* 6252d702c5311c Martin Schwidefsky 2008-02-09 169 * This function, called very early during the creation of a new 6252d702c5311c Martin Schwidefsky 2008-02-09 170 * process VM image, sets up which VM layout function to use: 6252d702c5311c Martin Schwidefsky 2008-02-09 171 */ f547a726bf8dd8 Max Kellermann 2025-08-29 172 void arch_pick_mmap_layout(struct mm_struct *mm, const struct rlimit *rlim_stack) 6252d702c5311c Martin Schwidefsky 2008-02-09 173 { 8e89a356feb6f1 Kees Cook 2015-04-14 174 unsigned long random_factor = 0UL; 8e89a356feb6f1 Kees Cook 2015-04-14 175 8e89a356feb6f1 Kees Cook 2015-04-14 176 if (current->flags & PF_RANDOMIZE) 2b68f6caeac271 Kees Cook 2015-04-14 177 random_factor = arch_mmap_rnd(); 8e89a356feb6f1 Kees Cook 2015-04-14 178 6252d702c5311c Martin Schwidefsky 2008-02-09 179 /* 6252d702c5311c Martin Schwidefsky 2008-02-09 180 * Fall back to the standard layout if the personality 6252d702c5311c Martin Schwidefsky 2008-02-09 181 * bit is set, or if the expected stack growth is unlimited: 6252d702c5311c Martin Schwidefsky 2008-02-09 182 */ 8f2af155b51358 Kees Cook 2018-04-10 183 if (mmap_is_legacy(rlim_stack)) { 8e89a356feb6f1 Kees Cook 2015-04-14 184 mm->mmap_base = mmap_base_legacy(random_factor); 40ae96eabea408 Lorenzo Stoakes 2025-08-12 185 mm_flags_clear(MMF_TOPDOWN, mm); 6252d702c5311c Martin Schwidefsky 2008-02-09 186 } else { 8f2af155b51358 Kees Cook 2018-04-10 @187 mm->mmap_base = mmap_base(random_factor, rlim_stack); c52d638d6b5da2 Lorenzo Stoakes 2025-08-13 188 mm_flags_set(MMF_TOPDOWN, mm); 6252d702c5311c Martin Schwidefsky 2008-02-09 189 } 6252d702c5311c Martin Schwidefsky 2008-02-09 190 } fd5d210fa66bee Anshuman Khandual 2022-07-11 191 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
Hi Max, kernel test robot noticed the following build errors: [auto build test ERROR on akpm-mm/mm-everything] url: https://github.com/intel-lab-lkp/linux/commits/Max-Kellermann/mm-shmem-add-const-to-lots-of-pointer-parameters/20250830-023442 base: https://git.kernel.org/pub/scm/linux/kernel/git/akpm/mm.git mm-everything patch link: https://lore.kernel.org/r/20250829183159.2223948-9-max.kellermann%40ionos.com patch subject: [PATCH 08/12] arch, mm/util: add const to arch_pick_mmap_layout() parameter config: s390-allnoconfig (https://download.01.org/0day-ci/archive/20250830/202508302325.b9umktOw-lkp@intel.com/config) compiler: clang version 22.0.0git (https://github.com/llvm/llvm-project ac23f7465eedd0dd565ffb201f573e7a69695fa3) reproduce (this is a W=1 build): (https://download.01.org/0day-ci/archive/20250830/202508302325.b9umktOw-lkp@intel.com/reproduce) If you fix the issue in a separate patch/commit (i.e. not just a new version of the same patch/commit), kindly add following tags | Reported-by: kernel test robot <lkp@intel.com> | Closes: https://lore.kernel.org/oe-kbuild-all/202508302325.b9umktOw-lkp@intel.com/ All errors (new ones prefixed by >>): >> arch/s390/mm/mmap.c:187:44: error: passing 'const struct rlimit *' to parameter of type 'struct rlimit *' discards qualifiers [-Werror,-Wincompatible-pointer-types-discards-qualifiers] 187 | mm->mmap_base = mmap_base(random_factor, rlim_stack); | ^~~~~~~~~~ arch/s390/mm/mmap.c:50:26: note: passing argument to parameter 'rlim_stack' here 50 | struct rlimit *rlim_stack) | ^ 1 error generated. vim +187 arch/s390/mm/mmap.c 9b11c7912d00d0 Martin Schwidefsky 2017-04-24 167 6252d702c5311c Martin Schwidefsky 2008-02-09 168 /* 6252d702c5311c Martin Schwidefsky 2008-02-09 169 * This function, called very early during the creation of a new 6252d702c5311c Martin Schwidefsky 2008-02-09 170 * process VM image, sets up which VM layout function to use: 6252d702c5311c Martin Schwidefsky 2008-02-09 171 */ f547a726bf8dd8 Max Kellermann 2025-08-29 172 void arch_pick_mmap_layout(struct mm_struct *mm, const struct rlimit *rlim_stack) 6252d702c5311c Martin Schwidefsky 2008-02-09 173 { 8e89a356feb6f1 Kees Cook 2015-04-14 174 unsigned long random_factor = 0UL; 8e89a356feb6f1 Kees Cook 2015-04-14 175 8e89a356feb6f1 Kees Cook 2015-04-14 176 if (current->flags & PF_RANDOMIZE) 2b68f6caeac271 Kees Cook 2015-04-14 177 random_factor = arch_mmap_rnd(); 8e89a356feb6f1 Kees Cook 2015-04-14 178 6252d702c5311c Martin Schwidefsky 2008-02-09 179 /* 6252d702c5311c Martin Schwidefsky 2008-02-09 180 * Fall back to the standard layout if the personality 6252d702c5311c Martin Schwidefsky 2008-02-09 181 * bit is set, or if the expected stack growth is unlimited: 6252d702c5311c Martin Schwidefsky 2008-02-09 182 */ 8f2af155b51358 Kees Cook 2018-04-10 183 if (mmap_is_legacy(rlim_stack)) { 8e89a356feb6f1 Kees Cook 2015-04-14 184 mm->mmap_base = mmap_base_legacy(random_factor); 40ae96eabea408 Lorenzo Stoakes 2025-08-12 185 mm_flags_clear(MMF_TOPDOWN, mm); 6252d702c5311c Martin Schwidefsky 2008-02-09 186 } else { 8f2af155b51358 Kees Cook 2018-04-10 @187 mm->mmap_base = mmap_base(random_factor, rlim_stack); c52d638d6b5da2 Lorenzo Stoakes 2025-08-13 188 mm_flags_set(MMF_TOPDOWN, mm); 6252d702c5311c Martin Schwidefsky 2008-02-09 189 } 6252d702c5311c Martin Schwidefsky 2008-02-09 190 } fd5d210fa66bee Anshuman Khandual 2022-07-11 191 -- 0-DAY CI Kernel Test Service https://github.com/intel/lkp-tests/wiki
On Fri, Aug 29, 2025 at 08:31:55PM +0200, Max Kellermann wrote: > For improved const-correctness. > > Signed-off-by: Max Kellermann <max.kellermann@ionos.com> > --- > arch/s390/mm/mmap.c | 4 ++-- > arch/sparc/kernel/sys_sparc_64.c | 2 +- > arch/x86/mm/mmap.c | 6 +++--- > include/linux/sched/mm.h | 4 ++-- > mm/util.c | 6 +++--- > 5 files changed, 11 insertions(+), 11 deletions(-) > > diff --git a/arch/s390/mm/mmap.c b/arch/s390/mm/mmap.c > index 547104ccc22a..767c5c26f9a3 100644 > --- a/arch/s390/mm/mmap.c > +++ b/arch/s390/mm/mmap.c > @@ -27,7 +27,7 @@ static unsigned long stack_maxrandom_size(void) > return STACK_RND_MASK << PAGE_SHIFT; > } > > -static inline int mmap_is_legacy(struct rlimit *rlim_stack) > +static inline int mmap_is_legacy(const struct rlimit *rlim_stack) Thanks for splitting the patch into all these smaller snippets, it makes review a lot easier. But this function should be part of the 6th patch since we'd want function signatures to change together :). Once moved, feel free to add to both patches: Reviewed-by: Vishal Moola (Oracle) <vishal.moola@gmail.com>
On Sat, Aug 30, 2025 at 1:36 AM Vishal Moola (Oracle) <vishal.moola@gmail.com> wrote: > > -static inline int mmap_is_legacy(struct rlimit *rlim_stack) > > +static inline int mmap_is_legacy(const struct rlimit *rlim_stack) > > Thanks for splitting the patch into all these smaller snippets, it makes > review a lot easier. But this function should be part of the 6th patch > since we'd want function signatures to change together :). Will do. There are 3 copies of this function which are slightly different: - arch/s390/mm/mmap.c (checks rlim_stack) - arch/x86/mm/mmap.c (does not check rlim_stack) - mm/util.c (checks rlim_stack if CONFIG_STACK_GROWSUP) I wonder if it would be best to merge all 3 into one? The one in mm/util.c seems to be generic enough. Export it and have its prototype in linux/mm.h?
© 2016 - 2025 Red Hat, Inc.