anolis: mm: async fork: Do not clean up async fork for CLONE_VM
ANBZ: #19053 In following scenario, Parent: fork() dup_mmap() async fork bind(p->mm->async_fork_mm = new mm) return Child A: fork() async fork copying rest(mm->async_fork_mm = p->mm) copy_process() copy_mm() clone_flags & CLONE_VM skip dup_mmap() failed, goto cleanup if (p->mm && p->mm->async_fork_mm) async fork copy done(mm->async_fork_mm = NULL, p->mm->async_fork_mm = NULL) async fork cleanup(use p->mm->async_fork_mm) null pointer panic Just skip async fork clean up if fork has CLONE_VM flag Signed-off-by: Zelin Deng <zelin.deng@linux.alibaba.com> Reviewed-by: Cruz Zhao <CruzZhao@linux.alibaba.com> Reviewed-by: Baolin Wang <baolin.wang@linux.alibaba.com> Reviewed-by: Cruz Zhao <cruzzhao@linux.alibaba.com> Link: https://gitee.com/anolis/cloud-kernel/pulls/4695
This commit is contained in:
parent
8aa98230a8
commit
bc3571ad32
|
@ -2435,10 +2435,9 @@ bad_fork_cleanup_namespaces:
|
|||
bad_fork_cleanup_mm:
|
||||
if (p->mm) {
|
||||
#ifdef CONFIG_ASYNC_FORK
|
||||
if (p->mm->async_fork_mm) {
|
||||
WARN_ON_ONCE(clone_flags & CLONE_VM);
|
||||
if (p->mm->async_fork_mm &&
|
||||
!WARN_ON_ONCE(clone_flags & CLONE_VM))
|
||||
async_fork_cpr_done(p->mm, true, false);
|
||||
}
|
||||
#endif
|
||||
mm_clear_owner(p->mm, p);
|
||||
mmput(p->mm);
|
||||
|
|
Loading…
Reference in New Issue