From nobody Thu Apr 16 20:56:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9CA763B8D75 for ; Wed, 25 Feb 2026 16:14:14 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036054; cv=none; b=PvDtaU1Rp1bsX/SDD3epepSgLBStfx/A3n22qiIWaKvQsLm+hFAGDfwprkGGlcFtftL8q0vCzD2NR6FUJPgWQwVvm11x1lbAPsw3+EtXwPpZIigmNMXmwRunhruOOL/OqbfGjoBaGBTQ2rdFZpF4ABczLplAJcsTSE3Wf8rRgfA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036054; c=relaxed/simple; bh=cDmPVjrn6RsaLM9qdygEhy1yS65J1lsDD6DaYYnyqGw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=LC7Jgqc+87TSitGWggmTO9o83s0W0/1NxaTy2TjpFg7Gs7vPpXi1oftyLbYbXUKurnZ/zJxzLCDSUm/lEPIDJsCNqwMDrh6U7CcfYjv6KfqRKViOYlF6nsYCYTpXVDdXRVnHzngOIxHaXX/Bewrou6WyIUF2io59s0v4tXuJ4qo= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id E9970C2BC87; Wed, 25 Feb 2026 16:14:10 +0000 (UTC) From: Catalin Marinas To: Andrew Morton , David Hildenbrand , Mark Brown , Deepak Gupta , Rick Edgecombe Cc: Will Deacon , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v2 1/5] mm: Introduce vm_mmap_shadow_stack() as a helper for VM_SHADOW_STACK mappings Date: Wed, 25 Feb 2026 16:13:58 +0000 Message-ID: <20260225161404.3157851-2-catalin.marinas@arm.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260225161404.3157851-1-catalin.marinas@arm.com> References: <20260225161404.3157851-1-catalin.marinas@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" arm64, riscv and x86 use a similar pattern for mapping the user shadow stack (cloned from x86). Extract this into a helper to facilitate code reuse. The call to do_mmap() from the new helper uses PROT_READ|PROT_WRITE prot bits instead of the PROT_READ with an explicit VM_WRITE vm_flag. The x86 intent was to avoid PROT_WRITE implying normal write since the shadow stack is not writable by normal stores. However, from a kernel perspective, the vma is writeable. Functionally there is no difference. Signed-off-by: Catalin Marinas Tested-by: Deepak Gupta Reviewed-by: Mark Brown Acked-by: David Hildenbrand (Arm) Cc: Andrew Morton Reviewed-by: Mike Rapoport (Microsoft) --- include/linux/mm.h | 2 ++ mm/util.c | 25 +++++++++++++++++++++++++ 2 files changed, 27 insertions(+) diff --git a/include/linux/mm.h b/include/linux/mm.h index 5be3d8a8f806..61071dd72eb6 100644 --- a/include/linux/mm.h +++ b/include/linux/mm.h @@ -3908,6 +3908,8 @@ extern int vm_munmap(unsigned long, size_t); extern unsigned long __must_check vm_mmap(struct file *, unsigned long, unsigned long, unsigned long, unsigned long, unsigned long); +extern unsigned long __must_check vm_mmap_shadow_stack(unsigned long addr, + unsigned long len, unsigned long flags); =20 struct vm_unmapped_area_info { #define VM_UNMAPPED_AREA_TOPDOWN 1 diff --git a/mm/util.c b/mm/util.c index b05ab6f97e11..51f7f417e91f 100644 --- a/mm/util.c +++ b/mm/util.c @@ -618,6 +618,31 @@ unsigned long vm_mmap(struct file *file, unsigned long= addr, } EXPORT_SYMBOL(vm_mmap); =20 +#ifdef CONFIG_ARCH_HAS_USER_SHADOW_STACK +/* + * Perform a userland memory mapping for a shadow stack into the current + * process address space. This is intended to be used by architectures that + * support user shadow stacks. + */ +unsigned long vm_mmap_shadow_stack(unsigned long addr, unsigned long len, + unsigned long flags) +{ + struct mm_struct *mm =3D current->mm; + unsigned long ret, unused; + + flags |=3D MAP_ANONYMOUS | MAP_PRIVATE; + if (addr) + flags |=3D MAP_FIXED_NOREPLACE; + + mmap_write_lock(mm); + ret =3D do_mmap(NULL, addr, len, PROT_READ | PROT_WRITE, flags, + VM_SHADOW_STACK, 0, &unused, NULL); + mmap_write_unlock(mm); + + return ret; +} +#endif /* CONFIG_ARCH_HAS_USER_SHADOW_STACK */ + /** * __vmalloc_array - allocate memory for a virtually contiguous array. * @n: number of elements. From nobody Thu Apr 16 20:56:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4706E3D5259 for ; Wed, 25 Feb 2026 16:14:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036058; cv=none; b=AnxtVLX14pDcPPAairTM+kUlIFWx01QO5yLXgb3boDBlIZseeYN9qKb6W5t0RWQ338+sSaDZd2c19L/G/dIqh14TJuMQtSyWPbsZ17lx8O20PBXKIg3WsQ8RMSi5Qfkb6vTP++97pESj6U0VNDr4QbGJzSNg6631kyQfkzqNzYY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036058; c=relaxed/simple; bh=mzIbdOUzUlovxymqBnj+kYDKgwOIfUhH5KXcm/SyWrs=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=XuhdY5MSOk+C6IjrkWQWqU7BulYpuwd5RtiwEdLrk6lAj3GWxXyuGvKrIR50TkpdU9H7n7SCW0CPERgUKR8Z2JSwAd5QudKtIh7/vx2P0xZzWkG43RGQ+FmoAtR/fLN5oUEhAdSgklquV6otQi/zy1R+ZfgW7pI/lg/lxJWlepI= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id A2D49C2BC9E; Wed, 25 Feb 2026 16:14:14 +0000 (UTC) From: Catalin Marinas To: Andrew Morton , David Hildenbrand , Mark Brown , Deepak Gupta , Rick Edgecombe Cc: Will Deacon , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v2 2/5] arm64: gcs: Use the new common vm_mmap_shadow_stack() helper Date: Wed, 25 Feb 2026 16:13:59 +0000 Message-ID: <20260225161404.3157851-3-catalin.marinas@arm.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260225161404.3157851-1-catalin.marinas@arm.com> References: <20260225161404.3157851-1-catalin.marinas@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace the arm64 map_shadow_stack() content with a call to vm_mmap_shadow_stack(). There is no functional change. Signed-off-by: Catalin Marinas Reviewed-by: David Hildenbrand (Arm) Reviewed-by: Mark Brown Cc: Will Deacon Reviewed-by: Mike Rapoport (Microsoft) --- arch/arm64/mm/gcs.c | 14 +------------- 1 file changed, 1 insertion(+), 13 deletions(-) diff --git a/arch/arm64/mm/gcs.c b/arch/arm64/mm/gcs.c index 04a23a497f20..680749611a9a 100644 --- a/arch/arm64/mm/gcs.c +++ b/arch/arm64/mm/gcs.c @@ -12,19 +12,7 @@ =20 static unsigned long alloc_gcs(unsigned long addr, unsigned long size) { - int flags =3D MAP_ANONYMOUS | MAP_PRIVATE; - struct mm_struct *mm =3D current->mm; - unsigned long mapped_addr, unused; - - if (addr) - flags |=3D MAP_FIXED_NOREPLACE; - - mmap_write_lock(mm); - mapped_addr =3D do_mmap(NULL, addr, size, PROT_READ, flags, - VM_SHADOW_STACK | VM_WRITE, 0, &unused, NULL); - mmap_write_unlock(mm); - - return mapped_addr; + return vm_mmap_shadow_stack(addr, size, 0); } =20 static unsigned long gcs_size(unsigned long size) From nobody Thu Apr 16 20:56:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C5E853D7D61 for ; Wed, 25 Feb 2026 16:14:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036061; cv=none; b=dE4zHYn2uhcdwcMWo7Muy6W8LPxbTtAqBoonwP5kdfX8A/1ARfyUQv/5Or3haNb2NRTgVqSfNsBqjOWeQXt0N/+PFxZyFUgQKNE+CoDZsWMJciVfmb6tV4FJaHBCzPsCQMzlZfjk7td+6i7e5VYGhmrJ+nZDnFp/ojECSc9wglk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036061; c=relaxed/simple; bh=L74LtwELsZBx05mMDk6n5n89M6Lbs65mVQ9GaQ9jO7o=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=P9+xD1tigmsLAwB2VMbqjoVgQTB8EJYI271HaupomES0LF5hXGYRJQ3VS89XoHIwzeXAQd0MS3F0YCHMlCNXycuCnI3388JG5nLoZxPLbVaZkcdhn/mDQNNGUC8VhxjtLUSKu0TPnaAHNV2gfOQZB8jkfal9T4ayybVADsYQaYE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 5CA6BC19421; Wed, 25 Feb 2026 16:14:18 +0000 (UTC) From: Catalin Marinas To: Andrew Morton , David Hildenbrand , Mark Brown , Deepak Gupta , Rick Edgecombe Cc: Will Deacon , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v2 3/5] riscv: shstk: Use the new common vm_mmap_shadow_stack() helper Date: Wed, 25 Feb 2026 16:14:00 +0000 Message-ID: <20260225161404.3157851-4-catalin.marinas@arm.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260225161404.3157851-1-catalin.marinas@arm.com> References: <20260225161404.3157851-1-catalin.marinas@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace part of the allocate_shadow_stack() content with a call to vm_mmap_shadow_stack(). There is no functional change. Signed-off-by: Catalin Marinas Tested-by: Deepak Gupta Reviewed-by: David Hildenbrand (Arm) Cc: Paul Walmsley Cc: Palmer Dabbelt Cc: Albert Ou Cc: Alexandre Ghiti Acked-by: Paul Walmsley Reviewed-by: Mike Rapoport (Microsoft) --- arch/riscv/kernel/usercfi.c | 12 +----------- 1 file changed, 1 insertion(+), 11 deletions(-) diff --git a/arch/riscv/kernel/usercfi.c b/arch/riscv/kernel/usercfi.c index 1adba746f164..7e57f54dc5b2 100644 --- a/arch/riscv/kernel/usercfi.c +++ b/arch/riscv/kernel/usercfi.c @@ -230,17 +230,7 @@ int restore_user_shstk(struct task_struct *tsk, unsign= ed long shstk_ptr) static unsigned long allocate_shadow_stack(unsigned long addr, unsigned lo= ng size, unsigned long token_offset, bool set_tok) { - int flags =3D MAP_ANONYMOUS | MAP_PRIVATE; - struct mm_struct *mm =3D current->mm; - unsigned long populate; - - if (addr) - flags |=3D MAP_FIXED_NOREPLACE; - - mmap_write_lock(mm); - addr =3D do_mmap(NULL, addr, size, PROT_READ, flags, - VM_SHADOW_STACK | VM_WRITE, 0, &populate, NULL); - mmap_write_unlock(mm); + addr =3D vm_mmap_shadow_stack(addr, size, 0); =20 if (!set_tok || IS_ERR_VALUE(addr)) goto out; From nobody Thu Apr 16 20:56:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 096863D9029 for ; Wed, 25 Feb 2026 16:14:25 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036066; cv=none; b=MB2w7JzOm7mctJb0uwBlBhpTnmbQqfBgAPuHGeD+is0D+nivrthU6UKmJ9BRLNi6FZR1TSHvfKYeKPYDrlMXUKhYY65oNhHkDe1XglqosnI5H/aL8N7pqZqh6A3CDYTcc0OdBAutxok1Vr7H3E2uVRZEyqn8dPSGEL4kn2rWObM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036066; c=relaxed/simple; bh=jMMZ+P7hPDmqL+fXfEJ8VERX40bPLCpeN03rpnq488Y=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=I92vjRInZsa9K46NJqnYrTDF4hT8G8DK/jKZPkfwDDWHIfMT+d4DYmxY/XPTEuqLdOq3Jceh5vCPaEMjTXgTdsN3c2e3MIiPmbgHjxuDtRPFPGjx1mgXokB3aRq2p2R8o2dBeEYO0Pv5uXaSwYPBdbaATu9q/3+CsN2ENhPn8E4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id 1798CC19425; Wed, 25 Feb 2026 16:14:21 +0000 (UTC) From: Catalin Marinas To: Andrew Morton , David Hildenbrand , Mark Brown , Deepak Gupta , Rick Edgecombe Cc: Will Deacon , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v2 4/5] x86: shstk: Use the new common vm_mmap_shadow_stack() helper Date: Wed, 25 Feb 2026 16:14:01 +0000 Message-ID: <20260225161404.3157851-5-catalin.marinas@arm.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260225161404.3157851-1-catalin.marinas@arm.com> References: <20260225161404.3157851-1-catalin.marinas@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Replace part of the x86 alloc_shstk() content with a call to vm_mmap_shadow_stack(). There is no functional change. Signed-off-by: Catalin Marinas Reviewed-by: Rick Edgecombe Tested-by: Rick Edgecombe Reviewed-by: David Hildenbrand (Arm) Cc: Thomas Gleixner Cc: Ingo Molnar Cc: Borislav Petkov Cc: Dave Hansen Cc: H. Peter Anvin Reviewed-by: Mike Rapoport (Microsoft) --- arch/x86/kernel/shstk.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/arch/x86/kernel/shstk.c b/arch/x86/kernel/shstk.c index 978232b6d48d..9725e7d89b1e 100644 --- a/arch/x86/kernel/shstk.c +++ b/arch/x86/kernel/shstk.c @@ -100,17 +100,9 @@ static int create_rstor_token(unsigned long ssp, unsig= ned long *token_addr) static unsigned long alloc_shstk(unsigned long addr, unsigned long size, unsigned long token_offset, bool set_res_tok) { - int flags =3D MAP_ANONYMOUS | MAP_PRIVATE | MAP_ABOVE4G; - struct mm_struct *mm =3D current->mm; - unsigned long mapped_addr, unused; + unsigned long mapped_addr; =20 - if (addr) - flags |=3D MAP_FIXED_NOREPLACE; - - mmap_write_lock(mm); - mapped_addr =3D do_mmap(NULL, addr, size, PROT_READ, flags, - VM_SHADOW_STACK | VM_WRITE, 0, &unused, NULL); - mmap_write_unlock(mm); + mapped_addr =3D vm_mmap_shadow_stack(addr, size, MAP_ABOVE4G); =20 if (!set_res_tok || IS_ERR_VALUE(mapped_addr)) goto out; From nobody Thu Apr 16 20:56:38 2026 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 9E1963D9025 for ; Wed, 25 Feb 2026 16:14:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036069; cv=none; b=EJ8RzVgdjvPxRdifSYdCuboDCudhUqvunEh+hvdq9rKxTjPQ7qw+3HMDnPzRNEQKM9OBlfrJFtDKPsQb7OHA2TE7Dj4/ymVJk1TOyRyWxrOYHMQM6ZHr4OYdOPfiZzjmdGCUuMFi6LvozPKnaKJ5ednd+Y22eyGKAvuZsbnvL/8= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1772036069; c=relaxed/simple; bh=xakhdSHyCq7JQSs2h12uqeiQ6YKh5HrzvRF1ZL91S1A=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=co8ubBoPhA6AyxM1yzeJrvsno1bGogluvNFzj1oILwvAA5cUA6vmoijh4xLH+X+7926zbvGcwCPfUYeJytDIP7IUF4H0So5/byfrPFKsGd2P25W2wZxXaK6VLGeWkaDJC4w8UBUlbds+8oK0X99ajoOV4EsFK9EHlrR6fJYNoo8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 Received: by smtp.kernel.org (Postfix) with ESMTPSA id CBC27C116D0; Wed, 25 Feb 2026 16:14:25 +0000 (UTC) From: Catalin Marinas To: Andrew Morton , David Hildenbrand , Mark Brown , Deepak Gupta , Rick Edgecombe Cc: Will Deacon , Paul Walmsley , Palmer Dabbelt , Albert Ou , Alexandre Ghiti , Thomas Gleixner , Ingo Molnar , Borislav Petkov , Dave Hansen , "H. Peter Anvin" , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-mm@kvack.org Subject: [PATCH v2 5/5] mm: Do not map the shadow stack as THP Date: Wed, 25 Feb 2026 16:14:02 +0000 Message-ID: <20260225161404.3157851-6-catalin.marinas@arm.com> X-Mailer: git-send-email 2.47.3 In-Reply-To: <20260225161404.3157851-1-catalin.marinas@arm.com> References: <20260225161404.3157851-1-catalin.marinas@arm.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The default shadow stack size allocated on first prctl() for the main thread or subsequently on clone() is either half of RLIMIT_STACK or half of a thread's stack size (for arm64). Both of these are likely to be suitable for a THP allocation and the kernel is more aggressive in creating such mappings. However, it does not make much sense to use a huge page. It didn't make sense for the normal stacks either, see commit c4608d1bf7c6 ("mm: mmap: map MAP_STACK to VM_NOHUGEPAGE"). Force VM_NOHUGEPAGE when allocating/mapping the shadow stack. As per commit 7190b3c8bd2b ("mm: mmap: map MAP_STACK to VM_NOHUGEPAGE only if THP is enabled"), only pass this flag if TRANSPARENT_HUGEPAGE is enabled as not to confuse CRIU tools. Signed-off-by: Catalin Marinas Tested-by: Deepak Gupta Reviewed-by: Mark Brown Acked-by: David Hildenbrand (Arm) Cc: Andrew Morton Reviewed-by: Mike Rapoport (Microsoft) --- mm/util.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/mm/util.c b/mm/util.c index 51f7f417e91f..419cb81ab353 100644 --- a/mm/util.c +++ b/mm/util.c @@ -629,14 +629,18 @@ unsigned long vm_mmap_shadow_stack(unsigned long addr= , unsigned long len, { struct mm_struct *mm =3D current->mm; unsigned long ret, unused; + vm_flags_t vm_flags =3D VM_SHADOW_STACK; =20 flags |=3D MAP_ANONYMOUS | MAP_PRIVATE; if (addr) flags |=3D MAP_FIXED_NOREPLACE; =20 + if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) + vm_flags |=3D VM_NOHUGEPAGE; + mmap_write_lock(mm); ret =3D do_mmap(NULL, addr, len, PROT_READ | PROT_WRITE, flags, - VM_SHADOW_STACK, 0, &unused, NULL); + vm_flags, 0, &unused, NULL); mmap_write_unlock(mm); =20 return ret;