Re: [PATCH] LoongArch: Increase default mmap randomization bits
From: Bingwu Zhang
Date: Sat Apr 11 2026 - 23:51:20 EST
On Sunday, March 29, 2026 11:48:02 AM China Standard Time Huacai Chen wrote:
> Hi, Bingwu,
>
> On Sun, Mar 29, 2026 at 6:59 AM Bingwu Zhang <xtex@xxxxxxxx> wrote:
> > From: Bingwu Zhang <xtex@xxxxxxxxxxxxx>
> >
> > Increase default mmap randomization bits from 12 to 18 on 64-bit
> > platforms for better strength.
> >
> > The original default, 12, means that ASLR offset has only (1 << 12) =
> > 4096 possibilities. On average, it can be brute-forced in 2048 attempts.
> > If a service is configured to restart automatically or can be started
> > easily (e.g. execve a suid program), then trying for 4k times can be
> > done in one day even when each attempt takes 20s.
> > Increasing it to 18 makes brute-force much more difficult and leaves
> > more time for operators to find out attacks.
> >
> > On 64-bit platforms, virtual address space is cheap, so the
> > randomization bits can be increased safely without disturbing userland
> > much and security comes first instead of availability.
>
> Don't change ARCH_MMAP_RND_BITS_MIN because it may compact
> performance, and you cannot blindly increase ARCH_MMAP_RND_BITS_MAX
> because it should no more than "VA_BITS - PAGE_SHIFT - 3" (see
> arch/riscv/Kconfig and arch/csky/Kconfig). For LoongArch, VA_BITS can
> be 39 (half of VA40), PAGE_SHIFT can be 16 (64KB page), so
> ARCH_MMAP_RND_BITS_MAX can only increase up to 20 (39 - 16 - 3 =20).
Sorry for the late reply.
It was my mistake that I didn't notice the upper bound of MAX. Thank you for
pointing out!
However, I didn't get where increasing MIN could compact performance.
Theoretically, the only difference is that the gap between heaps and stacks
are larger, from [128, 128+64]M to [128, 128+4096]M. This shouldn't affect
performance much. MIPS once used MIN=16, RISC-V 64 and PowerPC and ARM 64 are
using 18, and x86-64 is using 28, but I hadn't heard anyone complaining about
the performance.
I ran some benchmarks last weekend using the LLVM build benchmark of AOSC OS
https://github.com/AOSC-Dev/buildbot-benchmark/blob/master/buildbot-benchmark.bash
and here are the results
Processor Rand bits Time/secs
Average Variance Range
3C6000/S 18 612.927 614.394 614.513 613.343 614.76
613.9874 0.515637840000006 1.83299999999997
3C6000/S 12 614.322 613.93 614.825 613.859
615.875 614.5622 0.548874160000007 2.01599999999996
3A5000 18 3547.165 3548.764 3552.192 3545.697
3547.567 3548.277 4.79228759999993 6.49499999999989
3A5000 12 3549.029 3551.894 3549.191 3567.869
3587.409 3561.0784 222.052853440003 38.3800000000001
I didn't see any statistically meaningful performance defect.
>
> These are done in:
> https://github.com/chenhuacai/linux/commit/ff35475dcfbd4c6e9c275aaef3c92da71
> 0894058
>
> Huacai
>
> > Fixes: fa96b57c1490 ("LoongArch: Add build infrastructure")
> > Signed-off-by: Bingwu Zhang <xtex@xxxxxxxxxxxxx>
> > ---
> >
> > arch/loongarch/Kconfig | 2 ++
> > 1 file changed, 2 insertions(+)
> >
> > diff --git a/arch/loongarch/Kconfig b/arch/loongarch/Kconfig
> > index 92068ff38685..b47c4e4ecbb7 100644
> > --- a/arch/loongarch/Kconfig
> > +++ b/arch/loongarch/Kconfig
> > @@ -740,9 +740,11 @@ config MMU
> >
> > default y
> >
> > config ARCH_MMAP_RND_BITS_MIN
> >
> > + default 18 if 64BIT
> >
> > default 12
> >
> > config ARCH_MMAP_RND_BITS_MAX
> >
> > + default 32 if 64BIT
> >
> > default 18
> >
> > config ARCH_SUPPORTS_UPROBES
> >
> > base-commit: be762d8b6dd7efacb61937d20f8475db8f207655
> > --
> > 2.52.0
Best regards,
--
Bingwu Zhang @ Sun, 12 Apr 2026 03:28:14 +0000
Attachment:
signature.asc
Description: This is a digitally signed message part.