• Kirill A. Shutemov's avatar
    linux-user: Rewrite mmap_find_vma() to work fine on 64-bit hosts with 32-bit targets · fe3b4152
    Kirill A. Shutemov authored
    qemu's page table can be incomple if /proc/self/maps is unavailable or
    host allocating a memory with mmap(), so we can't use it to find free
    memory area.
    
    New version mmap_find_vma() uses mmap() without MAP_FIXED to find free
    memory.
    
    Tested-by: Martin Mohring <martin.mohring@opensuse.org> :
    
    quite some time ago this patch had been sent by Kirill to the QEMU ml.
    At that time, the patch was rejected. Now we found out why the current
    user mode memory allocator sometimes fails:
    
    - Kernel Bug  linux/fs/proc/task_mmu.c (fixed after 2.6.27)
    http://bugzilla.kernel.org/attachment.cgi?id=17219
    - use of proc file system to find memory mappings => bad idea
    
    So I please apply the attached patch from Kirill to qemu to fix this
    longstanding bug, because it causes all older linux distros (using
    kernel 2.6.26 or older) to fail the QEMU memory allocator in user mode.
    Signed-off-by: default avatarKirill A. Shutemov <kirill@shutemov.name>
    Signed-off-by: default avatarRiku Voipio <riku.voipio@iki.fi>
    fe3b4152
mmap.c 19.4 KB