diff options
Diffstat (limited to 'kernel/ptrace.c')
| -rw-r--r-- | kernel/ptrace.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 6c19e94fd0a5..e337390fce01 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
| @@ -121,7 +121,7 @@ int ptrace_check_attach(struct task_struct *child, int kill) | |||
| 121 | return ret; | 121 | return ret; |
| 122 | } | 122 | } |
| 123 | 123 | ||
| 124 | int __ptrace_may_attach(struct task_struct *task) | 124 | int __ptrace_may_access(struct task_struct *task, unsigned int mode) |
| 125 | { | 125 | { |
| 126 | /* May we inspect the given task? | 126 | /* May we inspect the given task? |
| 127 | * This check is used both for attaching with ptrace | 127 | * This check is used both for attaching with ptrace |
| @@ -148,16 +148,16 @@ int __ptrace_may_attach(struct task_struct *task) | |||
| 148 | if (!dumpable && !capable(CAP_SYS_PTRACE)) | 148 | if (!dumpable && !capable(CAP_SYS_PTRACE)) |
| 149 | return -EPERM; | 149 | return -EPERM; |
| 150 | 150 | ||
| 151 | return security_ptrace(current, task); | 151 | return security_ptrace(current, task, mode); |
| 152 | } | 152 | } |
| 153 | 153 | ||
| 154 | int ptrace_may_attach(struct task_struct *task) | 154 | bool ptrace_may_access(struct task_struct *task, unsigned int mode) |
| 155 | { | 155 | { |
| 156 | int err; | 156 | int err; |
| 157 | task_lock(task); | 157 | task_lock(task); |
| 158 | err = __ptrace_may_attach(task); | 158 | err = __ptrace_may_access(task, mode); |
| 159 | task_unlock(task); | 159 | task_unlock(task); |
| 160 | return !err; | 160 | return (!err ? true : false); |
| 161 | } | 161 | } |
| 162 | 162 | ||
| 163 | int ptrace_attach(struct task_struct *task) | 163 | int ptrace_attach(struct task_struct *task) |
| @@ -195,7 +195,7 @@ repeat: | |||
| 195 | /* the same process cannot be attached many times */ | 195 | /* the same process cannot be attached many times */ |
| 196 | if (task->ptrace & PT_PTRACED) | 196 | if (task->ptrace & PT_PTRACED) |
| 197 | goto bad; | 197 | goto bad; |
| 198 | retval = __ptrace_may_attach(task); | 198 | retval = __ptrace_may_access(task, PTRACE_MODE_ATTACH); |
| 199 | if (retval) | 199 | if (retval) |
| 200 | goto bad; | 200 | goto bad; |
| 201 | 201 | ||
| @@ -494,7 +494,8 @@ int ptrace_traceme(void) | |||
| 494 | */ | 494 | */ |
| 495 | task_lock(current); | 495 | task_lock(current); |
| 496 | if (!(current->ptrace & PT_PTRACED)) { | 496 | if (!(current->ptrace & PT_PTRACED)) { |
| 497 | ret = security_ptrace(current->parent, current); | 497 | ret = security_ptrace(current->parent, current, |
| 498 | PTRACE_MODE_ATTACH); | ||
| 498 | /* | 499 | /* |
| 499 | * Set the ptrace bit in the process ptrace flags. | 500 | * Set the ptrace bit in the process ptrace flags. |
| 500 | */ | 501 | */ |
