Received: by 2002:a05:7412:b130:b0:e2:908c:2ebd with SMTP id az48csp1687925rdb; Sun, 19 Nov 2023 06:31:42 -0800 (PST) X-Google-Smtp-Source: AGHT+IEUiLR3i7FlDK5bGp4ErAmVrELiOe3ZeEyhTTupQHOZ46mbwbUSvNL6NOtwb3ute5WGvrbC X-Received: by 2002:a17:902:a412:b0:1cc:4ff3:c837 with SMTP id p18-20020a170902a41200b001cc4ff3c837mr2999367plq.68.1700404302485; Sun, 19 Nov 2023 06:31:42 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1700404302; cv=none; d=google.com; s=arc-20160816; b=xXzbYoMrHXWLC5RQIry5tAlcWP4sxV9HnUuLPXsFdKK/3sojerm1jBKcxkTM7uwvTG 7opkvk9E13PHtZxaB5FVFxbVlXxgYANEtITx+yORvNgNTZYk50+W6mWBJMPC0cNKPCPz xDE8qwqEF1Ji0xRHuESFK6/YRvhw5mletdO5swb/gklt6bbvKr9BJD3fuSZQi61Q+PM1 LWxrW7rhRCUfrX3A6k3g3NUEA/lXgss6tF6LWskeb0aPbesXohr+iTDJlubOPMMdPGW/ pzy/+UjzYfQegvU3TtpyOZ8ZHPHvKX8bpMjMk8EFBiASnyVqjLErFtc+I+yrzLJeplKA 04pw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:mime-version:message-id:in-reply-to:organization :date:subject:cc:to:from:user-agent:references; bh=QR993d/+fnXLrObV432WXlDufZAbRqYnFVaiijUSrV8=; fh=vxKEP9+Jyp+GEwgqCUCRzwPeBpWcQXD7lveMld17iek=; b=e5ewef8mdxzPtb8hxwv6JvDLUU9UPlD36bK165WslUVkGX4qIQELkjweNcv/2KZd5m Yail/XSR+QNb6+IAV17Rg5Z8+aYMvrA8NrZ6j5fhO4Ey1cPHT9cSqj/Iq1N/8sGk6Jl1 DHm1POWbZ/zPX9OGiFgRu9f1ladm4Op4W9Tw1Ogo2SGgGq8G+veFqv8gq8PeglpF1VBw yO90n6nVzUAmoPkvUsLmCDxWj5ISe31lDWwooZWFNjx5q0Kq1ggLBXLk5SsHhLr7hP0r nkM5b8PGLAINRVYucf3wItB0bp0YXrlSbHp666aA8v+yh/4fGPINsf2EOizxGsahmIuN 1n2w== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gentoo.org Return-Path: Received: from groat.vger.email (groat.vger.email. [23.128.96.35]) by mx.google.com with ESMTPS id nb17-20020a17090b35d100b0028514b41c88si2510313pjb.70.2023.11.19.06.31.42 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 19 Nov 2023 06:31:42 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) client-ip=23.128.96.35; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.35 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=gentoo.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by groat.vger.email (Postfix) with ESMTP id 3342F8080D77; Sun, 19 Nov 2023 06:31:11 -0800 (PST) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.11 at groat.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230140AbjKSObC (ORCPT + 99 others); Sun, 19 Nov 2023 09:31:02 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48662 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231474AbjKSOa7 (ORCPT ); Sun, 19 Nov 2023 09:30:59 -0500 Received: from smtp.gentoo.org (smtp.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id D781DBA; Sun, 19 Nov 2023 06:30:55 -0800 (PST) References: User-agent: mu4e 1.10.8; emacs 30.0.50 From: Sam James To: Helge Deller Cc: Andrew Morton , linux-mm@kvack.org, linux-kernel@vger.kernel.org, linux-parisc@vger.kernel.org, matoro Subject: Re: [PATCH] parisc: Fix mmap_base calculation when stack grows upwards Date: Sun, 19 Nov 2023 14:30:05 +0000 Organization: Gentoo In-reply-to: Message-ID: <87msv9ke78.fsf@gentoo.org> MIME-Version: 1.0 Content-Type: text/plain X-Spam-Status: No, score=-0.8 required=5.0 tests=HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=unavailable autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on groat.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (groat.vger.email [0.0.0.0]); Sun, 19 Nov 2023 06:31:11 -0800 (PST) Helge Deller writes: > Matoro reported various userspace crashes on the parisc platform with kernel > 6.6 and bisected it to commit 3033cd430768 ("parisc: Use generic mmap top-down > layout and brk randomization"). > > That commit switched parisc to use the common infrastructure to calculate > mmap_base, but missed that the mmap_base() function takes care for > architectures where the stack grows downwards only. > > Fix the mmap_base() calculation to include the stack-grows-upwards case > and thus fix the userspace crashes on parisc. > > Reported-by: matoro > Signed-off-by: Helge Deller > Tested-by: matoro > Fixes: 3033cd430768 ("parisc: Use generic mmap top-down layout and brk randomization") > Cc: # v6.6+ Sorry to be impatient, but pinging this. HPPA is unusable on 6.6.x without this patch. > > diff --git a/arch/parisc/Kconfig b/arch/parisc/Kconfig > index fd69dfa0cdab..a7c9c0e69e5a 100644 > --- a/arch/parisc/Kconfig > +++ b/arch/parisc/Kconfig > @@ -140,11 +140,11 @@ config ARCH_MMAP_RND_COMPAT_BITS_MIN > default 8 > > config ARCH_MMAP_RND_BITS_MAX > - default 24 if 64BIT > - default 17 > + default 18 if 64BIT > + default 13 > > config ARCH_MMAP_RND_COMPAT_BITS_MAX > - default 17 > + default 13 > > # unless you want to implement ACPI on PA-RISC ... ;-) > config PM > diff --git a/arch/parisc/include/asm/elf.h b/arch/parisc/include/asm/elf.h > index 140eaa97bf21..2d73d3c3cd37 100644 > --- a/arch/parisc/include/asm/elf.h > +++ b/arch/parisc/include/asm/elf.h > @@ -349,15 +349,7 @@ struct pt_regs; /* forward declaration... */ > > #define ELF_HWCAP 0 > > -/* Masks for stack and mmap randomization */ > -#define BRK_RND_MASK (is_32bit_task() ? 0x07ffUL : 0x3ffffUL) > -#define MMAP_RND_MASK (is_32bit_task() ? 0x1fffUL : 0x3ffffUL) > -#define STACK_RND_MASK MMAP_RND_MASK > - > -struct mm_struct; > -extern unsigned long arch_randomize_brk(struct mm_struct *); > -#define arch_randomize_brk arch_randomize_brk > - > +#define STACK_RND_MASK 0x7ff /* 8MB of VA */ > > #define ARCH_HAS_SETUP_ADDITIONAL_PAGES 1 > struct linux_binprm; > diff --git a/arch/parisc/include/asm/processor.h b/arch/parisc/include/asm/processor.h > index c05d121cf5d0..982aca20f56f 100644 > --- a/arch/parisc/include/asm/processor.h > +++ b/arch/parisc/include/asm/processor.h > @@ -47,6 +47,8 @@ > > #ifndef __ASSEMBLY__ > > +struct rlimit; > +unsigned long mmap_upper_limit(struct rlimit *rlim_stack); > unsigned long calc_max_stack_size(unsigned long stack_max); > > /* > diff --git a/arch/parisc/kernel/sys_parisc.c b/arch/parisc/kernel/sys_parisc.c > index ab896eff7a1d..98af719d5f85 100644 > --- a/arch/parisc/kernel/sys_parisc.c > +++ b/arch/parisc/kernel/sys_parisc.c > @@ -77,7 +77,7 @@ unsigned long calc_max_stack_size(unsigned long stack_max) > * indicating that "current" should be used instead of a passed-in > * value from the exec bprm as done with arch_pick_mmap_layout(). > */ > -static unsigned long mmap_upper_limit(struct rlimit *rlim_stack) > +unsigned long mmap_upper_limit(struct rlimit *rlim_stack) > { > unsigned long stack_base; > > diff --git a/mm/util.c b/mm/util.c > index aa01f6ea5a75..744b4d7e3fae 100644 > --- a/mm/util.c > +++ b/mm/util.c > @@ -414,6 +414,15 @@ static int mmap_is_legacy(struct rlimit *rlim_stack) > > static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack) > { > +#ifdef CONFIG_STACK_GROWSUP > + /* > + * For an upwards growing stack the calculation is much simpler. > + * Memory for the maximum stack size is reserved at the top of the > + * task. mmap_base starts directly below the stack and grows > + * downwards. > + */ > + return PAGE_ALIGN_DOWN(mmap_upper_limit(rlim_stack) - rnd); > +#else > unsigned long gap = rlim_stack->rlim_cur; > unsigned long pad = stack_guard_gap; > > @@ -431,6 +440,7 @@ static unsigned long mmap_base(unsigned long rnd, struct rlimit *rlim_stack) > gap = MAX_GAP; > > return PAGE_ALIGN(STACK_TOP - gap - rnd); > +#endif > } > > void arch_pick_mmap_layout(struct mm_struct *mm, struct rlimit *rlim_stack)