summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJeff Xu <jeffxu@chromium.org>2024-04-23 19:28:25 +0000
committerAndrew Morton <akpm@linux-foundation.org>2024-05-07 11:29:46 -0700
commitcb287bf405a40279b075b0fbacd51ec95d6cf855 (patch)
treebf59245e420cfe492d02b1d872b14e0f084af3db
parentf5e8c6ff42a85e7dfa0007e8abfe50702075c961 (diff)
mseal: add branch prediction hint
It is unlikely that application calls mm syscall, such as mprotect, on already sealed mappings, adding branch prediction hint. Link: https://lkml.kernel.org/r/20240423192825.1273679-2-jeffxu@chromium.org Signed-off-by: Jeff Xu <jeffxu@chromium.org> Suggested-by: Pedro Falcato <pedro.falcato@gmail.com> Cc: Amer Al Shanawany <amer.shanawany@gmail.com> Cc: Dave Hansen <dave.hansen@intel.com> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Guenter Roeck <groeck@chromium.org> Cc: Jann Horn <jannh@google.com> Cc: Javier Carrasco <javier.carrasco.cruz@gmail.com> Cc: Jeff Xu <jeffxu@google.com> Cc: Jonathan Corbet <corbet@lwn.net> Cc: Jorge Lucangeli Obes <jorgelo@chromium.org> Cc: Kees Cook <keescook@chromium.org> Cc: Liam R. Howlett <Liam.Howlett@oracle.com> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Matthew Wilcox (Oracle) <willy@infradead.org> Cc: Muhammad Usama Anjum <usama.anjum@collabora.com> Cc: Shuah Khan <shuah@kernel.org> Cc: Stephen Röttger <sroettger@google.com> Cc: Suren Baghdasaryan <surenb@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
-rw-r--r--mm/madvise.c2
-rw-r--r--mm/mmap.c4
-rw-r--r--mm/mprotect.c2
-rw-r--r--mm/mremap.c4
-rw-r--r--mm/mseal.c6
5 files changed, 9 insertions, 9 deletions
diff --git a/mm/madvise.c b/mm/madvise.c
index bf1587b87c47..a77893462b92 100644
--- a/mm/madvise.c
+++ b/mm/madvise.c
@@ -1449,7 +1449,7 @@ int do_madvise(struct mm_struct *mm, unsigned long start, size_t len_in, int beh
* Check if the address range is sealed for do_madvise().
* can_modify_mm_madv assumes we have acquired the lock on MM.
*/
- if (!can_modify_mm_madv(mm, start, end, behavior)) {
+ if (unlikely(!can_modify_mm_madv(mm, start, end, behavior))) {
error = -EPERM;
goto out;
}
diff --git a/mm/mmap.c b/mm/mmap.c
index 47363e7f7ea2..057270dbe3aa 100644
--- a/mm/mmap.c
+++ b/mm/mmap.c
@@ -2740,7 +2740,7 @@ int do_vmi_munmap(struct vma_iterator *vmi, struct mm_struct *mm,
* Prevent unmapping a sealed VMA.
* can_modify_mm assumes we have acquired the lock on MM.
*/
- if (!can_modify_mm(mm, start, end))
+ if (unlikely(!can_modify_mm(mm, start, end)))
return -EPERM;
/* arch_unmap() might do unmaps itself. */
@@ -3163,7 +3163,7 @@ int do_vma_munmap(struct vma_iterator *vmi, struct vm_area_struct *vma,
* Prevent unmapping a sealed VMA.
* can_modify_mm assumes we have acquired the lock on MM.
*/
- if (!can_modify_mm(mm, start, end))
+ if (unlikely(!can_modify_mm(mm, start, end)))
return -EPERM;
arch_unmap(mm, start, end);
diff --git a/mm/mprotect.c b/mm/mprotect.c
index e0ec5bfd17ec..8c6cd8825273 100644
--- a/mm/mprotect.c
+++ b/mm/mprotect.c
@@ -749,7 +749,7 @@ static int do_mprotect_pkey(unsigned long start, size_t len,
* checking if memory is sealed.
* can_modify_mm assumes we have acquired the lock on MM.
*/
- if (!can_modify_mm(current->mm, start, end)) {
+ if (unlikely(!can_modify_mm(current->mm, start, end))) {
error = -EPERM;
goto out;
}
diff --git a/mm/mremap.c b/mm/mremap.c
index c94e96ad2095..5f96bc5ee918 100644
--- a/mm/mremap.c
+++ b/mm/mremap.c
@@ -912,7 +912,7 @@ static unsigned long mremap_to(unsigned long addr, unsigned long old_len,
*
* can_modify_mm assumes we have acquired the lock on MM.
*/
- if (!can_modify_mm(mm, addr, addr + old_len))
+ if (unlikely(!can_modify_mm(mm, addr, addr + old_len)))
return -EPERM;
if (flags & MREMAP_FIXED) {
@@ -1087,7 +1087,7 @@ SYSCALL_DEFINE5(mremap, unsigned long, addr, unsigned long, old_len,
* Place can_modify_mm here so we can keep the logic related to
* shrink/expand together.
*/
- if (!can_modify_mm(mm, addr, addr + old_len)) {
+ if (unlikely(!can_modify_mm(mm, addr, addr + old_len))) {
ret = -EPERM;
goto out;
}
diff --git a/mm/mseal.c b/mm/mseal.c
index daadac4b8125..bf783bba8ed0 100644
--- a/mm/mseal.c
+++ b/mm/mseal.c
@@ -32,7 +32,7 @@ static inline void set_vma_sealed(struct vm_area_struct *vma)
*/
static bool can_modify_vma(struct vm_area_struct *vma)
{
- if (vma_is_sealed(vma))
+ if (unlikely(vma_is_sealed(vma)))
return false;
return true;
@@ -75,7 +75,7 @@ bool can_modify_mm(struct mm_struct *mm, unsigned long start, unsigned long end)
/* going through each vma to check. */
for_each_vma_range(vmi, vma, end) {
- if (!can_modify_vma(vma))
+ if (unlikely(!can_modify_vma(vma)))
return false;
}
@@ -100,7 +100,7 @@ bool can_modify_mm_madv(struct mm_struct *mm, unsigned long start, unsigned long
/* going through each vma to check. */
for_each_vma_range(vmi, vma, end)
- if (is_ro_anon(vma) && !can_modify_vma(vma))
+ if (unlikely(is_ro_anon(vma) && !can_modify_vma(vma)))
return false;
/* Allow by default. */