Hello,
syzbot found the following issue on:
HEAD commit: 3e7aeb78ab01 Merge tag 'net-next-6.8' of git://git.kernel...
git tree: upstream
console+strace: https://syzkaller.appspot.com/x/log.txt?x=10959983e80000
kernel config: https://syzkaller.appspot.com/x/.config?x=8e557b1c0a57d2c0
dashboard link: https://syzkaller.appspot.com/bug?extid=7ec955e36bb239bd720f
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
syz repro: https://syzkaller.appspot.com/x/repro.syz?x=14a0cf5be80000
C reproducer: https://syzkaller.appspot.com/x/repro.c?x=12995b33e80000
Downloadable assets:
disk image: https://storage.googleapis.com/syzbot-assets/b783a4458502/disk-3e7aeb78.raw.xz
vmlinux: https://storage.googleapis.com/syzbot-assets/cc895babf000/vmlinux-3e7aeb78.xz
kernel image: https://storage.googleapis.com/syzbot-assets/66d9e78e7b97/bzImage-3e7aeb78.xz
The issue was bisected to:
commit 02018c544ef113e980a2349eba89003d6f399d22
Author: Maxime Chevallier <[email protected]>
Date: Thu Dec 21 18:00:34 2023 +0000
net: phy: Introduce ethernet link topology representation
bisection log: https://syzkaller.appspot.com/x/bisect.txt?x=13695313e80000
final oops: https://syzkaller.appspot.com/x/report.txt?x=10e95313e80000
console output: https://syzkaller.appspot.com/x/log.txt?x=17695313e80000
IMPORTANT: if you fix the issue, please add the following tag to the commit:
Reported-by: [email protected]
Fixes: 02018c544ef1 ("net: phy: Introduce ethernet link topology representation")
==================================================================
BUG: KASAN: slab-out-of-bounds in dsa_user_to_port net/dsa/user.h:58 [inline]
BUG: KASAN: slab-out-of-bounds in dsa_user_prechangeupper+0x3a/0x240 net/dsa/user.c:2868
Read of size 8 at addr ffff8880220c6c90 by task syz-executor394/5050
CPU: 0 PID: 5050 Comm: syz-executor394 Not tainted 6.7.0-syzkaller-04629-g3e7aeb78ab01 #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
print_address_description mm/kasan/report.c:377 [inline]
print_report+0x163/0x540 mm/kasan/report.c:488
kasan_report+0x142/0x170 mm/kasan/report.c:601
dsa_user_to_port net/dsa/user.h:58 [inline]
dsa_user_prechangeupper+0x3a/0x240 net/dsa/user.c:2868
dsa_user_netdevice_event+0x1a37/0x2ab0 net/dsa/user.c:3332
notifier_call_chain+0x18c/0x3b0 kernel/notifier.c:93
__netdev_upper_dev_link+0x39d/0x670 net/core/dev.c:7748
netdev_upper_dev_link+0x9e/0xe0 net/core/dev.c:7800
macvlan_common_newlink+0x11c9/0x1930 drivers/net/macvlan.c:1539
macvtap_newlink+0x154/0x1d0 drivers/net/macvtap.c:108
rtnl_newlink_create net/core/rtnetlink.c:3515 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x1584/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543
netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367
netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg net/socket.c:745 [inline]
____sys_sendmsg+0x592/0x890 net/socket.c:2584
___sys_sendmsg net/socket.c:2638 [inline]
__sys_sendmsg+0x2b0/0x3a0 net/socket.c:2667
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
RIP: 0033:0x7f45cd265d09
Code: 48 83 c4 28 c3 e8 d7 19 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:00007ffe6d34da28 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00007f45cd2b33d3 RCX: 00007f45cd265d09
RDX: 0000000000000000 RSI: 0000000020000280 RDI: 0000000000000005
RBP: 00007ffe6d34da50 R08: 0000000000000001 R09: 0000000000000001
R10: 0000000000000000 R11: 0000000000000246 R12: 00007ffe6d34da60
R13: 00007f45cd2b3004 R14: 00007ffe6d34da4c R15: 0000000000000003
</TASK>
Allocated by task 5050:
kasan_save_stack mm/kasan/common.c:47 [inline]
kasan_save_track+0x3f/0x70 mm/kasan/common.c:68
poison_kmalloc_redzone mm/kasan/common.c:372 [inline]
__kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:389
kasan_kmalloc include/linux/kasan.h:211 [inline]
__do_kmalloc_node mm/slub.c:3981 [inline]
__kmalloc_node+0x24e/0x4e0 mm/slub.c:3988
kmalloc_node include/linux/slab.h:610 [inline]
kvmalloc_node+0x72/0x180 mm/util.c:617
kvmalloc include/linux/slab.h:728 [inline]
kvzalloc include/linux/slab.h:736 [inline]
alloc_netdev_mqs+0x9d/0xf80 net/core/dev.c:10826
rtnl_create_link+0x2ea/0xc10 net/core/rtnetlink.c:3379
rtnl_newlink_create net/core/rtnetlink.c:3505 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x141e/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543
netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367
netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg net/socket.c:745 [inline]
__sys_sendto+0x440/0x600 net/socket.c:2191
__do_sys_sendto net/socket.c:2203 [inline]
__se_sys_sendto net/socket.c:2199 [inline]
__x64_sys_sendto+0xde/0xf0 net/socket.c:2199
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
The buggy address belongs to the object at ffff8880220c6000
which belongs to the cache kmalloc-cg-4k of size 4096
The buggy address is located 3216 bytes inside of
allocated 3223-byte region [ffff8880220c6000, ffff8880220c6c97)
The buggy address belongs to the physical page:
page:ffffea0000883000 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x220c0
head:ffffea0000883000 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
flags: 0xfff00000000840(slab|head|node=0|zone=1|lastcpupid=0x7ff)
page_type: 0xffffffff()
raw: 00fff00000000840 ffff888012c4f500 dead000000000100 dead000000000122
raw: 0000000000000000 0000000000040004 00000001ffffffff 0000000000000000
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 3, migratetype Unmovable, gfp_mask 0xd20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC), pid 4514, tgid 4514 (udevd), ts 18242520144, free_ts 18231141724
set_page_owner include/linux/page_owner.h:31 [inline]
post_alloc_hook+0x1e6/0x210 mm/page_alloc.c:1533
prep_new_page mm/page_alloc.c:1540 [inline]
get_page_from_freelist+0x33ea/0x3570 mm/page_alloc.c:3311
__alloc_pages+0x255/0x680 mm/page_alloc.c:4567
__alloc_pages_node include/linux/gfp.h:238 [inline]
alloc_pages_node include/linux/gfp.h:261 [inline]
alloc_slab_page+0x5f/0x160 mm/slub.c:2190
allocate_slab mm/slub.c:2354 [inline]
new_slab+0x84/0x2f0 mm/slub.c:2407
___slab_alloc+0xd17/0x13d0 mm/slub.c:3540
__slab_alloc mm/slub.c:3625 [inline]
__slab_alloc_node mm/slub.c:3678 [inline]
slab_alloc_node mm/slub.c:3850 [inline]
__do_kmalloc_node mm/slub.c:3980 [inline]
__kmalloc_node+0x2d2/0x4e0 mm/slub.c:3988
kmalloc_node include/linux/slab.h:610 [inline]
kvmalloc_node+0x72/0x180 mm/util.c:617
kvmalloc include/linux/slab.h:728 [inline]
seq_buf_alloc fs/seq_file.c:38 [inline]
seq_read_iter+0x202/0xd10 fs/seq_file.c:210
call_read_iter include/linux/fs.h:2079 [inline]
new_sync_read fs/read_write.c:395 [inline]
vfs_read+0x662/0x900 fs/read_write.c:476
ksys_read+0x1a0/0x2c0 fs/read_write.c:619
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
page last free pid 4518 tgid 4518 stack trace:
reset_page_owner include/linux/page_owner.h:24 [inline]
free_pages_prepare mm/page_alloc.c:1140 [inline]
free_unref_page_prepare+0x959/0xa80 mm/page_alloc.c:2346
free_unref_page+0x37/0x3f0 mm/page_alloc.c:2486
discard_slab mm/slub.c:2453 [inline]
__put_partials+0xeb/0x130 mm/slub.c:2922
put_cpu_partial+0x17b/0x250 mm/slub.c:2997
__slab_free+0x2fe/0x410 mm/slub.c:4166
qlink_free mm/kasan/quarantine.c:160 [inline]
qlist_free_all+0x6d/0xd0 mm/kasan/quarantine.c:176
kasan_quarantine_reduce+0x14b/0x160 mm/kasan/quarantine.c:283
__kasan_slab_alloc+0x23/0x70 mm/kasan/common.c:324
kasan_slab_alloc include/linux/kasan.h:201 [inline]
slab_post_alloc_hook mm/slub.c:3813 [inline]
slab_alloc_node mm/slub.c:3860 [inline]
__do_kmalloc_node mm/slub.c:3980 [inline]
__kmalloc+0x1dd/0x490 mm/slub.c:3994
kmalloc include/linux/slab.h:594 [inline]
kernfs_fop_write_iter+0x15b/0x510 fs/kernfs/file.c:311
call_write_iter include/linux/fs.h:2085 [inline]
new_sync_write fs/read_write.c:497 [inline]
vfs_write+0x783/0xaf0 fs/read_write.c:590
ksys_write+0x1a0/0x2c0 fs/read_write.c:643
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
Memory state around the buggy address:
ffff8880220c6b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff8880220c6c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffff8880220c6c80: 00 00 07 fc fc fc fc fc fc fc fc fc fc fc fc fc
^
ffff8880220c6d00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff8880220c6d80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
==================================================================
---
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 [email protected].
syzbot will keep track of this issue. See:
https://goo.gl/tpsmEJ#status for how to communicate with syzbot.
For information about bisection process see: https://goo.gl/tpsmEJ#bisection
If the report is already addressed, 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 report's subsystems, reply with:
#syz set subsystems: new-subsystem
(See the list of subsystem names on the web dashboard)
If the report is a duplicate of another one, reply with:
#syz dup: exact-subject-of-another-report
If you want to undo deduplication, reply with:
#syz undup
please test slab-out-of-bounds Read in dsa_user_prechangeupper
#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 3e7aeb78ab01
diff --git a/net/dsa/user.c b/net/dsa/user.c
index b738a466e2dc..e6bb2c527067 100644
--- a/net/dsa/user.c
+++ b/net/dsa/user.c
@@ -2865,7 +2865,8 @@ static int dsa_user_changeupper(struct net_device *dev,
static int dsa_user_prechangeupper(struct net_device *dev,
struct netdev_notifier_changeupper_info *info)
{
- struct dsa_port *dp = dsa_user_to_port(dev);
+ const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
+ struct dsa_port *dp = ops->priv_size ? dsa_user_to_port(dev) : NULL;
if (!dsa_user_dev_check(dev))
return NOTIFY_DONE;
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
KASAN: slab-out-of-bounds Read in dsa_user_changeupper
==================================================================
BUG: KASAN: slab-out-of-bounds in dsa_user_to_port net/dsa/user.h:58 [inline]
BUG: KASAN: slab-out-of-bounds in dsa_user_changeupper+0x3d/0x570 net/dsa/user.c:2809
Read of size 8 at addr ffff888027526c90 by task syz-executor.0/5475
CPU: 1 PID: 5475 Comm: syz-executor.0 Not tainted 6.7.0-syzkaller-04629-g3e7aeb78ab01-dirty #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
print_address_description mm/kasan/report.c:377 [inline]
print_report+0x163/0x540 mm/kasan/report.c:488
kasan_report+0x142/0x170 mm/kasan/report.c:601
dsa_user_to_port net/dsa/user.h:58 [inline]
dsa_user_changeupper+0x3d/0x570 net/dsa/user.c:2809
dsa_user_netdevice_event+0x47f/0x2ab0 net/dsa/user.c:3346
notifier_call_chain+0x18c/0x3b0 kernel/notifier.c:93
__netdev_upper_dev_link+0x4bf/0x670 net/core/dev.c:7759
netdev_upper_dev_link+0x9e/0xe0 net/core/dev.c:7800
macvlan_common_newlink+0x11c9/0x1930 drivers/net/macvlan.c:1539
macvtap_newlink+0x154/0x1d0 drivers/net/macvtap.c:108
rtnl_newlink_create net/core/rtnetlink.c:3515 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x1584/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543
netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367
netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg net/socket.c:745 [inline]
____sys_sendmsg+0x592/0x890 net/socket.c:2584
___sys_sendmsg net/socket.c:2638 [inline]
__sys_sendmsg+0x2b0/0x3a0 net/socket.c:2667
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
RIP: 0033:0x7f745707cd29
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 e1 20 00 00 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 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f7457e260c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00007f74571abf80 RCX: 00007f745707cd29
RDX: 0000000000000000 RSI: 0000000020000280 RDI: 0000000000000005
RBP: 00007f74570c947a R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 000000000000000b R14: 00007f74571abf80 R15: 00007fff7a6d63b8
</TASK>
Allocated by task 5403:
kasan_save_stack mm/kasan/common.c:47 [inline]
kasan_save_track+0x3f/0x70 mm/kasan/common.c:68
poison_kmalloc_redzone mm/kasan/common.c:372 [inline]
__kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:389
kasan_kmalloc include/linux/kasan.h:211 [inline]
__do_kmalloc_node mm/slub.c:3981 [inline]
__kmalloc_node+0x24e/0x4e0 mm/slub.c:3988
kmalloc_node include/linux/slab.h:610 [inline]
kvmalloc_node+0x72/0x180 mm/util.c:617
kvmalloc include/linux/slab.h:728 [inline]
kvzalloc include/linux/slab.h:736 [inline]
alloc_netdev_mqs+0x9d/0xf80 net/core/dev.c:10826
rtnl_create_link+0x2ea/0xc10 net/core/rtnetlink.c:3379
rtnl_newlink_create net/core/rtnetlink.c:3505 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x141e/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543
netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367
netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg net/socket.c:745 [inline]
__sys_sendto+0x440/0x600 net/socket.c:2191
__do_sys_sendto net/socket.c:2203 [inline]
__se_sys_sendto net/socket.c:2199 [inline]
__x64_sys_sendto+0xde/0xf0 net/socket.c:2199
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
The buggy address belongs to the object at ffff888027526000
which belongs to the cache kmalloc-cg-4k of size 4096
The buggy address is located 3216 bytes inside of
allocated 3223-byte region [ffff888027526000, ffff888027526c97)
The buggy address belongs to the physical page:
page:ffffea00009d4800 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x27520
head:ffffea00009d4800 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
memcg:ffff888028869701
flags: 0xfff00000000840(slab|head|node=0|zone=1|lastcpupid=0x7ff)
page_type: 0xffffffff()
raw: 00fff00000000840 ffff888012c4f500 dead000000000122 0000000000000000
raw: 0000000000000000 0000000000040004 00000001ffffffff ffff888028869701
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 3, migratetype Unmovable, gfp_mask 0x1d20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC|__GFP_HARDWALL), pid 5403, tgid 5403 (syz-executor.0), ts 79518064348, free_ts 79474869363
set_page_owner include/linux/page_owner.h:31 [inline]
post_alloc_hook+0x1e6/0x210 mm/page_alloc.c:1533
prep_new_page mm/page_alloc.c:1540 [inline]
get_page_from_freelist+0x33ea/0x3570 mm/page_alloc.c:3311
__alloc_pages+0x255/0x680 mm/page_alloc.c:4567
__alloc_pages_node include/linux/gfp.h:238 [inline]
alloc_pages_node include/linux/gfp.h:261 [inline]
alloc_slab_page+0x5f/0x160 mm/slub.c:2190
allocate_slab mm/slub.c:2354 [inline]
new_slab+0x84/0x2f0 mm/slub.c:2407
___slab_alloc+0xd17/0x13d0 mm/slub.c:3540
__slab_alloc mm/slub.c:3625 [inline]
__slab_alloc_node mm/slub.c:3678 [inline]
slab_alloc_node mm/slub.c:3850 [inline]
__do_kmalloc_node mm/slub.c:3980 [inline]
__kmalloc_node_track_caller+0x2cd/0x4e0 mm/slub.c:4001
kmemdup+0x2a/0x60 mm/util.c:131
__devinet_sysctl_register+0xb0/0x2a0 net/ipv4/devinet.c:2595
devinet_sysctl_register+0x17e/0x1f0 net/ipv4/devinet.c:2647
inetdev_init+0x296/0x4c0 net/ipv4/devinet.c:286
inetdev_event+0x338/0x15c0 net/ipv4/devinet.c:1555
notifier_call_chain+0x18c/0x3b0 kernel/notifier.c:93
call_netdevice_notifiers_extack net/core/dev.c:2004 [inline]
call_netdevice_notifiers net/core/dev.c:2018 [inline]
register_netdevice+0x150c/0x19b0 net/core/dev.c:10294
team_newlink+0x10a/0x170 drivers/net/team/team.c:2217
rtnl_newlink_create net/core/rtnetlink.c:3515 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x1584/0x2080 net/core/rtnetlink.c:3748
page last free pid 4714 tgid 4714 stack trace:
reset_page_owner include/linux/page_owner.h:24 [inline]
free_pages_prepare mm/page_alloc.c:1140 [inline]
free_unref_page_prepare+0x959/0xa80 mm/page_alloc.c:2346
free_unref_page+0x37/0x3f0 mm/page_alloc.c:2486
folio_put include/linux/mm.h:1494 [inline]
free_large_kmalloc+0x105/0x1c0 mm/slub.c:4380
kfree+0x1ba/0x380 mm/slub.c:4403
skb_kfree_head net/core/skbuff.c:986 [inline]
skb_free_head net/core/skbuff.c:998 [inline]
skb_release_data+0x660/0x850 net/core/skbuff.c:1028
skb_release_all net/core/skbuff.c:1094 [inline]
__kfree_skb net/core/skbuff.c:1108 [inline]
consume_skb+0xb3/0x150 net/core/skbuff.c:1324
netlink_recvmsg+0x60a/0x11d0 net/netlink/af_netlink.c:1986
sock_recvmsg_nosec net/socket.c:1046 [inline]
sock_recvmsg net/socket.c:1068 [inline]
____sys_recvmsg+0x2a4/0x580 net/socket.c:2803
___sys_recvmsg net/socket.c:2845 [inline]
__sys_recvmsg+0x2f0/0x3d0 net/socket.c:2875
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
Memory state around the buggy address:
ffff888027526b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff888027526c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffff888027526c80: 00 00 07 fc fc fc fc fc fc fc fc fc fc fc fc fc
^
ffff888027526d00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff888027526d80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
==================================================================
Tested on:
commit: 3e7aeb78 Merge tag 'net-next-6.8' of git://git.kernel...
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
console output: https://syzkaller.appspot.com/x/log.txt?x=1306b62be80000
kernel config: https://syzkaller.appspot.com/x/.config?x=8e557b1c0a57d2c0
dashboard link: https://syzkaller.appspot.com/bug?extid=7ec955e36bb239bd720f
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
patch: https://syzkaller.appspot.com/x/patch.diff?x=1606b62be80000
please test slab-out-of-bounds Read in dsa_user_prechangeupper
#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 3e7aeb78ab01
diff --git a/net/dsa/user.c b/net/dsa/user.c
index b738a466e2dc..2034587b3a68 100644
--- a/net/dsa/user.c
+++ b/net/dsa/user.c
@@ -2865,14 +2865,16 @@ static int dsa_user_changeupper(struct net_device *dev,
static int dsa_user_prechangeupper(struct net_device *dev,
struct netdev_notifier_changeupper_info *info)
{
- struct dsa_port *dp = dsa_user_to_port(dev);
+ const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
+ struct dsa_port *dp = ops->priv_size >= sizeof(*dp) ?
+ dsa_user_to_port(dev) : NULL;
if (!dsa_user_dev_check(dev))
return NOTIFY_DONE;
- if (netif_is_bridge_master(info->upper_dev) && !info->linking)
+ if (netif_is_bridge_master(info->upper_dev) && !info->linking && dp)
dsa_port_pre_bridge_leave(dp, info->upper_dev);
- else if (netif_is_lag_master(info->upper_dev) && !info->linking)
+ else if (netif_is_lag_master(info->upper_dev) && !info->linking && dp)
dsa_port_pre_lag_leave(dp, info->upper_dev);
/* dsa_port_pre_hsr_leave is not yet necessary since hsr devices cannot
* meaningfully placed under a bridge yet
--
2.43.0
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
KASAN: slab-out-of-bounds Read in dsa_user_changeupper
==================================================================
BUG: KASAN: slab-out-of-bounds in dsa_user_to_port net/dsa/user.h:58 [inline]
BUG: KASAN: slab-out-of-bounds in dsa_user_changeupper+0x3d/0x570 net/dsa/user.c:2809
Read of size 8 at addr ffff8880708e2c90 by task syz-executor.0/5471
CPU: 0 PID: 5471 Comm: syz-executor.0 Not tainted 6.7.0-syzkaller-04629-g3e7aeb78ab01-dirty #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
print_address_description mm/kasan/report.c:377 [inline]
print_report+0x163/0x540 mm/kasan/report.c:488
kasan_report+0x142/0x170 mm/kasan/report.c:601
dsa_user_to_port net/dsa/user.h:58 [inline]
dsa_user_changeupper+0x3d/0x570 net/dsa/user.c:2809
dsa_user_netdevice_event+0x47f/0x2ab0 net/dsa/user.c:3347
notifier_call_chain+0x18c/0x3b0 kernel/notifier.c:93
__netdev_upper_dev_link+0x4bf/0x670 net/core/dev.c:7759
netdev_upper_dev_link+0x9e/0xe0 net/core/dev.c:7800
macvlan_common_newlink+0x11c9/0x1930 drivers/net/macvlan.c:1539
macvtap_newlink+0x154/0x1d0 drivers/net/macvtap.c:108
rtnl_newlink_create net/core/rtnetlink.c:3515 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x1584/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543
netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367
netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg net/socket.c:745 [inline]
____sys_sendmsg+0x592/0x890 net/socket.c:2584
___sys_sendmsg net/socket.c:2638 [inline]
__sys_sendmsg+0x2b0/0x3a0 net/socket.c:2667
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
RIP: 0033:0x7f8eab87cd29
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 e1 20 00 00 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 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f8eac6310c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00007f8eab9abf80 RCX: 00007f8eab87cd29
RDX: 0000000000000000 RSI: 0000000020000280 RDI: 0000000000000005
RBP: 00007f8eab8c947a R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 000000000000000b R14: 00007f8eab9abf80 R15: 00007ffe246ecc68
</TASK>
Allocated by task 5399:
kasan_save_stack mm/kasan/common.c:47 [inline]
kasan_save_track+0x3f/0x70 mm/kasan/common.c:68
poison_kmalloc_redzone mm/kasan/common.c:372 [inline]
__kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:389
kasan_kmalloc include/linux/kasan.h:211 [inline]
__do_kmalloc_node mm/slub.c:3981 [inline]
__kmalloc_node+0x24e/0x4e0 mm/slub.c:3988
kmalloc_node include/linux/slab.h:610 [inline]
kvmalloc_node+0x72/0x180 mm/util.c:617
kvmalloc include/linux/slab.h:728 [inline]
kvzalloc include/linux/slab.h:736 [inline]
alloc_netdev_mqs+0x9d/0xf80 net/core/dev.c:10826
rtnl_create_link+0x2ea/0xc10 net/core/rtnetlink.c:3379
rtnl_newlink_create net/core/rtnetlink.c:3505 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x141e/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543
netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367
netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg net/socket.c:745 [inline]
__sys_sendto+0x440/0x600 net/socket.c:2191
__do_sys_sendto net/socket.c:2203 [inline]
__se_sys_sendto net/socket.c:2199 [inline]
__x64_sys_sendto+0xde/0xf0 net/socket.c:2199
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
The buggy address belongs to the object at ffff8880708e2000
which belongs to the cache kmalloc-cg-4k of size 4096
The buggy address is located 3216 bytes inside of
allocated 3223-byte region [ffff8880708e2000, ffff8880708e2c97)
The buggy address belongs to the physical page:
page:ffffea0001c23800 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x708e0
head:ffffea0001c23800 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
memcg:ffff88802b2be101
flags: 0xfff00000000840(slab|head|node=0|zone=1|lastcpupid=0x7ff)
page_type: 0xffffffff()
raw: 00fff00000000840 ffff888012c4f500 dead000000000122 0000000000000000
raw: 0000000000000000 0000000000040004 00000001ffffffff ffff88802b2be101
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 3, migratetype Unmovable, gfp_mask 0x1d20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC|__GFP_HARDWALL), pid 5399, tgid 5399 (syz-executor.0), ts 75743044831, free_ts 67319580511
set_page_owner include/linux/page_owner.h:31 [inline]
post_alloc_hook+0x1e6/0x210 mm/page_alloc.c:1533
prep_new_page mm/page_alloc.c:1540 [inline]
get_page_from_freelist+0x33ea/0x3570 mm/page_alloc.c:3311
__alloc_pages+0x255/0x680 mm/page_alloc.c:4567
__alloc_pages_node include/linux/gfp.h:238 [inline]
alloc_pages_node include/linux/gfp.h:261 [inline]
alloc_slab_page+0x5f/0x160 mm/slub.c:2190
allocate_slab mm/slub.c:2354 [inline]
new_slab+0x84/0x2f0 mm/slub.c:2407
___slab_alloc+0xd17/0x13d0 mm/slub.c:3540
__slab_alloc mm/slub.c:3625 [inline]
__slab_alloc_node mm/slub.c:3678 [inline]
slab_alloc_node mm/slub.c:3850 [inline]
__do_kmalloc_node mm/slub.c:3980 [inline]
__kmalloc_node_track_caller+0x2cd/0x4e0 mm/slub.c:4001
kmemdup+0x2a/0x60 mm/util.c:131
__addrconf_sysctl_register+0xb1/0x3f0 net/ipv6/addrconf.c:7129
addrconf_sysctl_register+0x167/0x1c0 net/ipv6/addrconf.c:7195
ipv6_add_dev+0xd60/0x1290 net/ipv6/addrconf.c:453
addrconf_notify+0x6a7/0x1010 net/ipv6/addrconf.c:3593
notifier_call_chain+0x18c/0x3b0 kernel/notifier.c:93
call_netdevice_notifiers_extack net/core/dev.c:2004 [inline]
call_netdevice_notifiers net/core/dev.c:2018 [inline]
register_netdevice+0x150c/0x19b0 net/core/dev.c:10294
team_newlink+0x10a/0x170 drivers/net/team/team.c:2217
rtnl_newlink_create net/core/rtnetlink.c:3515 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x1584/0x2080 net/core/rtnetlink.c:3748
page last free pid 5255 tgid 5255 stack trace:
reset_page_owner include/linux/page_owner.h:24 [inline]
free_pages_prepare mm/page_alloc.c:1140 [inline]
free_unref_page_prepare+0x959/0xa80 mm/page_alloc.c:2346
free_unref_page+0x37/0x3f0 mm/page_alloc.c:2486
pipe_buf_release include/linux/pipe_fs_i.h:219 [inline]
pipe_update_tail fs/pipe.c:234 [inline]
pipe_read+0x6ee/0x13e0 fs/pipe.c:354
call_read_iter include/linux/fs.h:2079 [inline]
new_sync_read fs/read_write.c:395 [inline]
vfs_read+0x662/0x900 fs/read_write.c:476
ksys_read+0x1a0/0x2c0 fs/read_write.c:619
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
Memory state around the buggy address:
ffff8880708e2b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff8880708e2c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffff8880708e2c80: 00 00 07 fc fc fc fc fc fc fc fc fc fc fc fc fc
^
ffff8880708e2d00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff8880708e2d80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
==================================================================
Tested on:
commit: 3e7aeb78 Merge tag 'net-next-6.8' of git://git.kernel...
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
console output: https://syzkaller.appspot.com/x/log.txt?x=1647ebf5e80000
kernel config: https://syzkaller.appspot.com/x/.config?x=8e557b1c0a57d2c0
dashboard link: https://syzkaller.appspot.com/bug?extid=7ec955e36bb239bd720f
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
patch: https://syzkaller.appspot.com/x/patch.diff?x=157e3c2be80000
On Mon, 15 Jan 2024 13:43:20 -0800
> syzbot found the following issue on:
>
> HEAD commit: 3e7aeb78ab01 Merge tag 'net-next-6.8' of git://git.kernel...
> git tree: upstream
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=12995b33e80000
#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
--- x/net/dsa/user.c
+++ y/net/dsa/user.c
@@ -2865,11 +2865,13 @@ static int dsa_user_changeupper(struct n
static int dsa_user_prechangeupper(struct net_device *dev,
struct netdev_notifier_changeupper_info *info)
{
- struct dsa_port *dp = dsa_user_to_port(dev);
+ struct dsa_port *dp;
if (!dsa_user_dev_check(dev))
return NOTIFY_DONE;
+ dp = dsa_user_to_port(dev);
+
if (netif_is_bridge_master(info->upper_dev) && !info->linking)
dsa_port_pre_bridge_leave(dp, info->upper_dev);
else if (netif_is_lag_master(info->upper_dev) && !info->linking)
--
Hello,
syzbot has tested the proposed patch but the reproducer is still triggering an issue:
KASAN: slab-out-of-bounds Read in dsa_user_changeupper
==================================================================
BUG: KASAN: slab-out-of-bounds in dsa_user_to_port net/dsa/user.h:58 [inline]
BUG: KASAN: slab-out-of-bounds in dsa_user_changeupper+0x3d/0x570 net/dsa/user.c:2809
Read of size 8 at addr ffff88802c9c2c90 by task syz-executor.0/5476
CPU: 1 PID: 5476 Comm: syz-executor.0 Not tainted 6.7.0-syzkaller-09928-g052d534373b7-dirty #0
Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 11/17/2023
Call Trace:
<TASK>
__dump_stack lib/dump_stack.c:88 [inline]
dump_stack_lvl+0x1e7/0x2d0 lib/dump_stack.c:106
print_address_description mm/kasan/report.c:377 [inline]
print_report+0x163/0x540 mm/kasan/report.c:488
kasan_report+0x142/0x170 mm/kasan/report.c:601
dsa_user_to_port net/dsa/user.h:58 [inline]
dsa_user_changeupper+0x3d/0x570 net/dsa/user.c:2809
dsa_user_netdevice_event+0x47f/0x2ab0 net/dsa/user.c:3347
notifier_call_chain+0x18c/0x3b0 kernel/notifier.c:93
__netdev_upper_dev_link+0x4bf/0x670 net/core/dev.c:7759
netdev_upper_dev_link+0x9e/0xe0 net/core/dev.c:7800
macvlan_common_newlink+0x11c9/0x1930 drivers/net/macvlan.c:1539
macvtap_newlink+0x154/0x1d0 drivers/net/macvtap.c:108
rtnl_newlink_create net/core/rtnetlink.c:3515 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x1584/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543
netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367
netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg net/socket.c:745 [inline]
____sys_sendmsg+0x592/0x890 net/socket.c:2584
___sys_sendmsg net/socket.c:2638 [inline]
__sys_sendmsg+0x2b0/0x3a0 net/socket.c:2667
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
RIP: 0033:0x7f35ef47cd29
Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 e1 20 00 00 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 73 01 c3 48 c7 c1 b0 ff ff ff f7 d8 64 89 01 48
RSP: 002b:00007f35f02ca0c8 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
RAX: ffffffffffffffda RBX: 00007f35ef5abf80 RCX: 00007f35ef47cd29
RDX: 0000000000000000 RSI: 0000000020000280 RDI: 0000000000000005
RBP: 00007f35ef4c947a R08: 0000000000000000 R09: 0000000000000000
R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
R13: 000000000000000b R14: 00007f35ef5abf80 R15: 00007ffe96db21d8
</TASK>
Allocated by task 5403:
kasan_save_stack mm/kasan/common.c:47 [inline]
kasan_save_track+0x3f/0x70 mm/kasan/common.c:68
poison_kmalloc_redzone mm/kasan/common.c:372 [inline]
__kasan_kmalloc+0x98/0xb0 mm/kasan/common.c:389
kasan_kmalloc include/linux/kasan.h:211 [inline]
__do_kmalloc_node mm/slub.c:3981 [inline]
__kmalloc_node+0x24e/0x4e0 mm/slub.c:3988
kmalloc_node include/linux/slab.h:610 [inline]
kvmalloc_node+0x72/0x180 mm/util.c:617
kvmalloc include/linux/slab.h:728 [inline]
kvzalloc include/linux/slab.h:736 [inline]
alloc_netdev_mqs+0x9d/0xf80 net/core/dev.c:10826
rtnl_create_link+0x2ea/0xc10 net/core/rtnetlink.c:3379
rtnl_newlink_create net/core/rtnetlink.c:3505 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x141e/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
netlink_rcv_skb+0x1df/0x430 net/netlink/af_netlink.c:2543
netlink_unicast_kernel net/netlink/af_netlink.c:1341 [inline]
netlink_unicast+0x7e6/0x980 net/netlink/af_netlink.c:1367
netlink_sendmsg+0xa37/0xd70 net/netlink/af_netlink.c:1908
sock_sendmsg_nosec net/socket.c:730 [inline]
__sock_sendmsg net/socket.c:745 [inline]
__sys_sendto+0x440/0x600 net/socket.c:2191
__do_sys_sendto net/socket.c:2203 [inline]
__se_sys_sendto net/socket.c:2199 [inline]
__x64_sys_sendto+0xde/0xf0 net/socket.c:2199
do_syscall_x64 arch/x86/entry/common.c:52 [inline]
do_syscall_64+0xf5/0x230 arch/x86/entry/common.c:83
entry_SYSCALL_64_after_hwframe+0x63/0x6b
The buggy address belongs to the object at ffff88802c9c2000
which belongs to the cache kmalloc-cg-4k of size 4096
The buggy address is located 3216 bytes inside of
allocated 3223-byte region [ffff88802c9c2000, ffff88802c9c2c97)
The buggy address belongs to the physical page:
page:ffffea0000b27000 refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x2c9c0
head:ffffea0000b27000 order:3 entire_mapcount:0 nr_pages_mapped:0 pincount:0
memcg:ffff88802c7b3b81
flags: 0xfff00000000840(slab|head|node=0|zone=1|lastcpupid=0x7ff)
page_type: 0xffffffff()
raw: 00fff00000000840 ffff888012c4f500 dead000000000122 0000000000000000
raw: 0000000000000000 0000000000040004 00000001ffffffff ffff88802c7b3b81
page dumped because: kasan: bad access detected
page_owner tracks the page as allocated
page last allocated via order 3, migratetype Unmovable, gfp_mask 0x1d20c0(__GFP_IO|__GFP_FS|__GFP_NOWARN|__GFP_NORETRY|__GFP_COMP|__GFP_NOMEMALLOC|__GFP_HARDWALL), pid 5403, tgid 5403 (syz-executor.0), ts 78669615880, free_ts 78657614450
set_page_owner include/linux/page_owner.h:31 [inline]
post_alloc_hook+0x1e6/0x210 mm/page_alloc.c:1533
prep_new_page mm/page_alloc.c:1540 [inline]
get_page_from_freelist+0x33ea/0x3570 mm/page_alloc.c:3311
__alloc_pages+0x255/0x680 mm/page_alloc.c:4567
__alloc_pages_node include/linux/gfp.h:238 [inline]
alloc_pages_node include/linux/gfp.h:261 [inline]
alloc_slab_page+0x5f/0x160 mm/slub.c:2190
allocate_slab mm/slub.c:2354 [inline]
new_slab+0x84/0x2f0 mm/slub.c:2407
___slab_alloc+0xd17/0x13d0 mm/slub.c:3540
__slab_alloc mm/slub.c:3625 [inline]
__slab_alloc_node mm/slub.c:3678 [inline]
slab_alloc_node mm/slub.c:3850 [inline]
__do_kmalloc_node mm/slub.c:3980 [inline]
__kmalloc_node_track_caller+0x2cd/0x4e0 mm/slub.c:4001
kmemdup+0x2a/0x60 mm/util.c:131
__addrconf_sysctl_register+0xb1/0x3f0 net/ipv6/addrconf.c:7129
addrconf_sysctl_register+0x167/0x1c0 net/ipv6/addrconf.c:7195
ipv6_add_dev+0xd60/0x1290 net/ipv6/addrconf.c:453
addrconf_notify+0x6a7/0x1010 net/ipv6/addrconf.c:3593
notifier_call_chain+0x18c/0x3b0 kernel/notifier.c:93
call_netdevice_notifiers_extack net/core/dev.c:2004 [inline]
call_netdevice_notifiers net/core/dev.c:2018 [inline]
register_netdevice+0x150c/0x19b0 net/core/dev.c:10294
team_newlink+0x10a/0x170 drivers/net/team/team.c:2217
rtnl_newlink_create net/core/rtnetlink.c:3515 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x1584/0x2080 net/core/rtnetlink.c:3748
page last free pid 5403 tgid 5403 stack trace:
reset_page_owner include/linux/page_owner.h:24 [inline]
free_pages_prepare mm/page_alloc.c:1140 [inline]
free_unref_page_prepare+0x959/0xa80 mm/page_alloc.c:2346
free_unref_page+0x37/0x3f0 mm/page_alloc.c:2486
discard_slab mm/slub.c:2453 [inline]
__put_partials+0xeb/0x130 mm/slub.c:2922
put_cpu_partial+0x17b/0x250 mm/slub.c:2997
__slab_free+0x2fe/0x410 mm/slub.c:4166
qlink_free mm/kasan/quarantine.c:160 [inline]
qlist_free_all+0x6d/0xd0 mm/kasan/quarantine.c:176
kasan_quarantine_reduce+0x14b/0x160 mm/kasan/quarantine.c:283
__kasan_slab_alloc+0x23/0x70 mm/kasan/common.c:324
kasan_slab_alloc include/linux/kasan.h:201 [inline]
slab_post_alloc_hook mm/slub.c:3813 [inline]
slab_alloc_node mm/slub.c:3860 [inline]
kmalloc_trace+0x16a/0x360 mm/slub.c:4007
kmalloc include/linux/slab.h:590 [inline]
kzalloc include/linux/slab.h:711 [inline]
ref_tracker_alloc+0x14b/0x480 lib/ref_tracker.c:203
__netdev_tracker_alloc include/linux/netdevice.h:4147 [inline]
netdev_hold include/linux/netdevice.h:4176 [inline]
rx_queue_add_kobject net/core/net-sysfs.c:1096 [inline]
net_rx_queue_update_kobjects+0x16b/0x5b0 net/core/net-sysfs.c:1154
register_queue_kobjects net/core/net-sysfs.c:1814 [inline]
netdev_register_kobject+0x224/0x310 net/core/net-sysfs.c:2059
register_netdevice+0x118a/0x19b0 net/core/dev.c:10261
bond_newlink+0x3b/0x80 drivers/net/bonding/bond_netlink.c:565
rtnl_newlink_create net/core/rtnetlink.c:3515 [inline]
__rtnl_newlink net/core/rtnetlink.c:3735 [inline]
rtnl_newlink+0x1584/0x2080 net/core/rtnetlink.c:3748
rtnetlink_rcv_msg+0x882/0x1030 net/core/rtnetlink.c:6615
Memory state around the buggy address:
ffff88802c9c2b80: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
ffff88802c9c2c00: 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00
>ffff88802c9c2c80: 00 00 07 fc fc fc fc fc fc fc fc fc fc fc fc fc
^
ffff88802c9c2d00: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
ffff88802c9c2d80: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
==================================================================
Tested on:
commit: 052d5343 Merge tag 'exfat-for-6.8-rc1' of git://git.ke..
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
console output: https://syzkaller.appspot.com/x/log.txt?x=14ccb583e80000
kernel config: https://syzkaller.appspot.com/x/.config?x=490fc2f9d4ae426c
dashboard link: https://syzkaller.appspot.com/bug?extid=7ec955e36bb239bd720f
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
patch: https://syzkaller.appspot.com/x/patch.diff?x=1336162be80000
On Mon, 15 Jan 2024 13:43:20 -0800
> syzbot found the following issue on:
>
> HEAD commit: 3e7aeb78ab01 Merge tag 'net-next-6.8' of git://git.kernel...
> git tree: upstream
> C reproducer: https://syzkaller.appspot.com/x/repro.c?x=12995b33e80000
#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
--- x/net/dsa/user.c
+++ y/net/dsa/user.c
@@ -2806,13 +2806,14 @@ EXPORT_SYMBOL_GPL(dsa_user_dev_check);
static int dsa_user_changeupper(struct net_device *dev,
struct netdev_notifier_changeupper_info *info)
{
- struct dsa_port *dp = dsa_user_to_port(dev);
+ struct dsa_port *dp;
struct netlink_ext_ack *extack;
int err = NOTIFY_DONE;
if (!dsa_user_dev_check(dev))
return err;
+ dp = dsa_user_to_port(dev);
extack = netdev_notifier_info_to_extack(&info->info);
if (netif_is_bridge_master(info->upper_dev)) {
@@ -2865,11 +2866,13 @@ static int dsa_user_changeupper(struct n
static int dsa_user_prechangeupper(struct net_device *dev,
struct netdev_notifier_changeupper_info *info)
{
- struct dsa_port *dp = dsa_user_to_port(dev);
+ struct dsa_port *dp;
if (!dsa_user_dev_check(dev))
return NOTIFY_DONE;
+ dp = dsa_user_to_port(dev);
+
if (netif_is_bridge_master(info->upper_dev) && !info->linking)
dsa_port_pre_bridge_leave(dp, info->upper_dev);
else if (netif_is_lag_master(info->upper_dev) && !info->linking)
--
Hello,
syzbot has tested the proposed patch and the reproducer did not trigger any issue:
Reported-and-tested-by: [email protected]
Tested on:
commit: 052d5343 Merge tag 'exfat-for-6.8-rc1' of git://git.ke..
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master
console output: https://syzkaller.appspot.com/x/log.txt?x=1599ec2be80000
kernel config: https://syzkaller.appspot.com/x/.config?x=490fc2f9d4ae426c
dashboard link: https://syzkaller.appspot.com/bug?extid=7ec955e36bb239bd720f
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
patch: https://syzkaller.appspot.com/x/patch.diff?x=107e9733e80000
Note: testing is done by a robot and is best-effort only.
please test slab-out-of-bounds Read in dsa_user_prechangeupper
#syz test https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 3e7aeb78ab01
diff --git a/net/dsa/user.h b/net/dsa/user.h
index 996069130bea..9a40918ee7fc 100644
--- a/net/dsa/user.h
+++ b/net/dsa/user.h
@@ -53,7 +53,11 @@ int dsa_user_manage_vlan_filtering(struct net_device *dev,
static inline struct dsa_port *dsa_user_to_port(const struct net_device *dev)
{
- struct dsa_user_priv *p = netdev_priv(dev);
+ const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
+ struct dsa_user_priv *p = ops->priv_size >= sizeof(*p) ?
+ netdev_priv(dev) : NULL;
+ if (!p)
+ return NULL;
return p->dp;
}
On Mon, Jan 15, 2024 at 01:43:20PM -0800, syzbot wrote:
> If the report is a duplicate of another one, reply with:
> #syz dup: exact-subject-of-another-report
#syz dup: KASAN: slab-out-of-bounds Read in dsa_user_changeupper
[1] https://lore.kernel.org/netdev/[email protected]/
Hello,
syzbot has tested the proposed patch and the reproducer did not trigger any issue:
Reported-and-tested-by: [email protected]
Tested on:
commit: 3e7aeb78 Merge tag 'net-next-6.8' of git://git.kernel...
git tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
console output: https://syzkaller.appspot.com/x/log.txt?x=16bd716de80000
kernel config: https://syzkaller.appspot.com/x/.config?x=8e557b1c0a57d2c0
dashboard link: https://syzkaller.appspot.com/bug?extid=7ec955e36bb239bd720f
compiler: Debian clang version 15.0.6, GNU ld (GNU Binutils for Debian) 2.40
patch: https://syzkaller.appspot.com/x/patch.diff?x=16e1ff47e80000
Note: testing is done by a robot and is best-effort only.
If the private data is not allocated memory when generating an instance of
struct net_device, i.e. priv_size is too small, then its corresponding private
data should not be accessed.
Reported-and-tested-by: [email protected]
Signed-off-by: Edward Adam Davis <[email protected]>
---
net/dsa/user.h | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/net/dsa/user.h b/net/dsa/user.h
index 996069130bea..9a40918ee7fc 100644
--- a/net/dsa/user.h
+++ b/net/dsa/user.h
@@ -53,7 +53,11 @@ int dsa_user_manage_vlan_filtering(struct net_device *dev,
static inline struct dsa_port *dsa_user_to_port(const struct net_device *dev)
{
- struct dsa_user_priv *p = netdev_priv(dev);
+ const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
+ struct dsa_user_priv *p = ops->priv_size >= sizeof(*p) ?
+ netdev_priv(dev) : NULL;
+ if (!p)
+ return NULL;
return p->dp;
}
--
2.43.0
On Tue, Jan 16, 2024 at 10:56:26PM +0800, Edward Adam Davis wrote:
> If the private data is not allocated memory when generating an instance of
> struct net_device, i.e. priv_size is too small, then its corresponding private
> data should not be accessed.
>
> Reported-and-tested-by: [email protected]
> Signed-off-by: Edward Adam Davis <[email protected]>
> ---
> net/dsa/user.h | 6 +++++-
> 1 file changed, 5 insertions(+), 1 deletion(-)
>
> diff --git a/net/dsa/user.h b/net/dsa/user.h
> index 996069130bea..9a40918ee7fc 100644
> --- a/net/dsa/user.h
> +++ b/net/dsa/user.h
> @@ -53,7 +53,11 @@ int dsa_user_manage_vlan_filtering(struct net_device *dev,
>
> static inline struct dsa_port *dsa_user_to_port(const struct net_device *dev)
> {
> - struct dsa_user_priv *p = netdev_priv(dev);
> + const struct rtnl_link_ops *ops = dev->rtnl_link_ops;
> + struct dsa_user_priv *p = ops->priv_size >= sizeof(*p) ?
> + netdev_priv(dev) : NULL;
> + if (!p)
> + return NULL;
>
> return p->dp;
> }
> --
> 2.43.0
>
The problem has been fixed by:
https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net.git/commit/?id=844f104790bd
pw-bot: rejected