FAILED: patch "[PATCH] mm: refactor map_deny_write_exec()" failed to apply to 6.11-stable tree
Subsystems (3)
[email protected]
maintainerThe patch below does not apply to the 6.11-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.11.y
git checkout FETCH_HEAD
git cherry-pick -x 0fb4a7ad270b3b209e510eb9dc5b07bf02b7edaf
# <resolve conflicts, build, test, etc.>
git commit -s
git send-email --to '<[email protected]>' --in-reply-to '2024111109-deck-cranial-851e@gregkh' --subject-prefix 'PATCH 6.11.y' HEAD^..
Possible dependencies:
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From 0fb4a7ad270b3b209e510eb9dc5b07bf02b7edaf Mon Sep 17 00:00:00 2001
From: Lorenzo Stoakes <[email protected]>
Date: Tue, 29 Oct 2024 18:11:46 +0000
Subject: [PATCH] mm: refactor map_deny_write_exec()
Refactor the map_deny_write_exec() to not unnecessarily require a VMA parameter but rather to accept VMA flags parameters, which allows us to use this function early in mmap_region() in a subsequent commit.
While we're here, we refactor the function to be more readable and add some additional documentation.
include/linux/mman.h +18 -3
@@ -188,16 +188,31 @@ static inline bool arch_memory_deny_write_exec_supported(void)* * d) mmap(PROT_READ | PROT_EXEC) * mmap(PROT_READ | PROT_EXEC | PROT_BTI) +* +* This is only applicable if the user has set the Memory-Deny-Write-Execute +* (MDWE) protection mask for the current process. +* +* @old specifies the VMA flags the VMA originally possessed, and @new the ones +* we propose to set. +* +* Return: false if proposed change is OK, true if not ok and should be denied. */ -static inline bool map_deny_write_exec (struct vm_area_struct *vma,unsigned long vm_flags) +static inline bool map_deny_write_exec (unsigned long old,unsigned long new) { +/* If MDWE is disabled, we have nothing to deny. */ if (!test_bit (MMF_HAS_MDWE , ¤t->mm->flags))return false; -if ((vm_flags &VM_EXEC ) && (vm_flags &VM_WRITE )) +/* If the new VMA is not executable, we have nothing to deny. */ +if (!(new &VM_EXEC )) +return false; + +/* Under MDWE we do not accept newly writably executable VMAs... */ +if (new &VM_WRITE )return true; -if (!(vma->vm_flags &VM_EXEC ) && (vm_flags &VM_EXEC )) +/* ...nor previously non-executable VMAs becoming executable. */ +if (!(old &VM_EXEC ))return true;return false;
mm/mmap.c +1 -1
@@ -1505,7 +1505,7 @@ unsigned long mmap_region(struct file *file, unsigned long addr,vma_set_anonymous (vma); } -if (map_deny_write_exec (vma, vma->vm_flags)) { +if (map_deny_write_exec (vma->vm_flags, vma->vm_flags)) { error = -EACCES ; goto close_and_free_vma; }
mm/mprotect.c +1 -1
@@ -810,7 +810,7 @@ static int do_mprotect_pkey(unsigned long start, size_t len,break ; } -if (map_deny_write_exec (vma, newflags)) { +if (map_deny_write_exec (vma->vm_flags, newflags)) { error = -EACCES ;break ; }
mm/vma.h +1 -1
@@ -42,7 +42,7 @@ struct vma_munmap_struct {int vma_count;/* Number of vmas that will be removed */ bool unlock;/* Unlock after the munmap */ bool clear_ptes;/* If there are outstanding PTE to be cleared */ -/* 1 byte hole */ +/* 2 byte hole */ unsigned long nr_pages;/* Number of pages being removed */ unsigned long locked_vm;/* Number of locked pages */ unsigned long nr_accounted;/* Number of VM_ACCOUNT pages */