Re: ksmbd: BUG_ON in locks_release_private() - file_lock destroyed while VFS blocked requests are still attached

ChenXiaoSong <[email protected]>
Newsgroups org.kernel.vger.linux-cifs
Message-ID <[email protected]>
On 8/13/26 00:09, Blue bird wrote:
> 
> Call trace
> ----------
> 
>    kernel BUG at fs/locks.c:312!
>    Internal error: Oops - BUG: 00000000f2000800 [#1]  SMP
>    CPU: 4 UID: 0 PID: 1509 Comm: ksmbd:::ffff:12 Not tainted 7.2.0-rc7- 
> gf5bbbfec59b4
>    pc : locks_release_private+0x214/0x2c8
>    Call trace:
>     locks_release_private+0x214/0x2c8 (P)
>     locks_free_lock+0x20/0x40
>     __ksmbd_close_fd+0x67c/0xc28          [ksmbd]
>     __close_file_table_ids+0x430/0x780    [ksmbd]
>     ksmbd_destroy_file_table+0x5c/0xf4    [ksmbd]
>     ksmbd_session_destroy+0xbc/0x38c      [ksmbd]
>     ksmbd_sessions_deregister+0x3fc/0x5c8 [ksmbd]
>     ksmbd_server_terminate_conn+0x20/0x40 [ksmbd]
>     ksmbd_conn_handler_loop+0x4b4/0xd10   [ksmbd]
> 
> fs/locks.c:312 is BUG_ON(!list_empty(&flc->flc_blocked_requests));

Hi Blue,

Thank you for reporting this issue and providing the poc.

I reproduced the same BUG_ON on mainline. However, it could not be 
reproduced on the ksmbd-for-next-next branch, but another UAF issue was 
found, I will continue debugging it.

```
LF_SECONDS=10 python3 -u lockfuzz2.py
t=5s locks_sent=0 faults=0
t=10s locks_sent=0 faults=0

lsmod | grep ksmbd
ksmbd                1236992  0

modprobe -r ksmbd # slab-use-after-free
```

[  170.722187] 
==================================================================
[  170.724724] BUG: KASAN: slab-use-after-free in proc_remove+0x3e/0x80
[  170.726934] Read of size 8 at addr ffff8881044eff98 by task modprobe/1019

[  170.729907] CPU: 5 UID: 0 PID: 1019 Comm: modprobe Not tainted 
7.2.0-rc7+ #5 PREEMPT(full)
[  170.729917] Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), 
BIOS 1.17.0-9.fc43 06/10/2025
[  170.729922] Call Trace:
[  170.729926]  <TASK>
[  170.729930]  __dump_stack+0x19/0x30
[  170.729939]  dump_stack_lvl+0x49/0x60
[  170.729945]  print_address_description+0x7b/0x200
[  170.729952]  ? proc_remove+0x3e/0x80
[  170.729958]  print_report+0x5b/0x70
[  170.729980]  kasan_report+0xed/0x130
[  170.729987]  ? proc_remove+0x3e/0x80
[  170.729996]  __asan_report_load8_noabort+0x18/0x20
[  170.730001]  proc_remove+0x3e/0x80
[  170.730006]  ksmbd_conn_transport_destroy+0x2b/0x320 [ksmbd]
[  170.730073]  cleanup_module+0x33/0xe00 [ksmbd]
[  170.730126]  __se_sys_delete_module+0x276/0x400
[  170.730133]  ? fput_close_sync+0x9a/0x110
[  170.730138]  __x64_sys_delete_module+0x5f/0x70
[  170.730143]  x64_sys_call+0x2675/0x3030
[  170.730147]  do_syscall_64+0xf0/0x3b0
[  170.730153]  entry_SYSCALL_64_after_hwframe+0x76/0x7e
[  170.730157] RIP: 0033:0x7f81a592b02b
[  170.730162] Code: 73 01 c3 48 8b 0d ed ad 0c 00 f7 d8 64 89 01 48 83 
c8 ff c3 66 2e 0f 1f 84 00 00 00 00 00 90 f3 0f 1e fa b8 b0 00 00 00 0f 
05 <48> 3d 01 f0 ff ff 73 01 c3 48 8b 0d bd ad 0c 00 f7 d8 64 89 01 48
[  170.730166] RSP: 002b:00007fff84d9cdb8 EFLAGS: 00000206 ORIG_RAX: 
00000000000000b0
[  170.730172] RAX: ffffffffffffffda RBX: 000055993a2f5ca0 RCX: 
00007f81a592b02b
[  170.730176] RDX: 0000000000000000 RSI: 0000000000000800 RDI: 
000055993a2f5d08
[  170.730178] RBP: 00007fff84d9cde0 R08: 1999999999999999 R09: 
0000000000000000
[  170.730181] R10: 00007f81a59a5fe0 R11: 0000000000000206 R12: 
0000000000000000
[  170.730184] R13: 00007fff84d9ce10 R14: 0000000000000000 R15: 
0000000000000000
[  170.730188]  </TASK>

