Skip to contentSkip to conversation

Again: Fix multithread coredump deadlock (patch Manfred Spraul)

DISCUSSION Kirill Korotaev 2 participants 2 messages Jul 3, 2003

lore
Share & tools
lore
#0 lore raw

Hi!

There was a patch some time ago included in linux-2.4.17-pre6 which fixed mmap semaphore deadlock in do_coredump (double down_read() on mmap_sem). This fix introduces down_write() on mmap_sem and uses get_user_pages() function to avoid do_page_fault().
The question is why down_write() is used in elf_core_dump() (instead of down_read())?

Kirill

#1 lore raw
Quoted 7 lines · Kirill Korotaev

Hi!

There was a patch some time ago included in linux-2.4.17-pre6 which fixed mmap semaphore deadlock in do_coredump (double down_read() on mmap_sem). This fix introduces down_write() on mmap_sem and uses get_user_pages() function to avoid do_page_fault().
The question is why down_write() is used in elf_core_dump() (instead of down_read())?

down_write is required to prevent expand_stack() from growing the stack - expand_stack is called by the page fault handler under down_read(&->mmap_sem) and changes vma->vm_start. A change of vm_start between writing the program headers and the actual segment dump would corrupt the coredump.

--
Manfred