diff options
Diffstat (limited to 'security/yama/yama_lsm.c')
-rw-r--r-- | security/yama/yama_lsm.c | 12 |
1 files changed, 9 insertions, 3 deletions
diff --git a/security/yama/yama_lsm.c b/security/yama/yama_lsm.c index 2663145d1197..23414b93771f 100644 --- a/security/yama/yama_lsm.c +++ b/security/yama/yama_lsm.c | |||
@@ -298,14 +298,18 @@ int yama_ptrace_access_check(struct task_struct *child, | |||
298 | /* No additional restrictions. */ | 298 | /* No additional restrictions. */ |
299 | break; | 299 | break; |
300 | case YAMA_SCOPE_RELATIONAL: | 300 | case YAMA_SCOPE_RELATIONAL: |
301 | rcu_read_lock(); | ||
301 | if (!task_is_descendant(current, child) && | 302 | if (!task_is_descendant(current, child) && |
302 | !ptracer_exception_found(current, child) && | 303 | !ptracer_exception_found(current, child) && |
303 | !ns_capable(task_user_ns(child), CAP_SYS_PTRACE)) | 304 | !ns_capable(__task_cred(child)->user_ns, CAP_SYS_PTRACE)) |
304 | rc = -EPERM; | 305 | rc = -EPERM; |
306 | rcu_read_unlock(); | ||
305 | break; | 307 | break; |
306 | case YAMA_SCOPE_CAPABILITY: | 308 | case YAMA_SCOPE_CAPABILITY: |
307 | if (!ns_capable(task_user_ns(child), CAP_SYS_PTRACE)) | 309 | rcu_read_lock(); |
310 | if (!ns_capable(__task_cred(child)->user_ns, CAP_SYS_PTRACE)) | ||
308 | rc = -EPERM; | 311 | rc = -EPERM; |
312 | rcu_read_unlock(); | ||
309 | break; | 313 | break; |
310 | case YAMA_SCOPE_NO_ATTACH: | 314 | case YAMA_SCOPE_NO_ATTACH: |
311 | default: | 315 | default: |
@@ -343,8 +347,10 @@ int yama_ptrace_traceme(struct task_struct *parent) | |||
343 | /* Only disallow PTRACE_TRACEME on more aggressive settings. */ | 347 | /* Only disallow PTRACE_TRACEME on more aggressive settings. */ |
344 | switch (ptrace_scope) { | 348 | switch (ptrace_scope) { |
345 | case YAMA_SCOPE_CAPABILITY: | 349 | case YAMA_SCOPE_CAPABILITY: |
346 | if (!ns_capable(task_user_ns(parent), CAP_SYS_PTRACE)) | 350 | rcu_read_lock(); |
351 | if (!ns_capable(__task_cred(parent)->user_ns, CAP_SYS_PTRACE)) | ||
347 | rc = -EPERM; | 352 | rc = -EPERM; |
353 | rcu_read_unlock(); | ||
348 | break; | 354 | break; |
349 | case YAMA_SCOPE_NO_ATTACH: | 355 | case YAMA_SCOPE_NO_ATTACH: |
350 | rc = -EPERM; | 356 | rc = -EPERM; |