aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/fork.c
diff options
context:
space:
mode:
authorOleg Nesterov <oleg@redhat.com>2013-10-16 13:39:37 -0400
committerOleg Nesterov <oleg@redhat.com>2013-10-29 13:02:55 -0400
commit3ab679661721b1ec2aaad99a801870ed59ab1110 (patch)
treef651a01eb98dd5454d433da9ae35579242a2cb36 /kernel/fork.c
parentaa59c53fd4599c91ccf9629af0c2777b89929076 (diff)
uprobes: Teach uprobe_copy_process() to handle CLONE_VFORK
uprobe_copy_process() does nothing if the child shares ->mm with the forking process, but there is a special case: CLONE_VFORK. In this case it would be more correct to do dup_utask() but avoid dup_xol(). This is not that important, the child should not unwind its stack too much, this can corrupt the parent's stack, but at least we need this to allow to ret-probe __vfork() itself. Note: in theory, it would be better to check task_pt_regs(p)->sp instead of CLONE_VFORK, we need to dup_utask() if and only if the child can return from the function called by the parent. But this needs the arch-dependant helper, and I think that nobody actually does clone(same_stack, CLONE_VM). Reported-by: Martin Cermak <mcermak@redhat.com> Reported-by: David Smith <dsmith@redhat.com> Signed-off-by: Oleg Nesterov <oleg@redhat.com>
Diffstat (limited to 'kernel/fork.c')
-rw-r--r--kernel/fork.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/kernel/fork.c b/kernel/fork.c
index d3603b81246b..8531609b6a82 100644
--- a/kernel/fork.c
+++ b/kernel/fork.c
@@ -1489,7 +1489,7 @@ static struct task_struct *copy_process(unsigned long clone_flags,
1489 perf_event_fork(p); 1489 perf_event_fork(p);
1490 1490
1491 trace_task_newtask(p, clone_flags); 1491 trace_task_newtask(p, clone_flags);
1492 uprobe_copy_process(p); 1492 uprobe_copy_process(p, clone_flags);
1493 1493
1494 return p; 1494 return p;
1495 1495