FAILED: patch "[PATCH] ptrace: Set PF_SUPERPRIV when checking capability" failed to apply to 4.14-stable tree
Subsystems (2)
[email protected]
maintainerThe patch below does not apply to the 4.14-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]>.
thanks,
greg k-h
------------------ original commit in Linus's tree ------------------
From cf23705244c947151179f929774fabf71e239eee Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Micka=C3=ABl=20Sala=C3=BCn?= <[email protected]>
Date: Fri, 30 Oct 2020 13:38:48 +0100
Subject: [PATCH] ptrace: Set PF_SUPERPRIV when checking capability
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Commit 69f594a38967 ("ptrace: do not audit capability check when outputing /proc/pid/stat") replaced the use of ns_capable() with has_ns_capability{,_noaudit}() which doesn't set PF_SUPERPRIV.
Commit 6b3ad6649a4c ("ptrace: reintroduce usage of subjective credentials in ptrace_has_cap()") replaced has_ns_capability{,_noaudit}() with security_capable(), which doesn't set PF_SUPERPRIV neither.
Since commit 98f368e9e263 ("kernel: Add noaudit variant of ns_capable()"), a new ns_capable_noaudit() helper is available. Let's use it!
As a result, the signature of ptrace_has_cap() is restored to its original one.
kernel/ptrace.c +5 -11
@@ -264,17 +264,11 @@ static int ptrace_check_attach(struct task_struct *child, bool ignore_state)return ret; } -static bool ptrace_has_cap (const struct cred *cred,struct user_namespace *ns, -unsigned int mode) +static bool ptrace_has_cap (struct user_namespace *ns,unsigned int mode) { -int ret; -if (mode &PTRACE_MODE_NOAUDIT ) - ret =security_capable (cred, ns,CAP_SYS_PTRACE ,CAP_OPT_NOAUDIT ); -else - ret =security_capable (cred, ns,CAP_SYS_PTRACE ,CAP_OPT_NONE ); - -return ret ==0 ; +return ns_capable_noaudit (ns,CAP_SYS_PTRACE ); +return ns_capable (ns,CAP_SYS_PTRACE ); }/* Returns 0 on success, -errno on denial. */
@@ -326,7 +320,7 @@ static int __ptrace_may_access(struct task_struct *task, unsigned int mode) gid_eq(caller_gid, tcred->sgid) && gid_eq(caller_gid, tcred->gid)) goto ok; -if (ptrace_has_cap (cred, tcred->user_ns, mode)) +if (ptrace_has_cap (tcred->user_ns, mode)) goto ok;rcu_read_unlock ();return -EPERM ;
@@ -345,7 +339,7 @@ static int __ptrace_may_access(struct task_struct *task, unsigned int mode) mm = task->mm;if (mm && ((get_dumpable (mm) !=SUID_DUMP_USER ) && - !ptrace_has_cap (cred, mm->user_ns, mode))) + !ptrace_has_cap (mm->user_ns, mode)))return -EPERM ;return security_ptrace_access_check (task, mode);