projects
/
firefly-linux-kernel-4.4.55.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
signals: move cred_guard_mutex from task_struct to signal_struct
[firefly-linux-kernel-4.4.55.git]
/
kernel
/
ptrace.c
diff --git
a/kernel/ptrace.c
b/kernel/ptrace.c
index f34d798ef4a25831b98090a7b85fa6d3b93d0de2..99bbaa3e5b0d4332a0d9ff7e1f057dbbecc10a50 100644
(file)
--- a/
kernel/ptrace.c
+++ b/
kernel/ptrace.c
@@
-181,7
+181,7
@@
int ptrace_attach(struct task_struct *task)
* under ptrace.
*/
retval = -ERESTARTNOINTR;
* under ptrace.
*/
retval = -ERESTARTNOINTR;
- if (mutex_lock_interruptible(&task->cred_guard_mutex))
+ if (mutex_lock_interruptible(&task->
signal->
cred_guard_mutex))
goto out;
task_lock(task);
goto out;
task_lock(task);
@@
-208,7
+208,7
@@
int ptrace_attach(struct task_struct *task)
unlock_tasklist:
write_unlock_irq(&tasklist_lock);
unlock_creds:
unlock_tasklist:
write_unlock_irq(&tasklist_lock);
unlock_creds:
- mutex_unlock(&task->cred_guard_mutex);
+ mutex_unlock(&task->
signal->
cred_guard_mutex);
out:
return retval;
}
out:
return retval;
}
@@
-329,6
+329,8
@@
int ptrace_detach(struct task_struct *child, unsigned int data)
* and reacquire the lock.
*/
void exit_ptrace(struct task_struct *tracer)
* and reacquire the lock.
*/
void exit_ptrace(struct task_struct *tracer)
+ __releases(&tasklist_lock)
+ __acquires(&tasklist_lock)
{
struct task_struct *p, *n;
LIST_HEAD(ptrace_dead);
{
struct task_struct *p, *n;
LIST_HEAD(ptrace_dead);
@@
-402,7
+404,7
@@
int ptrace_writedata(struct task_struct *tsk, char __user *src, unsigned long ds
return copied;
}
return copied;
}
-static int ptrace_setoptions(struct task_struct *child, long data)
+static int ptrace_setoptions(struct task_struct *child,
unsigned
long data)
{
child->ptrace &= ~PT_TRACE_MASK;
{
child->ptrace &= ~PT_TRACE_MASK;
@@
-481,7
+483,8
@@
static int ptrace_setsiginfo(struct task_struct *child, const siginfo_t *info)
#define is_sysemu_singlestep(request) 0
#endif
#define is_sysemu_singlestep(request) 0
#endif
-static int ptrace_resume(struct task_struct *child, long request, long data)
+static int ptrace_resume(struct task_struct *child, long request,
+ unsigned long data)
{
if (!valid_signal(data))
return -EIO;
{
if (!valid_signal(data))
return -EIO;
@@
-558,10
+561,12
@@
static int ptrace_regset(struct task_struct *task, int req, unsigned int type,
#endif
int ptrace_request(struct task_struct *child, long request,
#endif
int ptrace_request(struct task_struct *child, long request,
-
long addr,
long data)
+
unsigned long addr, unsigned
long data)
{
int ret = -EIO;
siginfo_t siginfo;
{
int ret = -EIO;
siginfo_t siginfo;
+ void __user *datavp = (void __user *) data;
+ unsigned long __user *datalp = datavp;
switch (request) {
case PTRACE_PEEKTEXT:
switch (request) {
case PTRACE_PEEKTEXT:
@@
-578,19
+583,17
@@
int ptrace_request(struct task_struct *child, long request,
ret = ptrace_setoptions(child, data);
break;
case PTRACE_GETEVENTMSG:
ret = ptrace_setoptions(child, data);
break;
case PTRACE_GETEVENTMSG:
- ret = put_user(child->ptrace_message,
(unsigned long __user *) data
);
+ ret = put_user(child->ptrace_message,
datalp
);
break;
case PTRACE_GETSIGINFO:
ret = ptrace_getsiginfo(child, &siginfo);
if (!ret)
break;
case PTRACE_GETSIGINFO:
ret = ptrace_getsiginfo(child, &siginfo);
if (!ret)
- ret = copy_siginfo_to_user((siginfo_t __user *) data,
- &siginfo);
+ ret = copy_siginfo_to_user(datavp, &siginfo);
break;
case PTRACE_SETSIGINFO:
break;
case PTRACE_SETSIGINFO:
- if (copy_from_user(&siginfo, (siginfo_t __user *) data,
- sizeof siginfo))
+ if (copy_from_user(&siginfo, datavp, sizeof siginfo))
ret = -EFAULT;
else
ret = ptrace_setsiginfo(child, &siginfo);
ret = -EFAULT;
else
ret = ptrace_setsiginfo(child, &siginfo);
@@
-621,7
+624,7
@@
int ptrace_request(struct task_struct *child, long request,
}
mmput(mm);
}
mmput(mm);
- ret = put_user(tmp,
(unsigned long __user *) data
);
+ ret = put_user(tmp,
datalp
);
break;
}
#endif
break;
}
#endif
@@
-650,7
+653,7
@@
int ptrace_request(struct task_struct *child, long request,
case PTRACE_SETREGSET:
{
struct iovec kiov;
case PTRACE_SETREGSET:
{
struct iovec kiov;
- struct iovec __user *uiov =
(struct iovec __user *) data
;
+ struct iovec __user *uiov =
datavp
;
if (!access_ok(VERIFY_WRITE, uiov, sizeof(*uiov)))
return -EFAULT;
if (!access_ok(VERIFY_WRITE, uiov, sizeof(*uiov)))
return -EFAULT;
@@
-691,7
+694,8
@@
static struct task_struct *ptrace_get_task_struct(pid_t pid)
#define arch_ptrace_attach(child) do { } while (0)
#endif
#define arch_ptrace_attach(child) do { } while (0)
#endif
-SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)
+SYSCALL_DEFINE4(ptrace, long, request, long, pid, unsigned long, addr,
+ unsigned long, data)
{
struct task_struct *child;
long ret;
{
struct task_struct *child;
long ret;
@@
-732,7
+736,8
@@
SYSCALL_DEFINE4(ptrace, long, request, long, pid, long, addr, long, data)
return ret;
}
return ret;
}
-int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
+int generic_ptrace_peekdata(struct task_struct *tsk, unsigned long addr,
+ unsigned long data)
{
unsigned long tmp;
int copied;
{
unsigned long tmp;
int copied;
@@
-743,7
+748,8
@@
int generic_ptrace_peekdata(struct task_struct *tsk, long addr, long data)
return put_user(tmp, (unsigned long __user *)data);
}
return put_user(tmp, (unsigned long __user *)data);
}
-int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data)
+int generic_ptrace_pokedata(struct task_struct *tsk, unsigned long addr,
+ unsigned long data)
{
int copied;
{
int copied;