Re: [PATCH] fork: reset pointer tag of vmapped thread stack before vfree
"David Hildenbrand (Arm)" <[email protected]>
| Newsgroups | org.kvack.linux-mm,org.kernel.vger.linux-kernel,org.kernel.vger.stable |
|---|---|
| Message-ID | <[email protected]> |
On 8/6/26 14:30, sparkhuang wrote: > When a thread stack is freed via RCU callback, > thread_stack_free_rcu() calls vfree(vm_area->addr). In RCU callback > context (e.g. from rcu_nocb_cb_kthread with BH disabled, or from > RCU_SOFTIRQ), in_interrupt() returns true, so vfree() routes to > vfree_atomic(). > > vfree_atomic() uses the freed memory as llist storage by calling > llist_add((struct llist_node *)addr, &p->list), which writes 8 bytes > to the address being freed. With KASAN SW_TAGS enabled, > vm_area->addr carries a random tag assigned during allocation by > kasan_unpoison_vmalloc(). If the shadow memory covering this region > has been set to KASAN_TAG_KERNEL (0xFF) — e.g. by > kasan_unpoison_task_stack() using task->stack, which was already > reset to 0xFF by kasan_reset_tag() at allocation time — the shadow > byte (0xFF) no longer matches the pointer tag on vm_area->addr, > and the write in llist_add triggers a KASAN invalid-access report: > > ================================================================== > BUG: KASAN: invalid-access in vfree_atomic+0x90/0x150 > Write of size 8 at addr c2ffffc0a8f70000 by task rcuop/7/75 > Pointer tag: [c2], memory tag: [ff] > > CPU: 5 UID: 0 PID: 75 Comm: rcuop/7 Tainted: G S W OE > Hardware name: XiaoMi Xring_o1 UDP PHONE (DT) > Call trace: > show_stack+0x18/0x28 > __dump_stack+0x28/0x3c > dump_stack_lvl+0xac/0xf0 > print_address_description+0x7c/0x25c > print_report+0x70/0x8c > kasan_report+0xdc/0x13c > __hwasan_store8_noabort+0xe8/0xf8 > vfree_atomic+0x90/0x150 > vfree+0x220/0x298 > thread_stack_free_rcu+0x3c/0x4c > rcu_do_batch+0x308/0xaf0 > rcu_nocb_cb_kthread+0x33c/0x708 > kthread+0x364/0x3cc > ret_from_fork+0x10/0x20 > > The buggy address belongs to a 8-page vmalloc region starting at > 0xc2ffffc0a8f70000 allocated at copy_process+0x1ac/0x12e4 > > Memory state around the buggy address: > ffffffc0a8f6ff00: fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe fe > >ffffffc0a8f70000: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff > ^ > ffffffc0a8f70100: ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff ff > ================================================================== Were you able to reproduce this more than once? Does this relate to CONFIG_KASAN_STACK? Can you share the kernel config? -- Cheers, David