Re: [PATCH v11 1/4] kasan: support backing vmalloc space with real shadow memory
From: Andrey Ryabinin <hidden>
Date: 2019-11-19 09:54:48
Also in:
linux-mm, lkml
On 11/18/19 6:29 AM, Daniel Axtens wrote:
Qian Cai [off-list ref] writes:quoted
On Thu, 2019-10-31 at 20:39 +1100, Daniel Axtens wrote:quoted
/* * 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.
quoted hunk ↗ jump to hunk
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;