mirror of
https://github.com/FEX-Emu/linux.git
synced 2024-12-14 21:01:29 +00:00
x86: compat_ptrace_request
This adds a compat_ptrace_request that is the analogue of ptrace_request for the things that 32-on-64 ptrace implementations can share in common. So far there are just a couple of requests handled generically. Signed-off-by: Roland McGrath <roland@redhat.com> Signed-off-by: Ingo Molnar <mingo@elte.hu> Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
This commit is contained in:
parent
16c3e389e7
commit
032d82d906
@ -243,6 +243,10 @@ asmlinkage long compat_sys_migrate_pages(compat_pid_t pid,
|
|||||||
compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes,
|
compat_ulong_t maxnode, const compat_ulong_t __user *old_nodes,
|
||||||
const compat_ulong_t __user *new_nodes);
|
const compat_ulong_t __user *new_nodes);
|
||||||
|
|
||||||
|
extern int compat_ptrace_request(struct task_struct *child,
|
||||||
|
compat_long_t request,
|
||||||
|
compat_ulong_t addr, compat_ulong_t data);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* epoll (fs/eventpoll.c) compat bits follow ...
|
* epoll (fs/eventpoll.c) compat bits follow ...
|
||||||
*/
|
*/
|
||||||
|
@ -607,3 +607,41 @@ int generic_ptrace_pokedata(struct task_struct *tsk, long addr, long data)
|
|||||||
copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
|
copied = access_process_vm(tsk, addr, &data, sizeof(data), 1);
|
||||||
return (copied == sizeof(data)) ? 0 : -EIO;
|
return (copied == sizeof(data)) ? 0 : -EIO;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef CONFIG_COMPAT
|
||||||
|
#include <linux/compat.h>
|
||||||
|
|
||||||
|
int compat_ptrace_request(struct task_struct *child, compat_long_t request,
|
||||||
|
compat_ulong_t addr, compat_ulong_t data)
|
||||||
|
{
|
||||||
|
compat_ulong_t __user *datap = compat_ptr(data);
|
||||||
|
compat_ulong_t word;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
switch (request) {
|
||||||
|
case PTRACE_PEEKTEXT:
|
||||||
|
case PTRACE_PEEKDATA:
|
||||||
|
ret = access_process_vm(child, addr, &word, sizeof(word), 0);
|
||||||
|
if (ret != sizeof(word))
|
||||||
|
ret = -EIO;
|
||||||
|
else
|
||||||
|
ret = put_user(word, datap);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PTRACE_POKETEXT:
|
||||||
|
case PTRACE_POKEDATA:
|
||||||
|
ret = access_process_vm(child, addr, &data, sizeof(data), 1);
|
||||||
|
ret = (ret != sizeof(data) ? -EIO : 0);
|
||||||
|
break;
|
||||||
|
|
||||||
|
case PTRACE_GETEVENTMSG:
|
||||||
|
ret = put_user((compat_ulong_t) child->ptrace_message, datap);
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
ret = ptrace_request(child, request, addr, data);
|
||||||
|
}
|
||||||
|
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
#endif /* CONFIG_COMPAT */
|
||||||
|
Loading…
Reference in New Issue
Block a user