• KyongHo's avatar
    mm: fix faulty initialization in vmalloc_init() · dbda591d
    KyongHo authored
    The transfer of ->flags causes some of the static mapping virtual
    addresses to be prematurely freed (before the mapping is removed) because
    VM_LAZY_FREE gets "set" if tmp->flags has VM_IOREMAP set.  This might
    cause subsequent vmalloc/ioremap calls to fail because it might allocate
    one of the freed virtual address ranges that aren't unmapped.
    
    va->flags has different types of flags from tmp->flags.  If a region with
    VM_IOREMAP set is registered with vm_area_add_early(), it will be removed
    by __purge_vmap_area_lazy().
    
    Fix vmalloc_init() to correctly initialize vmap_area for the given
    vm_struct.
    
    Also initialise va->vm.  If it is not set, find_vm_area() for the early
    vm regions will always fail.
    Signed-off-by: default avatarKyongHo Cho <pullip.cho@samsung.com>
    Cc: "Olav Haugan" <ohaugan@codeaurora.org>
    Cc: <stable@vger.kernel.org>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    dbda591d
vmalloc.c 65.7 KB