]> Git Repo - linux.git/commitdiff
mm/madvise: process_madvise() drop capability check if same mm
authorLorenzo Stoakes <[email protected]>
Fri, 13 Sep 2024 14:06:28 +0000 (15:06 +0100)
committerAndrew Morton <[email protected]>
Tue, 17 Sep 2024 07:58:05 +0000 (00:58 -0700)
In commit 96cfe2c0fd23 ("mm/madvise: replace ptrace attach requirement for
process_madvise") process_madvise() was updated to require the caller to
possess the CAP_SYS_NICE capability to perform the operation, in addition
to a check against PTRACE_MODE_READ performed by mm_access().

The mm_access() function explicitly checks to see if the address space of
the process being referenced is the current one, in which case no check is
performed.

We, however, do not do this when checking the CAP_SYS_NICE capability. This
means that we insist on the caller possessing this capability in order to
perform madvise() operations on its own address space, which seems
nonsensical.

Simply add a check to allow for an invocation of this function with pidfd
set to the current process without elevation.

Link: https://lkml.kernel.org/r/[email protected]
Fixes: 96cfe2c0fd23 ("mm/madvise: replace ptrace attach requirement for process_madvise")
Signed-off-by: Lorenzo Stoakes <[email protected]>
Reviewed-by: Liam R. Howlett <[email protected]>
Acked-by: Vlastimil Babka <[email protected]>
Acked-by: Shakeel Butt <[email protected]>
Acked-by: David Rientjes <[email protected]>
Cc: Kees Cook <[email protected]>
Cc: Minchan Kim <[email protected]>
Cc: Suren Baghdasaryan <[email protected]>
Signed-off-by: Andrew Morton <[email protected]>
mm/madvise.c

index 89089d84f8df8712fc1f0e86a4e07258685e0554..6e3a137b8e50ee76e13ca81b0d58ca11f4969bee 100644 (file)
@@ -1527,7 +1527,7 @@ SYSCALL_DEFINE5(process_madvise, int, pidfd, const struct iovec __user *, vec,
         * Require CAP_SYS_NICE for influencing process performance. Note that
         * only non-destructive hints are currently supported.
         */
-       if (!capable(CAP_SYS_NICE)) {
+       if (mm != current->mm && !capable(CAP_SYS_NICE)) {
                ret = -EPERM;
                goto release_mm;
        }
This page took 0.060566 seconds and 4 git commands to generate.