Re: [PATCH v2] fs/proc/task_mmu: add VM_SHADOW_STACK for arm64 when support GCS

From: Andrew Morton
Date: Sat Jun 07 2025 - 17:31:38 EST


On Sat, 7 Jun 2025 21:15:25 +0800 wangfushuai <wangfushuai@xxxxxxxxx> wrote:

> The recent commit adding VM_SHADOW_STACK for arm64 GCS did not update
> the /proc/[pid]/smaps display logic to show the "ss" flag for GCS pages.
> This patch adds the necessary condition to display "ss" flag.
>
> ...
>
> --- a/fs/proc/task_mmu.c
> +++ b/fs/proc/task_mmu.c
> @@ -994,6 +994,9 @@ static void show_smap_vma_flags(struct seq_file *m, struct vm_area_struct *vma)
> #ifdef CONFIG_ARCH_HAS_USER_SHADOW_STACK
> [ilog2(VM_SHADOW_STACK)] = "ss",
> #endif
> +#if defined(CONFIG_ARM64_GCS)
> + [ilog2(VM_SHADOW_STACK)] = "ss",
> +#endif
> #if defined(CONFIG_64BIT) || defined(CONFIG_PPC32)
> [ilog2(VM_DROPPABLE)] = "dp",
> #endif

It is possible to have CONFIG_ARM64_GCS=y when
CONFIG_ARCH_HAS_USER_SHADOW_STACK=n? If so, is this a correct
combination?


Also, wouldn't it be nicer to code this as

--- a/fs/proc/task_mmu.c~a
+++ a/fs/proc/task_mmu.c
@@ -991,7 +991,7 @@ static void show_smap_vma_flags(struct s
#ifdef CONFIG_HAVE_ARCH_USERFAULTFD_MINOR
[ilog2(VM_UFFD_MINOR)] = "ui",
#endif /* CONFIG_HAVE_ARCH_USERFAULTFD_MINOR */
-#ifdef CONFIG_ARCH_HAS_USER_SHADOW_STACK
+#if defined(CONFIG_ARCH_HAS_USER_SHADOW_STACK) || defined(CONFIG_ARM64_GCS)
[ilog2(VM_SHADOW_STACK)] = "ss",
#endif
#if defined(CONFIG_64BIT) || defined(CONFIG_PPC32)
_