mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-29 19:21:31 -04:00
mm: vmalloc: pass proper vm_start into debugobjects
Client can call vunmap with some intermediate 'addr' which may not be the start of the VM area. Entire unmap code works with vm->vm_start which is proper but debug object API is called with 'addr'. This could be a problem within debug objects. Pass proper start address into debug object API. [[email protected]: fix warning] Link: http://lkml.kernel.org/r/[email protected] Signed-off-by: Chintan Pandya <[email protected]> Reviewed-by: Andrew Morton <[email protected]> Cc: Ard Biesheuvel <[email protected]> Cc: Byungchul Park <[email protected]> Cc: Catalin Marinas <[email protected]> Cc: Florian Fainelli <[email protected]> Cc: Johannes Weiner <[email protected]> Cc: Laura Abbott <[email protected]> Cc: Vlastimil Babka <[email protected]> Cc: Wei Yang <[email protected]> Cc: Yisheng Xie <[email protected]> Signed-off-by: Andrew Morton <[email protected]> Signed-off-by: Linus Torvalds <[email protected]>
This commit is contained in:
parent
f3c01d2f3a
commit
05e3ff9505
1 changed files with 5 additions and 4 deletions
|
|
@ -1128,15 +1128,16 @@ void vm_unmap_ram(const void *mem, unsigned int count)
|
|||
BUG_ON(addr > VMALLOC_END);
|
||||
BUG_ON(!PAGE_ALIGNED(addr));
|
||||
|
||||
debug_check_no_locks_freed(mem, size);
|
||||
|
||||
if (likely(count <= VMAP_MAX_ALLOC)) {
|
||||
debug_check_no_locks_freed(mem, size);
|
||||
vb_free(mem, size);
|
||||
return;
|
||||
}
|
||||
|
||||
va = find_vmap_area(addr);
|
||||
BUG_ON(!va);
|
||||
debug_check_no_locks_freed((void *)va->va_start,
|
||||
(va->va_end - va->va_start));
|
||||
free_unmap_vmap_area(va);
|
||||
}
|
||||
EXPORT_SYMBOL(vm_unmap_ram);
|
||||
|
|
@ -1511,8 +1512,8 @@ static void __vunmap(const void *addr, int deallocate_pages)
|
|||
return;
|
||||
}
|
||||
|
||||
debug_check_no_locks_freed(addr, get_vm_area_size(area));
|
||||
debug_check_no_obj_freed(addr, get_vm_area_size(area));
|
||||
debug_check_no_locks_freed(area->addr, get_vm_area_size(area));
|
||||
debug_check_no_obj_freed(area->addr, get_vm_area_size(area));
|
||||
|
||||
remove_vm_area(addr);
|
||||
if (deallocate_pages) {
|
||||
|
|
|
|||
Loading…
Reference in a new issue