memblock: ensure there is no overflow in memblock_overlaps_region()
[platform/kernel/linux-rpi.git] / mm / vmalloc.c
index 6ae491a..fff03a3 100644 (file)
@@ -2256,7 +2256,7 @@ static void __vunmap(const void *addr, int deallocate_pages)
        debug_check_no_locks_freed(area->addr, get_vm_area_size(area));
        debug_check_no_obj_freed(area->addr, get_vm_area_size(area));
 
-       kasan_poison_vmalloc(area->addr, area->size);
+       kasan_poison_vmalloc(area->addr, get_vm_area_size(area));
 
        vm_remove_mappings(area, deallocate_pages);
 
@@ -2405,8 +2405,10 @@ void *vmap(struct page **pages, unsigned int count,
                return NULL;
        }
 
-       if (flags & VM_MAP_PUT_PAGES)
+       if (flags & VM_MAP_PUT_PAGES) {
                area->pages = pages;
+               area->nr_pages = count;
+       }
        return area->addr;
 }
 EXPORT_SYMBOL(vmap);
@@ -3448,11 +3450,11 @@ static void *s_next(struct seq_file *m, void *p, loff_t *pos)
 }
 
 static void s_stop(struct seq_file *m, void *p)
-       __releases(&vmap_purge_lock)
        __releases(&vmap_area_lock)
+       __releases(&vmap_purge_lock)
 {
-       mutex_unlock(&vmap_purge_lock);
        spin_unlock(&vmap_area_lock);
+       mutex_unlock(&vmap_purge_lock);
 }
 
 static void show_numa_info(struct seq_file *m, struct vm_struct *v)