diff options
Diffstat (limited to 'kernel/ptrace.c')
-rw-r--r-- | kernel/ptrace.c | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/kernel/ptrace.c b/kernel/ptrace.c index 6af9cdd558b7..74a3d693c196 100644 --- a/kernel/ptrace.c +++ b/kernel/ptrace.c | |||
@@ -594,6 +594,32 @@ int ptrace_request(struct task_struct *child, long request, | |||
594 | ret = ptrace_detach(child, data); | 594 | ret = ptrace_detach(child, data); |
595 | break; | 595 | break; |
596 | 596 | ||
597 | #ifdef CONFIG_BINFMT_ELF_FDPIC | ||
598 | case PTRACE_GETFDPIC: { | ||
599 | struct mm_struct *mm = get_task_mm(child); | ||
600 | unsigned long tmp = 0; | ||
601 | |||
602 | ret = -ESRCH; | ||
603 | if (!mm) | ||
604 | break; | ||
605 | |||
606 | switch (addr) { | ||
607 | case PTRACE_GETFDPIC_EXEC: | ||
608 | tmp = mm->context.exec_fdpic_loadmap; | ||
609 | break; | ||
610 | case PTRACE_GETFDPIC_INTERP: | ||
611 | tmp = mm->context.interp_fdpic_loadmap; | ||
612 | break; | ||
613 | default: | ||
614 | break; | ||
615 | } | ||
616 | mmput(mm); | ||
617 | |||
618 | ret = put_user(tmp, (unsigned long __user *) data); | ||
619 | break; | ||
620 | } | ||
621 | #endif | ||
622 | |||
597 | #ifdef PTRACE_SINGLESTEP | 623 | #ifdef PTRACE_SINGLESTEP |
598 | case PTRACE_SINGLESTEP: | 624 | case PTRACE_SINGLESTEP: |
599 | #endif | 625 | #endif |