Commit 9d5b327bf198d2720666de958dcc2ae219d86952

Authored by Oleg Nesterov
Committed by Linus Torvalds
1 parent c5f1cc8c18

coredump: make mm->core_state visible to ->core_dump()

Move the "struct core_state core_state" from coredump_wait() to
do_coredump(), this makes mm->core_state visible to binfmt->core_dump().

Signed-off-by: Oleg Nesterov <oleg@tv-sign.ru>
Acked-by: Roland McGrath <roland@redhat.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>

Showing 1 changed file with 7 additions and 7 deletions Side-by-side Diff

... ... @@ -1595,17 +1595,16 @@
1595 1595 return nr;
1596 1596 }
1597 1597  
1598   -static int coredump_wait(int exit_code)
  1598 +static int coredump_wait(int exit_code, struct core_state *core_state)
1599 1599 {
1600 1600 struct task_struct *tsk = current;
1601 1601 struct mm_struct *mm = tsk->mm;
1602   - struct core_state core_state;
1603 1602 struct completion *vfork_done;
1604 1603 int core_waiters;
1605 1604  
1606 1605 init_completion(&mm->core_done);
1607   - init_completion(&core_state.startup);
1608   - core_waiters = zap_threads(tsk, mm, &core_state, exit_code);
  1606 + init_completion(&core_state->startup);
  1607 + core_waiters = zap_threads(tsk, mm, core_state, exit_code);
1609 1608 up_write(&mm->mmap_sem);
1610 1609  
1611 1610 if (unlikely(core_waiters < 0))
... ... @@ -1622,8 +1621,7 @@
1622 1621 }
1623 1622  
1624 1623 if (core_waiters)
1625   - wait_for_completion(&core_state.startup);
1626   - mm->core_state = NULL;
  1624 + wait_for_completion(&core_state->startup);
1627 1625 fail:
1628 1626 return core_waiters;
1629 1627 }
... ... @@ -1679,6 +1677,7 @@
1679 1677  
1680 1678 int do_coredump(long signr, int exit_code, struct pt_regs * regs)
1681 1679 {
  1680 + struct core_state core_state;
1682 1681 char corename[CORENAME_MAX_SIZE + 1];
1683 1682 struct mm_struct *mm = current->mm;
1684 1683 struct linux_binfmt * binfmt;
... ... @@ -1717,7 +1716,7 @@
1717 1716 current->fsuid = 0; /* Dump root private */
1718 1717 }
1719 1718  
1720   - retval = coredump_wait(exit_code);
  1719 + retval = coredump_wait(exit_code, &core_state);
1721 1720 if (retval < 0)
1722 1721 goto fail;
1723 1722  
... ... @@ -1812,6 +1811,7 @@
1812 1811  
1813 1812 current->fsuid = fsuid;
1814 1813 complete_all(&mm->core_done);
  1814 + mm->core_state = NULL;
1815 1815 fail:
1816 1816 return retval;
1817 1817 }