On 11/18/19 6:29 AM, Daniel Axtens wrote: > Qian Cai <cai@xxxxxx> writes: > >> On Thu, 2019-10-31 at 20:39 +1100, Daniel Axtens wrote: >>> /* >>> * In this function, newly allocated vm_struct has VM_UNINITIALIZED >>> * flag. It means that vm_struct is not fully initialized. >>> @@ -3377,6 +3411,9 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, >>> >>> setup_vmalloc_vm_locked(vms[area], vas[area], VM_ALLOC, >>> pcpu_get_vm_areas); >>> + >>> + /* assume success here */ >>> + kasan_populate_vmalloc(sizes[area], vms[area]); >>> } >>> spin_unlock(&vmap_area_lock); >> >> Here it is all wrong. GFP_KERNEL with in_atomic(). > > I think this fix will work, I will do a v12 with it included. You can send just the fix. Andrew will fold it into the original patch before sending it to Linus. > diff --git a/mm/vmalloc.c b/mm/vmalloc.c > index a4b950a02d0b..bf030516258c 100644 > --- a/mm/vmalloc.c > +++ b/mm/vmalloc.c > @@ -3417,11 +3417,14 @@ struct vm_struct **pcpu_get_vm_areas(const unsigned long *offsets, > > setup_vmalloc_vm_locked(vms[area], vas[area], VM_ALLOC, > pcpu_get_vm_areas); > + } > + spin_unlock(&vmap_area_lock); > > + /* populate the shadow space outside of the lock */ > + for (area = 0; area < nr_vms; area++) { > /* assume success here */ > kasan_populate_vmalloc(sizes[area], vms[area]); > } > - spin_unlock(&vmap_area_lock); > > kfree(vas); > return vms; > >