Re: [PATCH RFC] nvme: fix NS head cdev lifetime

John Garry <[email protected]>
Newsgroups org.infradead.lists.linux-nvme
Organization Oracle Corporation
Message-ID <[email protected]>
On 08/07/2026 10:57, John Garry wrote:
> On 08/07/2026 10:27, Christoph Hellwig wrote:
> 

JFYI, this is also an issue for non-multipath, so both need to be fixed:

# ./ioctl_file /dev/ng0n1
waiting 10 seconds ....
now going to issue ioctl ....
retl=-1
# ./ioctl_file /dev/ng0n1  &
# waiting 10 seconds ....
echo "0000:00:04.0" > /sys/bus/pci/drivers/nvme/unbind
# now going to issue ioctl ....
retl=-1
[   57.145946] 
==================================================================
[   57.147504] BUG: KASAN: slab-use-after-free in cdev_put.part.0+0x3d/0x40
[   57.149479] Read of size 8 at addr ffff888105cee0b0 by task 
ioctl_file/230
[   57.150890]
[   57.151251] CPU: 1 UID: 0 PID: 230 Comm: ioctl_file Not tainted
7.2.0-rc1-00002-g54ab7087cd7c #943 PREEMPT(lazy)
[   57.151259] Hardware name: QEMU Standard PC (Q35 + ICH9, 2009),
BIOS 1.16.3-debian-1.16.3-2 04/01/2014
[   57.151263] Call Trace:
[   57.151268]  <TASK>
[   57.151272]  dump_stack_lvl+0x68/0xa0
[   57.151294]  print_report+0x10d/0x5d0
[   57.151304]  ? __virt_addr_valid+0x21d/0x3f0
[   57.151314]  ? cdev_put.part.0+0x3d/0x40
[   57.151320]  kasan_report+0x96/0xd0
[   57.151328]  ? cdev_put.part.0+0x3d/0x40
[   57.151335]  cdev_put.part.0+0x3d/0x40
[   57.151340]  __fput+0x7bc/0xa70
[   57.151350]  fput_close_sync+0xd8/0x190
[   57.151356]  ? __pfx_fput_close_sync+0x10/0x10
[   57.151365]  __x64_sys_close+0x79/0xd0
[   57.151373]  do_syscall_64+0x117/0x6b0
[   57.151381]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
[   57.151389] RIP: 0033:0x7f2f5a57b727
[   57.151395] Code: 48 89 fa 4c 89 df e8 28 ad 00 00 8b 93 08 03 00
00 59 5e 48 83 f8 fc 74 1a 5b c3 0f 1f 84 00 00 00 00 00 48 8b 44 24
10 0f 05 <5b> c3 0f 1f 80 00 0f
[   57.151400] RSP: 002b:00007ffdeb622670 EFLAGS: 00000202 ORIG_RAX:
0000000000000003
[   57.151407] RAX: ffffffffffffffda RBX: 00007f2f5a4eb780 RCX: 
00007f2f5a57b727
[   57.151411] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 
0000000000000003
[   57.151414] RBP: 00007ffdeb622700 R08: 0000000000000000 R09: 
0000000000000000
[   57.151417] R10: 0000000000000000 R11: 0000000000000202 R12: 
0000000000000000
[   57.151420] R13: 00007ffdeb622830 R14: 00007f2f5a71b000 R15: 
0000561d17af3d78
[   57.151428]  </TASK>
[   57.151431]
[   57.171652] Allocated by task 82:
[   57.171880]  kasan_save_stack+0x24/0x50
[   57.172142]  kasan_save_track+0x14/0x30
[   57.172400]  __kasan_kmalloc+0x7f/0x90
[   57.172650]  __kmalloc_cache_node_noprof+0x24b/0x5d0
[   57.172977]  nvme_alloc_ns+0xf8/0x3170
[   57.173231]  nvme_scan_ns+0x508/0x880
[   57.173477]  async_run_entry_fn+0x8c/0x350
[   57.173762]  process_scheduled_works+0xb6f/0x1a00
[   57.174073]  worker_thread+0x4ad/0xb40
[   57.174325]  kthread+0x34f/0x450
[   57.174542]  ret_from_fork+0x563/0x800
[   57.174791]  ret_from_fork_asm+0x1a/0x30
[   57.175053]
[   57.175165] Freed by task 230:
[   57.175369]  kasan_save_stack+0x24/0x50
[   57.175624]  kasan_save_track+0x14/0x30
[   57.175875]  kasan_save_free_info+0x3a/0x60
[   57.176151]  __kasan_slab_free+0x43/0x70
[   57.176412]  kfree+0x321/0x500
[   57.176616]  nvme_ns_chr_release+0x36/0x50
[   57.176885]  __fput+0x352/0xa70
[   57.177096]  fput_close_sync+0xd8/0x190
[   57.177349]  __x64_sys_close+0x79/0xd0
[   57.177596]  do_syscall_64+0x117/0x6b0
[   57.177845]  entry_SYSCALL_64_after_hwframe+0x77/0x7f
[   57.178180]
[   57.178287] The buggy address belongs to the object at ffff888105cee000
[   57.178287]  which belongs to the cache kmalloc-2k of size 2048
[   57.179071] The buggy address is located 176 bytes inside of
[   57.179071]  freed 2048-byte region [ffff888105cee000, ffff888105cee800)
[   57.179864]
[   57.179970] The buggy address belongs to the physical page:
[   57.180332] page: refcount:0 mapcount:0 mapping:0000000000000000
index:0x0 pfn:0x105ce8
[   57.180848] head: order:3 mapcount:0 entire_mapcount:0
nr_pages_mapped:0 pincount:0
[   57.181338] flags: 0x200000000000040(head|node=0|zone=2)
[   57.181699] page_type: f5(slab)
[   57.181909] raw: 0200000000000040 ffff888100042f00 dead000000000100
dead000000000122
[   57.182402] raw: 0000000000000000 0000000000080008 00000000f5000000
0000000000000000
[   57.182893] head: 0200000000000040 ffff888100042f00
dead000000000100 dead000000000122
[   57.183399] head: 0000000000000000 0000000000080008
00000000f5000000 0000000000000000
[   57.183900] head: 0200000000000003 fffffffffffffe01
00000000ffffffff 00000000ffffffff
[   57.184410] head: 0000000000000000 0000000000000000
00000000ffffffff 0000000000000000
[   57.184906] page dumped because: kasan: bad access detected
[   57.185271]
[   57.185380] Memory state around the buggy address:
[   57.185698]  ffff888105cedf80: fc fc fc fc fc fc fc fc fc fc fc fc
fc fc fc fc
[   57.186171]  ffff888105cee000: fa fb fb fb fb fb fb fb fb fb fb fb
fb fb fb fb
[   57.186631] >ffff888105cee080: fb fb fb fb fb fb fb fb fb fb fb fb
fb fb fb fb
[   57.187201]                                      ^
[   57.187512]  ffff888105cee100: fb fb fb fb fb fb fb fb fb fb fb fb
fb fb fb fb
[   57.187980]  ffff888105cee180: fb fb fb fb fb fb fb fb fb fb fb fb
fb fb fb fb
[   57.188447] 
==================================================================
[   57.189823] Disabling lock debugging due to kernel taint
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.