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 | */ |