[  170.778338] Allocated by task 141:
[  170.779443]  kasan_save_track+0x2f/0x70
[  170.780675]  kasan_save_alloc_info+0x40/0x50
[  170.782044]  __kasan_slab_alloc+0x52/0x70
[  170.783312]  kmem_cache_alloc_noprof+0x168/0x3e0
[  170.784715]  __proc_create+0x20b/0x710
[  170.785846]  proc_create_single_data+0x78/0x150
[  170.786703]  ksmbd_proc_create+0x24/0x30 [ksmbd]
[  170.787525]  ksmbd_conn_transport_init+0x4f/0x80 [ksmbd]
[  170.788525]  server_ctrl_handle_work+0x64/0x2c0 [ksmbd]
[  170.789471]  process_scheduled_works+0x788/0xec0
[  170.790295]  worker_thread+0x894/0xc10
[  170.790986]  kthread+0x2e5/0x3c0
[  170.791548]  ret_from_fork+0x168/0x4f0
[  170.792256]  ret_from_fork_asm+0x1a/0x30

[  170.793241] Freed by task 1019:
[  170.793802]  kasan_save_track+0x2f/0x70
[  170.794411]  kasan_save_free_info+0x4a/0x60
[  170.795155]  __kasan_slab_free+0x47/0x70
[  170.795878]  kmem_cache_free+0x122/0x410
[  170.796556]  pde_put+0xfd/0x160
[  170.797156]  remove_proc_subtree+0x365/0x540
[  170.797910]  proc_remove+0x6a/0x80
[  170.798500]  ksmbd_proc_cleanup+0x1f/0x60 [ksmbd]
[  170.799389]  cleanup_module+0x18/0xe00 [ksmbd]
[  170.800243]  __se_sys_delete_module+0x276/0x400
[  170.801046]  __x64_sys_delete_module+0x5f/0x70
[  170.801827]  x64_sys_call+0x2675/0x3030
[  170.802498]  do_syscall_64+0xf0/0x3b0
[  170.803155]  entry_SYSCALL_64_after_hwframe+0x76/0x7e

[  170.804362] The buggy address belongs to the object at ffff8881044eff00
                 which belongs to the cache proc_dir_entry of size 192
[  170.806657] The buggy address is located 152 bytes inside of
                 freed 192-byte region [ffff8881044eff00, ffff8881044effc0)

[  170.809083] The buggy address belongs to the physical page:
[  170.810057] page: refcount:0 mapcount:0 mapping:0000000000000000 
index:0x0 pfn:0x1044ee
[  170.811450] head: order:1 mapcount:0 entire_mapcount:0 
nr_pages_mapped:0 pincount:0
[  170.812749] flags: 
0x17ffffc0000040(head|node=0|zone=2|lastcpupid=0x1fffff)
[  170.813918] page_type: f5(slab)
[  170.814464] raw: 0017ffffc0000040 ffff888100a252c0 dead000000000100 
dead000000000122
[  170.815773] raw: 0000000000000000 0000000800200020 00000000f5000000 
0000000000000000
[  170.817065] head: 0017ffffc0000040 ffff888100a252c0 dead000000000100 
dead000000000122
[  170.818361] head: 0000000000000000 0000000800200020 00000000f5000000 
0000000000000000
[  170.819656] head: 0017ffffc0000001 ffffffffffffff81 00000000ffffffff 
00000000ffffffff
[  170.820991] head: ffffffffffffffff 0000000000000000 00000000ffffffff 
0000000000000002
[  170.822282] page dumped because: kasan: bad access detected

[  170.823477] Memory state around the buggy address:
[  170.824297]  ffff8881044efe80: 00 00 00 00 00 00 00 00 fc fc fc fc fc 
fc fc fc
[  170.825501]  ffff8881044eff00: fa fb fb fb fb fb fb fb fb fb fb fb fb 
fb fb fb
[  170.826698] >ffff8881044eff80: fb fb fb fb fb fb fb fb fc fc fc fc fc 
fc fc fc
[  170.827971]                             ^
[  170.828634]  ffff8881044f0000: 00 00 00 00 00 00 00 00 00 00 00 00 00 
00 00 00
[  170.829862]  ffff8881044f0080: 00 fc fc fc fc fc fc fc fc 00 00 00 00 
00 00 00
[  170.831072] 
==================================================================

-- 
ChenXiaoSong <[email protected]>
Chinese Homepage: https://chenxiaosong.com
English Homepage: https://chenxiaosong.com/en
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.