diff options
Diffstat (limited to 'kernel/ptrace.c')
| -rw-r--r-- | kernel/ptrace.c | 21 |
1 files changed, 7 insertions, 14 deletions
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 0692ab5a0d67..f6d8b8cb5e34 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
| @@ -25,16 +25,6 @@ | |||
| 25 | 25 | ||
| 26 | 26 | ||
| 27 | /* | 27 | /* |
| 28 | * Initialize a new task whose father had been ptraced. | ||
| 29 | * | ||
| 30 | * Called from copy_process(). | ||
| 31 | */ | ||
| 32 | void ptrace_fork(struct task_struct *child, unsigned long clone_flags) | ||
| 33 | { | ||
| 34 | arch_ptrace_fork(child, clone_flags); | ||
| 35 | } | ||
| 36 | |||
| 37 | /* | ||
| 38 | * ptrace a task: make the debugger its new parent and | 28 | * ptrace a task: make the debugger its new parent and |
| 39 | * move it to the ptrace list. | 29 | * move it to the ptrace list. |
| 40 | * | 30 | * |
| @@ -185,10 +175,11 @@ int ptrace_attach(struct task_struct *task) | |||
| 185 | if (same_thread_group(task, current)) | 175 | if (same_thread_group(task, current)) |
| 186 | goto out; | 176 | goto out; |
| 187 | 177 | ||
| 188 | /* Protect exec's credential calculations against our interference; | 178 | /* Protect the target's credential calculations against our |
| 189 | * SUID, SGID and LSM creds get determined differently under ptrace. | 179 | * interference; SUID, SGID and LSM creds get determined differently |
| 180 | * under ptrace. | ||
| 190 | */ | 181 | */ |
| 191 | retval = mutex_lock_interruptible(&task->cred_exec_mutex); | 182 | retval = mutex_lock_interruptible(&task->cred_guard_mutex); |
| 192 | if (retval < 0) | 183 | if (retval < 0) |
| 193 | goto out; | 184 | goto out; |
| 194 | 185 | ||
| @@ -232,7 +223,7 @@ repeat: | |||
| 232 | bad: | 223 | bad: |
| 233 | write_unlock_irqrestore(&tasklist_lock, flags); | 224 | write_unlock_irqrestore(&tasklist_lock, flags); |
| 234 | task_unlock(task); | 225 | task_unlock(task); |
| 235 | mutex_unlock(&task->cred_exec_mutex); | 226 | mutex_unlock(&task->cred_guard_mutex); |
| 236 | out: | 227 | out: |
| 237 | return retval; | 228 | return retval; |
| 238 | } | 229 | } |
| @@ -304,6 +295,8 @@ int ptrace_detach(struct task_struct *child, unsigned int data) | |||
| 304 | if (child->ptrace) { | 295 | if (child->ptrace) { |
| 305 | child->exit_code = data; | 296 | child->exit_code = data; |
| 306 | dead = __ptrace_detach(current, child); | 297 | dead = __ptrace_detach(current, child); |
| 298 | if (!child->exit_state) | ||
| 299 | wake_up_process(child); | ||
| 307 | } | 300 | } |
| 308 | write_unlock_irq(&tasklist_lock); | 301 | write_unlock_irq(&tasklist_lock); |
| 309 | 302 | ||
