FAILED: patch "[PATCH] userfaultfd: prevent registration of special VMAs" failed to apply to 6.18-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.18-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.
To reproduce the conflict and resubmit, you may use the following commands:
git fetch https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git/ linux-6.18.y
git checkout FETCH_HEAD
git cherry-pick -x 3c58f641e813c3c71039f8fd4d4e2a3aab713288
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2026072906-estranged-sinless-b8ff@gregkh' --subject-prefix 'PATCH 6.18.y' 'HEAD^..'
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 3c58f641e813c3c71039f8fd4d4e2a3aab713288 Mon Sep 17 00:00:00 2001
From: "Mike Rapoport (Microsoft)" <[email protected]>
Date: Thu, 18 Jun 2026 12:50:17 +0300
Subject: [PATCH] userfaultfd: prevent registration of special VMAs
Vova Tokarev says:
userfaultfd allows registration on shadow stack VMAs. With userfaultfd access, you can register on the shadow stack, discard a page ... and inject a page with chosen return addresses via UFFDIO_COPY.
Update vma_can_userfault() to reject VM_SHADOW_STACK.
While on it, also reject VM_SPECIAL so that if a driver would implement vm_uffd_ops, it wouldn't be possible to register special VMAs with userfaultfd.
Since VM_SPECIAL includes VM_DONTEXPAND which is set but hugetlb, exclude hugetlb VMAs from the check for VM_SPECIAL.
mm/userfaultfd.c +4 -1
@@ -2111,7 +2111,10 @@ static bool vma_can_userfault(struct vm_area_struct *vma, vm_flags_t vm_flags, {const struct vm_uffd_ops *ops =vma_uffd_ops (vma); -if (vma->vm_flags &VM_DROPPABLE ) +if (vma->vm_flags & (VM_DROPPABLE |VM_SHADOW_STACK )) +return false; + +if (!is_vm_hugetlb_page (vma) && (vma->vm_flags &VM_SPECIAL ))return false; vm_flags &= __VM_UFFD_FLAGS;
Sasha Levin
maintainerPATCH 1/1 userfaultfd: prevent registration of special VMAs
From: "Mike Rapoport (Microsoft)" <[email protected]>
[ Upstream commit 3c58f641e813c3c71039f8fd4d4e2a3aab713288 ]
Vova Tokarev says:
userfaultfd allows registration on shadow stack VMAs. With userfaultfd access, you can register on the shadow stack, discard a page ... and inject a page with chosen return addresses via UFFDIO_COPY.
Update vma_can_userfault() to reject VM_SHADOW_STACK.
While on it, also reject VM_SPECIAL so that if a driver would implement vm_uffd_ops, it wouldn't be possible to register special VMAs with userfaultfd.
Since VM_SPECIAL includes VM_DONTEXPAND which is set but hugetlb, exclude hugetlb VMAs from the check for VM_SPECIAL.
--- include/linux/userfaultfd_k.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)
include/linux/userfaultfd_k.h +4 -1
@@ -214,7 +214,10 @@ static inline bool vma_can_userfault(struct vm_area_struct *vma, { vm_flags &= __VM_UFFD_FLAGS; -if (vma->vm_flags &VM_DROPPABLE ) +if (vma->vm_flags & (VM_DROPPABLE |VM_SHADOW_STACK )) +return false; + +if (!is_vm_hugetlb_page (vma) && (vma->vm_flags &VM_SPECIAL ))return false; if ((vm_flags & VM_UFFD_MINOR) &&
Signature · 1 line
2.53.0
Mike Rapoport
maintainerRe: [PATCH 6.18.y] userfaultfd: prevent registration of special VMAs
Quoted 44 lines · Sasha Levin
From: "Mike Rapoport (Microsoft)" <[email protected]>
[ Upstream commit
3c58f641e813c3c71039f8fd4d4e2a3aab713288]Vova Tokarev says:
userfaultfd allows registration on shadow stack VMAs. With userfaultfd access, you can register on the shadow stack, discard a page ... and inject a page with chosen return addresses via
UFFDIO_COPY.Update
vma_can_userfault()to rejectVM_SHADOW_STACK.While on it, also reject
VM_SPECIALso that if a driver would implementvm_uffd_ops, it wouldn't be possible to register special VMAs with userfaultfd.Since
VM_SPECIALincludesVM_DONTEXPANDwhich is set but hugetlb, exclude hugetlb VMAs from the check forVM_SPECIAL.Fixes 54007f818206 ("mm: Introduce VM_SHADOW_STACK for shadow stack memory")Signed-off-by Mike Rapoport (Microsoft) <[email protected]>Reported-by vova tokarev <[email protected]>Reviewed-by Lorenzo Stoakes <[email protected]>Cc Al Viro <[email protected]>Cc Christian Brauner <[email protected]>Cc Jan Kara <[email protected]>Cc Linus Torvalds <[email protected]>Cc Mike Rapoport <[email protected]>Cc Oleg Nesterov <[email protected]>Cc Peter Xu <[email protected]>Cc <[email protected]>Signed-off-by Andrew Morton <[email protected]>Signed-off-by Sasha Levin <[email protected]>--- include/linux/userfaultfd_k.h | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-)include/linux/userfaultfd_k.h +0
-0
include/linux/userfaultfd_k.h static inline bool vma_can_userfault(struct vm_area_struct *vma, · line 220
Quoted 8 lines
include/linux/userfaultfd_k.h +4
-1@@ -214,7 +214,10 @@ static inline bool vma_can_userfault(struct vm_area_struct *vma, { vm_flags &= __VM_UFFD_FLAGS; -if (vma->vm_flags &VM_DROPPABLE ) +if (vma->vm_flags & (VM_DROPPABLE |VM_SHADOW_STACK )) +return false; + +if (!is_vm_hugetlb_page (vma) && (vma->vm_flags &VM_SPECIAL ))
Yeah, that's the right place :)
Thanks!
Quoted 6 lines
include/linux/userfaultfd_k.h +0
-0return false; if ((vm_flags & VM_UFFD_MINOR) &&Signature · 1 line
2.53.0
Signature · 2 lines
Sincerely yours, Mike.