procfs: PTRACE_O_TRACESYSGOOD (fake)

This commit is contained in:
Naoki Hamada
2014-10-10 15:43:02 +09:00
committed by Tomoki Shirasawa
parent fef946e5ff
commit f0f31e19fb
2 changed files with 41 additions and 3 deletions

View File

@ -2440,6 +2440,37 @@ static long ptrace_getregs(int pid, long data)
return rc;
}
static int ptrace_setoptions(int pid, int flags)
{
int ret;
struct process *child;
ihk_spinlock_t *savelock;
unsigned long irqstate;
/* Only supported options are enabled.
* PTRACE_O_TRACESYSGOOD is pretended to be supported for the time being.
*/
if (flags & ~PTRACE_O_TRACESYSGOOD) {
kprintf("ptrace_setoptions: not supported flag %x\n", flags);
ret = -EINVAL;
goto out;
}
child = findthread_and_lock(pid, -1, &savelock, &irqstate);
if (!child || !child->ftn || !(child->ftn->ptrace | PT_TRACED)) {
ret = -ESRCH;
goto unlockout;
}
child->ftn->ptrace |= flags;
ret = 0;
unlockout:
ihk_mc_spinlock_unlock(savelock, irqstate);
out:
return ret;
}
SYSCALL_DECLARE(ptrace)
{
const long request = (long)ihk_mc_syscall_arg0(ctx);
@ -2470,6 +2501,10 @@ SYSCALL_DECLARE(ptrace)
error = ptrace_pokeuser(pid, addr, data);
dkprintf("PTRACE_POKEUSER: addr=%p data=%p return=%p\n", addr, data, error);
break;
case PTRACE_SETOPTIONS:
error = ptrace_setoptions(pid, data);
dkprintf("PTRACE_SETOPTIONS: flags=%d return=%p\n", data, error);
break;
default:
dkprintf("ptrace: unimplemented ptrace called.\n");
break;