* [syzbot] [dri?] WARNING in drm_syncobj_array_find @ 2023-09-06 11:42 syzbot 2026-11-03 8:23 ` Forwarded: [PATCH] drm/syncobj: Silence allocation warnings for user-sized arrays syzbot 0 siblings, 1 reply; 2+ messages in thread From: syzbot @ 2023-09-06 11:42 UTC (permalink / raw) To: airlied, christian.koenig, daniel, dri-devel, linaro-mm-sig, linux-kernel, linux-media, maarten.lankhorst, mripard, sumit.semwal, syzkaller-bugs, tzimmermann Hello, syzbot found the following issue on: HEAD commit: 0468be89b3fa Merge tag 'iommu-updates-v6.6' of git://git.k.. git tree: upstream console output: https://syzkaller.appspot.com/x/log.txt?x=13571367a80000 kernel config: https://syzkaller.appspot.com/x/.config?x=39744401c57166fc dashboard link: https://syzkaller.appspot.com/bug?extid=95416f957d84e858b377 compiler: gcc (Debian 12.2.0-14) 12.2.0, GNU ld (GNU Binutils for Debian) 2.40 syz repro: https://syzkaller.appspot.com/x/repro.syz?x=111c39a8680000 C reproducer: https://syzkaller.appspot.com/x/repro.c?x=1267d83fa80000 Downloadable assets: disk image (non-bootable): https://storage.googleapis.com/syzbot-assets/7bc7510fe41f/non_bootable_disk-0468be89.raw.xz vmlinux: https://storage.googleapis.com/syzbot-assets/7feba36779de/vmlinux-0468be89.xz kernel image: https://storage.googleapis.com/syzbot-assets/b1cdc0506491/bzImage-0468be89.xz IMPORTANT: if you fix the issue, please add the following tag to the commit: Reported-by: syzbot+95416f957d84e858b377@syzkaller.appspotmail.com ------------[ cut here ]------------ WARNING: CPU: 2 PID: 5141 at mm/page_alloc.c:4415 __alloc_pages+0x3ab/0x4a0 mm/page_alloc.c:4415 Modules linked in: CPU: 2 PID: 5141 Comm: syz-executor127 Not tainted 6.5.0-syzkaller-10885-g0468be89b3fa #0 Hardware name: QEMU Standard PC (Q35 + ICH9, 2009), BIOS 1.16.2-debian-1.16.2-1 04/01/2014 RIP: 0010:__alloc_pages+0x3ab/0x4a0 mm/page_alloc.c:4415 Code: ff ff 00 0f 84 2f fe ff ff 80 ce 01 e9 27 fe ff ff 83 fe 0a 0f 86 3a fd ff ff 80 3d c9 37 e6 0c 00 75 09 c6 05 c0 37 e6 0c 01 <0f> 0b 45 31 f6 e9 97 fe ff ff e8 b6 10 9e ff 84 c0 0f 85 8a fe ff RSP: 0018:ffffc900030b7a18 EFLAGS: 00010246 RAX: 0000000000000000 RBX: 0000000000040cc0 RCX: 0000000000000000 RDX: 0000000000000000 RSI: 0000000000000016 RDI: 0000000000040cc0 RBP: 1ffff92000616f44 R08: 0000000000000005 R09: 0000000000000000 R10: 00000000ffffff1f R11: 0000000000000000 R12: 0000000000000016 R13: 0000000000000000 R14: ffffffff84b4e215 R15: ffff888013722000 FS: 00005555555a4380(0000) GS:ffff88806b800000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 00000000200001c0 CR3: 000000002accd000 CR4: 0000000000350ee0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: <TASK> __alloc_pages_node include/linux/gfp.h:237 [inline] alloc_pages_node include/linux/gfp.h:260 [inline] __kmalloc_large_node+0x87/0x1c0 mm/slab_common.c:1164 __do_kmalloc_node mm/slab_common.c:1011 [inline] __kmalloc.cold+0xb/0xe0 mm/slab_common.c:1036 kmalloc_array include/linux/slab.h:636 [inline] drm_syncobj_array_find+0x35/0x3c0 drivers/gpu/drm/drm_syncobj.c:1246 drm_syncobj_timeline_signal_ioctl+0x21f/0x860 drivers/gpu/drm/drm_syncobj.c:1533 drm_ioctl_kernel+0x280/0x4c0 drivers/gpu/drm/drm_ioctl.c:789 drm_ioctl+0x5cb/0xbf0 drivers/gpu/drm/drm_ioctl.c:892 vfs_ioctl fs/ioctl.c:51 [inline] __do_sys_ioctl fs/ioctl.c:871 [inline] __se_sys_ioctl fs/ioctl.c:857 [inline] __x64_sys_ioctl+0x18f/0x210 fs/ioctl.c:857 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x38/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7ff62d53f129 Code: 48 83 c4 28 c3 e8 37 17 00 00 0f 1f 80 00 00 00 00 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 73 01 c3 48 c7 c1 b8 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007ffe7c669ea8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010 RAX: ffffffffffffffda RBX: 00007ffe7c66a078 RCX: 00007ff62d53f129 RDX: 0000000020000500 RSI: 00000000c01864cd RDI: 0000000000000003 RBP: 00007ff62d5b2610 R08: 0023647261632f69 R09: 00007ffe7c66a078 R10: 000000000000001f R11: 0000000000000246 R12: 0000000000000001 R13: 00007ffe7c66a068 R14: 0000000000000001 R15: 0000000000000001 </TASK> --- This report is generated by a bot. It may contain errors. See https://goo.gl/tpsmEJ for more information about syzbot. syzbot engineers can be reached at syzkaller@googlegroups.com. syzbot will keep track of this issue. See: https://goo.gl/tpsmEJ#status for how to communicate with syzbot. If the bug is already fixed, let syzbot know by replying with: #syz fix: exact-commit-title If you want syzbot to run the reproducer, reply with: #syz test: git://repo/address.git branch-or-commit-hash If you attach or paste a git patch, syzbot will apply it before testing. If you want to overwrite bug's subsystems, reply with: #syz set subsystems: new-subsystem (See the list of subsystem names on the web dashboard) If the bug is a duplicate of another bug, reply with: #syz dup: exact-subject-of-another-report If you want to undo deduplication, reply with: #syz undup ^ permalink raw reply [flat|nested] 2+ messages in thread
* Forwarded: [PATCH] drm/syncobj: Silence allocation warnings for user-sized arrays 2023-09-06 11:42 [syzbot] [dri?] WARNING in drm_syncobj_array_find syzbot @ 2026-11-03 8:23 ` syzbot 0 siblings, 0 replies; 2+ messages in thread From: syzbot @ 2026-11-03 8:23 UTC (permalink / raw) To: linux-kernel, syzkaller-bugs For archival purposes, forwarding an incoming command email to linux-kernel@vger.kernel.org, syzkaller-bugs@googlegroups.com. *** Subject: [PATCH] drm/syncobj: Silence allocation warnings for user-sized arrays Author: fei.yu@intel.com From: Fei Yu <fei.yu@intel.com> #syz test: git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master The syncobj wait, timeline wait and timeline signal ioctls allocate several temporary arrays whose size is taken directly from the u32 count_handles provided by userspace: - handles and syncobjs in drm_syncobj_array_find() - points and entries in drm_syncobj_array_wait_timeout() - points and chains in drm_syncobj_timeline_signal_ioctl() A large enough count makes these allocations exceed KMALLOC_MAX_SIZE and trips the WARN_ON_ONCE_GFP() in ___kmalloc_large_node(): WARNING: mm/slub.c:5459 at ___kmalloc_large_node+0x10c/0x170 mm/slub.c:5459 Call Trace: __kmalloc_large_node_noprof+0x18/0x90 mm/slub.c:5502 __do_kmalloc_node mm/slub.c:5519 [inline] __kmalloc_noprof+0x3f6/0x710 mm/slub.c:5556 _kmalloc_noprof include/linux/slab.h:995 [inline] _kmalloc_array_noprof include/linux/slab.h:1211 [inline] drm_syncobj_array_find+0x3a/0x440 drivers/gpu/drm/drm_syncobj.c:1241 drm_syncobj_timeline_wait_ioctl+0x18a/0x640 drivers/gpu/drm/drm_syncobj.c:1356 drm_ioctl_kernel+0x2df/0x3b0 drivers/gpu/drm/drm_ioctl.c:817 drm_ioctl+0x70e/0xba0 drivers/gpu/drm/drm_ioctl.c:914 The allocation failure itself is already handled by returning -ENOMEM, so the only problem is a warning that userspace can trigger at will. Pass __GFP_NOWARN to all allocations whose size is derived from count_handles. Guarding only drm_syncobj_array_find() is not enough: the wait entries are much larger than a handle, so a count that passes drm_syncobj_array_find() can still trigger the same warning in drm_syncobj_array_wait_timeout(). No functional change and no new limit on the uAPI. Fixes: 3e6fb72d6cef ("drm/syncobj: Add a syncobj_array_find helper") Reported-by: syzbot+95416f957d84e858b377@syzkaller.appspotmail.com Closes: https://syzkaller.appspot.com/bug?extid=95416f957d84e858b377 Signed-off-by: Fei Yu <fei.yu@intel.com> --- Testing: on v7.4-rc1 (x86_64, KASAN) the syzbot C reproducer triggers the ___kmalloc_large_node() warning with the same size (0x100000920); with this patch it runs clean. DRM KUnit: 667/667 passed. Notes: - An earlier attempt [1] added a size check returning -ERANGE, but only for the handles array, so the syncobjs array and the much larger wait entries could still warn, and it changed the ioctl's error codes. This version keeps the existing -ENOMEM behaviour for all six allocations. - kvmalloc() was not used on purpose: it would let userspace trigger multi-GB vmalloc() attempts. A hard upper limit on count_handles would be a uAPI change; happy to do that instead if preferred. [1] https://lore.kernel.org/all/20251227160830.34291-1-madhurkumar004@gmail.com/ drivers/gpu/drm/drm_syncobj.c | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/drivers/gpu/drm/drm_syncobj.c b/drivers/gpu/drm/drm_syncobj.c index f1d4da168..10aede1c0 100644 --- a/drivers/gpu/drm/drm_syncobj.c +++ b/drivers/gpu/drm/drm_syncobj.c @@ -1051,7 +1051,8 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, lockdep_assert_none_held_once(); } - points = kmalloc_array(count, sizeof(*points), GFP_KERNEL); + points = kmalloc_array(count, sizeof(*points), + GFP_KERNEL | __GFP_NOWARN); if (points == NULL) return -ENOMEM; @@ -1064,7 +1065,7 @@ static signed long drm_syncobj_array_wait_timeout(struct drm_syncobj **syncobjs, goto err_free_points; } - entries = kzalloc_objs(*entries, count); + entries = kzalloc_objs(*entries, count, GFP_KERNEL | __GFP_NOWARN); if (!entries) { timeout = -ENOMEM; goto err_free_points; @@ -1238,7 +1239,8 @@ static int drm_syncobj_array_find(struct drm_file *file_private, struct drm_syncobj **syncobjs; int ret; - handles = kmalloc_array(count_handles, sizeof(*handles), GFP_KERNEL); + handles = kmalloc_array(count_handles, sizeof(*handles), + GFP_KERNEL | __GFP_NOWARN); if (handles == NULL) return -ENOMEM; @@ -1248,7 +1250,8 @@ static int drm_syncobj_array_find(struct drm_file *file_private, goto err_free_handles; } - syncobjs = kmalloc_objs(*syncobjs, count_handles); + syncobjs = kmalloc_objs(*syncobjs, count_handles, + GFP_KERNEL | __GFP_NOWARN); if (syncobjs == NULL) { ret = -ENOMEM; goto err_free_handles; @@ -1573,7 +1576,7 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data, return ret; points = kmalloc_array(args->count_handles, sizeof(*points), - GFP_KERNEL); + GFP_KERNEL | __GFP_NOWARN); if (!points) { ret = -ENOMEM; goto out; @@ -1586,7 +1589,8 @@ drm_syncobj_timeline_signal_ioctl(struct drm_device *dev, void *data, goto err_points; } - chains = kmalloc_objs(*chains, args->count_handles); + chains = kmalloc_objs(*chains, args->count_handles, + GFP_KERNEL | __GFP_NOWARN); if (!chains) { ret = -ENOMEM; goto err_points; base-commit: 6628e7d4c6b25c8d18f1345e3a20d21829aae7e4 -- 2.43.0 ^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2026-11-03 8:23 UTC | newest] Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2023-09-06 11:42 [syzbot] [dri?] WARNING in drm_syncobj_array_find syzbot 2026-11-03 8:23 ` Forwarded: [PATCH] drm/syncobj: Silence allocation warnings for user-sized arrays syzbot
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®