Hello,
syzbot has tested the proposed patch but the reproducer still triggered crash:
KASAN: use-after-free Read in idr_destroy
==================================================================
BUG: KASAN: use-after-free in __read_once_size include/linux/compiler.h:199 [inline]
BUG: KASAN: use-after-free in radix_tree_free_nodes lib/radix-tree.c:671 [inline]
BUG: KASAN: use-after-free in idr_destroy+0xa3/0x260 lib/radix-tree.c:1572
Read of size 8 at addr ffff8880a1bc40e8 by task syz-executor.4/8795
CPU: 0 PID: 8795 Comm: syz-executor.4 Not tainted 5.6.0-rc5-syzkaller #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
Call Trace:
__dump_stack lib/dump_stack.c:77 [inline]
dump_stack+0x1fb/0x318 lib/dump_stack.c:118
print_address_description+0x74/0x5c0 mm/kasan/report.c:374
__kasan_report+0x149/0x1c0 mm/kasan/report.c:506
kasan_report+0x26/0x50 mm/kasan/common.c:641
__asan_report_load8_noabort+0x14/0x20 mm/kasan/generic_report.c:135
__read_once_size include/linux/compiler.h:199 [inline]
radix_tree_free_nodes lib/radix-tree.c:671 [inline]
idr_destroy+0xa3/0x260 lib/radix-tree.c:1572
drm_mode_create_lease_ioctl+0x12b3/0x19b0 drivers/gpu/drm/drm_lease.c:595
drm_ioctl_kernel+0x2cf/0x410 drivers/gpu/drm/drm_ioctl.c:786
drm_ioctl+0x52f/0x890 drivers/gpu/drm/drm_ioctl.c:886
vfs_ioctl fs/ioctl.c:47 [inline]
ksys_ioctl fs/ioctl.c:763 [inline]
__do_sys_ioctl fs/ioctl.c:772 [inline]
__se_sys_ioctl+0x113/0x190 fs/ioctl.c:770
__x64_sys_ioctl+0x7b/0x90 fs/ioctl.c:770
do_syscall_64+0xf7/0x1c0 arch/x86/entry/common.c:294
entry_SYSCALL_64_after_hwframe+0x49/0xbe
RIP: 0033:0x45c479
Code: ad b6 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 0f 83 7b b6 fb ff c3 66 2e 0f 1f 84 00 00 00 00
RSP: 002b:00007fd522751c78 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
RAX: ffffffffffffffda RBX: 00007fd5227526d4 RCX: 000000000045c479
RDX: 0000000020000040 RSI: ffffffffffffffc6 RDI: 0000000000000003
RBP: 000000000076bf20 R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000004
R13: 0000000000000203 R14: 00000000004c3e56 R15: 0000000000000008
Allocated by task 8795:
save_stack mm/kasan/common.c:72 [inline]
set_track mm/kasan/common.c:80 [inline]
__kasan_kmalloc+0x118/0x1c0 mm/kasan/common.c:515
kasan_slab_alloc+0xf/0x20 mm/kasan/common.c:523
slab_post_alloc_hook mm/slab.h:584 [inline]
slab_alloc mm/slab.c:3320 [inline]
kmem_cache_alloc+0x1f5/0x2e0 mm/slab.c:3484
radix_tree_node_alloc+0x81/0x390 lib/radix-tree.c:285
idr_get_free+0x2cb/0x8c0 lib/radix-tree.c:1515
idr_alloc_u32 lib/idr.c:46 [inline]
idr_alloc+0x14a/0x290 lib/idr.c:87
fill_object_idr drivers/gpu/drm/drm_lease.c:437 [inline]
drm_mode_create_lease_ioctl+0x7cc/0x19b0 drivers/gpu/drm/drm_lease.c:535
drm_ioctl_kernel+0x2cf/0x410 drivers/gpu/drm/drm_ioctl.c:786
drm_ioctl+0x52f/0x890 drivers/gpu/drm/drm_ioctl.c:886
vfs_ioctl fs/ioctl.c:47 [inline]
ksys_ioctl fs/ioctl.c:763 [inline]
__do_sys_ioctl fs/ioctl.c:772 [inline]
__se_sys_ioctl+0x113/0x190 fs/ioctl.c:770
__x64_sys_ioctl+0x7b/0x90 fs/ioctl.c:770
do_syscall_64+0xf7/0x1c0 arch/x86/entry/common.c:294
entry_SYSCALL_64_after_hwframe+0x49/0xbe
Freed by task 8699:
save_stack mm/kasan/common.c:72 [inline]
set_track mm/kasan/common.c:80 [inline]
kasan_set_free_info mm/kasan/common.c:337 [inline]
__kasan_slab_free+0x12e/0x1e0 mm/kasan/common.c:476
kasan_slab_free+0xe/0x10 mm/kasan/common.c:485
__cache_free mm/slab.c:3426 [inline]
kmem_cache_free+0x81/0xf0 mm/slab.c:3694
radix_tree_node_rcu_free+0x73/0x80 lib/radix-tree.c:313
rcu_do_batch kernel/rcu/tree.c:2186 [inline]
rcu_core+0x81b/0x10c0 kernel/rcu/tree.c:2410
rcu_core_si+0x9/0x10 kernel/rcu/tree.c:2419
__do_softirq+0x283/0x7bd kernel/softirq.c:292
The buggy address belongs to the object at ffff8880a1bc40c0
which belongs to the cache radix_tree_node of size 576
The buggy address is located 40 bytes inside of
576-byte region [ffff8880a1bc40c0, ffff8880a1bc4300)
The buggy address belongs to the page:
page:ffffea000286f100 refcount:1 mapcount:0 mapping:ffff8880aa4311c0 index:0xffff8880a1bc4ffb
flags: 0xfffe0000000200(slab)
raw: 00fffe0000000200 ffffea0002464148 ffffea0002a80f88 ffff8880aa4311c0
raw: ffff8880a1bc4ffb ffff8880a1bc40c0 0000000100000005 0000000000000000
page dumped because: kasan: bad access detected
Memory state around the buggy address:
ffff8880a1bc3f80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff8880a1bc4000: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
>ffff8880a1bc4080: fc fc fc fc fc fc fc fc fb fb fb fb fb fb fb fb
^
ffff8880a1bc4100: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
ffff8880a1bc4180: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
==================================================================
Tested on:
commit: 2ddaea35 add log
console output:
https://syzkaller.appspot.com/x/log.txt?x=15b62275e00000