aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJerome Marchand <jmarchan@redhat.com>2015-11-20 15:57:02 -0800
committerAlex Shi <alex.shi@linaro.org>2016-04-27 09:48:42 +0800
commit7b44c3df0b89d05c80e15eb0522a21d033d1314f (patch)
tree2a73006fc35b75d5278b54b662352f8a770c50b0
parentdbdb6d27cf364cee9db9680e7f63a8ce54a1076d (diff)
mm: vmalloc: don't remove inexistent guard hole in remove_vm_area()
Commit 71394fe50146 ("mm: vmalloc: add flag preventing guard hole allocation") missed a spot. Currently remove_vm_area() decreases vm->size to "remove" the guard hole page, even when it isn't present. All but one users just free the vm_struct rigth away and never access vm->size anyway. Don't touch the size in remove_vm_area() and have __vunmap() use the proper get_vm_area_size() helper. Signed-off-by: Jerome Marchand <jmarchan@redhat.com> Acked-by: Andrey Ryabinin <aryabinin@virtuozzo.com> Acked-by: David Rientjes <rientjes@google.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org> (cherry picked from commit 7511c3ede752e6dd67df20779b4e11effe102637) Signed-off-by: Alex Shi <alex.shi@linaro.org>
-rw-r--r--mm/vmalloc.c5
1 files changed, 2 insertions, 3 deletions
diff --git a/mm/vmalloc.c b/mm/vmalloc.c
index 4d7725fe42ed..3f814de8eb8d 100644
--- a/mm/vmalloc.c
+++ b/mm/vmalloc.c
@@ -1421,7 +1421,6 @@ struct vm_struct *remove_vm_area(const void *addr)
vmap_debug_free_range(va->va_start, va->va_end);
kasan_free_shadow(vm);
free_unmap_vmap_area(va);
- vm->size -= PAGE_SIZE;
return vm;
}
@@ -1446,8 +1445,8 @@ static void __vunmap(const void *addr, int deallocate_pages)
return;
}
- debug_check_no_locks_freed(addr, area->size);
- debug_check_no_obj_freed(addr, area->size);
+ debug_check_no_locks_freed(addr, get_vm_area_size(area));
+ debug_check_no_obj_freed(addr, get_vm_area_size(area));
if (deallocate_pages) {
int i;