* [syzbot] WARNING in u32_change @ 2022-09-25 11:50 syzbot 2022-09-25 15:38 ` Jamal Hadi Salim 0 siblings, 1 reply; 12+ messages in thread From: syzbot @ 2022-09-25 11:50 UTC (permalink / raw) To: davem, edumazet, jhs, jiri, kuba, linux-kernel, netdev, pabeni, syzkaller-bugs, xiyou.wangcong Hello, syzbot found the following issue on: HEAD commit: 483fed3b5dc8 Add linux-next specific files for 20220921 git tree: linux-next console+strace: https://syzkaller.appspot.com/x/log.txt?x=16becbd5080000 kernel config: https://syzkaller.appspot.com/x/.config?x=849cb9f70f15b1ba dashboard link: https://syzkaller.appspot.com/bug?extid=a2c4601efc75848ba321 compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2 syz repro: https://syzkaller.appspot.com/x/repro.syz?x=13bc196f080000 C reproducer: https://syzkaller.appspot.com/x/repro.c?x=152b15f8880000 Downloadable assets: disk image: https://storage.googleapis.com/syzbot-assets/1cb3f4618323/disk-483fed3b.raw.xz vmlinux: https://storage.googleapis.com/syzbot-assets/cc02cb30b495/vmlinux-483fed3b.xz IMPORTANT: if you fix the issue, please add the following tag to the commit: Reported-by: syzbot+a2c4601efc75848ba321@syzkaller.appspotmail.com ------------[ cut here ]------------ memcpy: detected field-spanning write (size 80) of single field "&n->sel" at net/sched/cls_u32.c:1043 (size 16) WARNING: CPU: 0 PID: 3608 at net/sched/cls_u32.c:1043 u32_change+0x2962/0x3250 net/sched/cls_u32.c:1043 Modules linked in: CPU: 0 PID: 3608 Comm: syz-executor971 Not tainted 6.0.0-rc6-next-20220921-syzkaller #0 Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/16/2022 RIP: 0010:u32_change+0x2962/0x3250 net/sched/cls_u32.c:1043 Code: f4 df 14 fa 48 8b b5 78 fe ff ff b9 10 00 00 00 48 c7 c2 20 f7 f5 8a 48 c7 c7 a0 f6 f5 8a c6 05 55 b3 63 06 01 e8 db d6 df 01 <0f> 0b e9 73 f3 ff ff e8 c2 df 14 fa 48 c7 c7 00 fc f5 8a e8 66 ed RSP: 0018:ffffc90003d7f300 EFLAGS: 00010282 RAX: 0000000000000000 RBX: ffffc90003d7f618 RCX: 0000000000000000 RDX: ffff8880235f1d40 RSI: ffffffff81620348 RDI: fffff520007afe52 RBP: ffffc90003d7f4a0 R08: 0000000000000005 R09: 0000000000000000 R10: 0000000080000000 R11: 203a7970636d656d R12: ffff888021d420e0 R13: ffffc90003d7f5b8 R14: ffff888021d43c30 R15: ffff888021d42000 FS: 0000555555f71300(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000 CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 CR2: 000000000064a110 CR3: 000000002824c000 CR4: 00000000003506f0 DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 Call Trace: <TASK> tc_new_tfilter+0x938/0x2190 net/sched/cls_api.c:2146 rtnetlink_rcv_msg+0x955/0xca0 net/core/rtnetlink.c:6082 netlink_rcv_skb+0x153/0x420 net/netlink/af_netlink.c:2540 netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline] netlink_unicast+0x543/0x7f0 net/netlink/af_netlink.c:1345 netlink_sendmsg+0x917/0xe10 net/netlink/af_netlink.c:1921 sock_sendmsg_nosec net/socket.c:714 [inline] sock_sendmsg+0xcf/0x120 net/socket.c:734 ____sys_sendmsg+0x712/0x8c0 net/socket.c:2482 ___sys_sendmsg+0x110/0x1b0 net/socket.c:2536 __sys_sendmsg+0xf3/0x1c0 net/socket.c:2565 do_syscall_x64 arch/x86/entry/common.c:50 [inline] do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80 entry_SYSCALL_64_after_hwframe+0x63/0xcd RIP: 0033:0x7f97a4bf4e69 Code: 28 c3 e8 2a 14 00 00 66 2e 0f 1f 84 00 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 c0 ff ff ff f7 d8 64 89 01 48 RSP: 002b:00007ffdcaf10028 EFLAGS: 00000246 ORIG_RAX: 000000000000002e RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f97a4bf4e69 RDX: 0000000000000000 RSI: 0000000020000340 RDI: 0000000000000006 RBP: 00007f97a4bb9010 R08: 0000000000000000 R09: 0000000000000000 R10: 0000000000000000 R11: 0000000000000246 R12: 00007f97a4bb90a0 R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 </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. syzbot can test patches for this issue, for details see: https://goo.gl/tpsmEJ#testing-patches ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 11:50 [syzbot] WARNING in u32_change syzbot @ 2022-09-25 15:38 ` Jamal Hadi Salim 2022-09-25 16:14 ` Jamal Hadi Salim 2022-10-06 7:55 ` Dmitry Vyukov 0 siblings, 2 replies; 12+ messages in thread From: Jamal Hadi Salim @ 2022-09-25 15:38 UTC (permalink / raw) To: syzbot Cc: davem, edumazet, jiri, kuba, linux-kernel, netdev, pabeni, syzkaller-bugs, xiyou.wangcong Is there a way to tell the boat "looking into it?" cheers, jamal On Sun, Sep 25, 2022 at 7:50 AM syzbot <syzbot+a2c4601efc75848ba321@syzkaller.appspotmail.com> wrote: > > Hello, > > syzbot found the following issue on: > > HEAD commit: 483fed3b5dc8 Add linux-next specific files for 20220921 > git tree: linux-next > console+strace: https://syzkaller.appspot.com/x/log.txt?x=16becbd5080000 > kernel config: https://syzkaller.appspot.com/x/.config?x=849cb9f70f15b1ba > dashboard link: https://syzkaller.appspot.com/bug?extid=a2c4601efc75848ba321 > compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2 > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=13bc196f080000 > C reproducer: https://syzkaller.appspot.com/x/repro.c?x=152b15f8880000 > > Downloadable assets: > disk image: https://storage.googleapis.com/syzbot-assets/1cb3f4618323/disk-483fed3b.raw.xz > vmlinux: https://storage.googleapis.com/syzbot-assets/cc02cb30b495/vmlinux-483fed3b.xz > > IMPORTANT: if you fix the issue, please add the following tag to the commit: > Reported-by: syzbot+a2c4601efc75848ba321@syzkaller.appspotmail.com > > ------------[ cut here ]------------ > memcpy: detected field-spanning write (size 80) of single field "&n->sel" at net/sched/cls_u32.c:1043 (size 16) > WARNING: CPU: 0 PID: 3608 at net/sched/cls_u32.c:1043 u32_change+0x2962/0x3250 net/sched/cls_u32.c:1043 > Modules linked in: > CPU: 0 PID: 3608 Comm: syz-executor971 Not tainted 6.0.0-rc6-next-20220921-syzkaller #0 > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/16/2022 > RIP: 0010:u32_change+0x2962/0x3250 net/sched/cls_u32.c:1043 > Code: f4 df 14 fa 48 8b b5 78 fe ff ff b9 10 00 00 00 48 c7 c2 20 f7 f5 8a 48 c7 c7 a0 f6 f5 8a c6 05 55 b3 63 06 01 e8 db d6 df 01 <0f> 0b e9 73 f3 ff ff e8 c2 df 14 fa 48 c7 c7 00 fc f5 8a e8 66 ed > RSP: 0018:ffffc90003d7f300 EFLAGS: 00010282 > RAX: 0000000000000000 RBX: ffffc90003d7f618 RCX: 0000000000000000 > RDX: ffff8880235f1d40 RSI: ffffffff81620348 RDI: fffff520007afe52 > RBP: ffffc90003d7f4a0 R08: 0000000000000005 R09: 0000000000000000 > R10: 0000000080000000 R11: 203a7970636d656d R12: ffff888021d420e0 > R13: ffffc90003d7f5b8 R14: ffff888021d43c30 R15: ffff888021d42000 > FS: 0000555555f71300(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000 > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > CR2: 000000000064a110 CR3: 000000002824c000 CR4: 00000000003506f0 > DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 > Call Trace: > <TASK> > tc_new_tfilter+0x938/0x2190 net/sched/cls_api.c:2146 > rtnetlink_rcv_msg+0x955/0xca0 net/core/rtnetlink.c:6082 > netlink_rcv_skb+0x153/0x420 net/netlink/af_netlink.c:2540 > netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline] > netlink_unicast+0x543/0x7f0 net/netlink/af_netlink.c:1345 > netlink_sendmsg+0x917/0xe10 net/netlink/af_netlink.c:1921 > sock_sendmsg_nosec net/socket.c:714 [inline] > sock_sendmsg+0xcf/0x120 net/socket.c:734 > ____sys_sendmsg+0x712/0x8c0 net/socket.c:2482 > ___sys_sendmsg+0x110/0x1b0 net/socket.c:2536 > __sys_sendmsg+0xf3/0x1c0 net/socket.c:2565 > do_syscall_x64 arch/x86/entry/common.c:50 [inline] > do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80 > entry_SYSCALL_64_after_hwframe+0x63/0xcd > RIP: 0033:0x7f97a4bf4e69 > Code: 28 c3 e8 2a 14 00 00 66 2e 0f 1f 84 00 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 c0 ff ff ff f7 d8 64 89 01 48 > RSP: 002b:00007ffdcaf10028 EFLAGS: 00000246 ORIG_RAX: 000000000000002e > RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f97a4bf4e69 > RDX: 0000000000000000 RSI: 0000000020000340 RDI: 0000000000000006 > RBP: 00007f97a4bb9010 R08: 0000000000000000 R09: 0000000000000000 > R10: 0000000000000000 R11: 0000000000000246 R12: 00007f97a4bb90a0 > R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 > </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. > syzbot can test patches for this issue, for details see: > https://goo.gl/tpsmEJ#testing-patches ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 15:38 ` Jamal Hadi Salim @ 2022-09-25 16:14 ` Jamal Hadi Salim 2022-09-25 16:28 ` Eric Dumazet 2022-09-26 10:18 ` Dan Carpenter 2022-10-06 7:55 ` Dmitry Vyukov 1 sibling, 2 replies; 12+ messages in thread From: Jamal Hadi Salim @ 2022-09-25 16:14 UTC (permalink / raw) To: syzbot Cc: davem, edumazet, jiri, kuba, linux-kernel, netdev, pabeni, syzkaller-bugs, xiyou.wangcong On Sun, Sep 25, 2022 at 11:38 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > Is there a way to tell the boat "looking into it?" I guess I have to swim across to it to get the message;-> I couldnt see the warning message but it is obvious by inspection that the memcpy is broken. We should add more test coverage. This should fix it. Will send a formal patch later: diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 4d27300c2..591cbbf27 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -1019,7 +1019,7 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, } s = nla_data(tb[TCA_U32_SEL]); - sel_size = struct_size(s, keys, s->nkeys); + sel_size = struct_size(s, keys, s->nkeys) + sizeof(n->sel); if (nla_len(tb[TCA_U32_SEL]) < sel_size) { err = -EINVAL; goto erridr; ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 16:14 ` Jamal Hadi Salim @ 2022-09-25 16:28 ` Eric Dumazet 2022-09-25 17:08 ` Jamal Hadi Salim 2022-09-26 10:18 ` Dan Carpenter 1 sibling, 1 reply; 12+ messages in thread From: Eric Dumazet @ 2022-09-25 16:28 UTC (permalink / raw) To: Jamal Hadi Salim Cc: syzbot, David Miller, Jiri Pirko, Jakub Kicinski, LKML, netdev, Paolo Abeni, syzkaller-bugs, Cong Wang, Kees Cook On Sun, Sep 25, 2022 at 9:14 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > On Sun, Sep 25, 2022 at 11:38 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > Is there a way to tell the boat "looking into it?" > > > I guess I have to swim across to it to get the message;-> > > I couldnt see the warning message but it is obvious by inspection that > the memcpy is broken. We should add more test coverage. > This should fix it. Will send a formal patch later: > > diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c > index 4d27300c2..591cbbf27 100644 > --- a/net/sched/cls_u32.c > +++ b/net/sched/cls_u32.c > @@ -1019,7 +1019,7 @@ static int u32_change(struct net *net, struct > sk_buff *in_skb, > } > > s = nla_data(tb[TCA_U32_SEL]); > - sel_size = struct_size(s, keys, s->nkeys); > + sel_size = struct_size(s, keys, s->nkeys) + sizeof(n->sel); > if (nla_len(tb[TCA_U32_SEL]) < sel_size) { > err = -EINVAL; > goto erridr; This patch is not needed, please look at struct_size() definition. Here, we might switch to unsafe_memcpy() instead of memcpy() ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 16:28 ` Eric Dumazet @ 2022-09-25 17:08 ` Jamal Hadi Salim 2022-09-25 17:13 ` Jamal Hadi Salim 0 siblings, 1 reply; 12+ messages in thread From: Jamal Hadi Salim @ 2022-09-25 17:08 UTC (permalink / raw) To: Eric Dumazet Cc: syzbot, David Miller, Jiri Pirko, Jakub Kicinski, LKML, netdev, Paolo Abeni, syzkaller-bugs, Cong Wang, Kees Cook Yes, after testing i realize there is nothing wrong here. What warning was i supposed to see from running the reproducer? We will still add the test will multiple keys later cheers, jamal On Sun, Sep 25, 2022 at 12:29 PM Eric Dumazet <edumazet@google.com> wrote: > > On Sun, Sep 25, 2022 at 9:14 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > On Sun, Sep 25, 2022 at 11:38 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > > > Is there a way to tell the boat "looking into it?" > > > > > > I guess I have to swim across to it to get the message;-> > > > > I couldnt see the warning message but it is obvious by inspection that > > the memcpy is broken. We should add more test coverage. > > This should fix it. Will send a formal patch later: > > > > diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c > > index 4d27300c2..591cbbf27 100644 > > --- a/net/sched/cls_u32.c > > +++ b/net/sched/cls_u32.c > > @@ -1019,7 +1019,7 @@ static int u32_change(struct net *net, struct > > sk_buff *in_skb, > > } > > > > s = nla_data(tb[TCA_U32_SEL]); > > - sel_size = struct_size(s, keys, s->nkeys); > > + sel_size = struct_size(s, keys, s->nkeys) + sizeof(n->sel); > > if (nla_len(tb[TCA_U32_SEL]) < sel_size) { > > err = -EINVAL; > > goto erridr; > > This patch is not needed, please look at struct_size() definition. > > Here, we might switch to unsafe_memcpy() instead of memcpy() ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 17:08 ` Jamal Hadi Salim @ 2022-09-25 17:13 ` Jamal Hadi Salim 2022-09-25 17:34 ` Eric Dumazet 0 siblings, 1 reply; 12+ messages in thread From: Jamal Hadi Salim @ 2022-09-25 17:13 UTC (permalink / raw) To: Eric Dumazet Cc: syzbot, David Miller, Jiri Pirko, Jakub Kicinski, LKML, netdev, Paolo Abeni, syzkaller-bugs, Cong Wang, Kees Cook To be clear, that splat didnt happen for me. Is there something else syzbot does to activate it? cheers, jamal On Sun, Sep 25, 2022 at 1:08 PM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > Yes, after testing i realize there is nothing wrong here. > What warning was i supposed to see from running the reproducer? > > We will still add the test will multiple keys later > > cheers, > jamal > > On Sun, Sep 25, 2022 at 12:29 PM Eric Dumazet <edumazet@google.com> wrote: > > > > On Sun, Sep 25, 2022 at 9:14 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > > > On Sun, Sep 25, 2022 at 11:38 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > > > > > Is there a way to tell the boat "looking into it?" > > > > > > > > > I guess I have to swim across to it to get the message;-> > > > > > > I couldnt see the warning message but it is obvious by inspection that > > > the memcpy is broken. We should add more test coverage. > > > This should fix it. Will send a formal patch later: > > > > > > diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c > > > index 4d27300c2..591cbbf27 100644 > > > --- a/net/sched/cls_u32.c > > > +++ b/net/sched/cls_u32.c > > > @@ -1019,7 +1019,7 @@ static int u32_change(struct net *net, struct > > > sk_buff *in_skb, > > > } > > > > > > s = nla_data(tb[TCA_U32_SEL]); > > > - sel_size = struct_size(s, keys, s->nkeys); > > > + sel_size = struct_size(s, keys, s->nkeys) + sizeof(n->sel); > > > if (nla_len(tb[TCA_U32_SEL]) < sel_size) { > > > err = -EINVAL; > > > goto erridr; > > > > This patch is not needed, please look at struct_size() definition. > > > > Here, we might switch to unsafe_memcpy() instead of memcpy() ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 17:13 ` Jamal Hadi Salim @ 2022-09-25 17:34 ` Eric Dumazet 2022-09-26 2:39 ` Kees Cook 0 siblings, 1 reply; 12+ messages in thread From: Eric Dumazet @ 2022-09-25 17:34 UTC (permalink / raw) To: Jamal Hadi Salim Cc: syzbot, David Miller, Jiri Pirko, Jakub Kicinski, LKML, netdev, Paolo Abeni, syzkaller-bugs, Cong Wang, Kees Cook On Sun, Sep 25, 2022 at 10:13 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > To be clear, that splat didnt happen for me. > Is there something else syzbot does to activate it? Sure, please look at: commit 54d9469bc515dc5fcbc20eecbe19cea868b70d68 Author: Kees Cook <keescook@chromium.org> Date: Thu Jun 24 15:39:26 2021 -0700 fortify: Add run-time WARN for cross-field memcpy() > > cheers, > jamal > > On Sun, Sep 25, 2022 at 1:08 PM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > Yes, after testing i realize there is nothing wrong here. > > What warning was i supposed to see from running the reproducer? > > > > We will still add the test will multiple keys later > > > > cheers, > > jamal > > > > On Sun, Sep 25, 2022 at 12:29 PM Eric Dumazet <edumazet@google.com> wrote: > > > > > > On Sun, Sep 25, 2022 at 9:14 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > > > > > On Sun, Sep 25, 2022 at 11:38 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > > > > > > > Is there a way to tell the boat "looking into it?" > > > > > > > > > > > > I guess I have to swim across to it to get the message;-> > > > > > > > > I couldnt see the warning message but it is obvious by inspection that > > > > the memcpy is broken. We should add more test coverage. > > > > This should fix it. Will send a formal patch later: > > > > > > > > diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c > > > > index 4d27300c2..591cbbf27 100644 > > > > --- a/net/sched/cls_u32.c > > > > +++ b/net/sched/cls_u32.c > > > > @@ -1019,7 +1019,7 @@ static int u32_change(struct net *net, struct > > > > sk_buff *in_skb, > > > > } > > > > > > > > s = nla_data(tb[TCA_U32_SEL]); > > > > - sel_size = struct_size(s, keys, s->nkeys); > > > > + sel_size = struct_size(s, keys, s->nkeys) + sizeof(n->sel); > > > > if (nla_len(tb[TCA_U32_SEL]) < sel_size) { > > > > err = -EINVAL; > > > > goto erridr; > > > > > > This patch is not needed, please look at struct_size() definition. > > > > > > Here, we might switch to unsafe_memcpy() instead of memcpy() ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 17:34 ` Eric Dumazet @ 2022-09-26 2:39 ` Kees Cook 2022-09-26 2:52 ` Kees Cook 2022-09-27 11:23 ` Jamal Hadi Salim 0 siblings, 2 replies; 12+ messages in thread From: Kees Cook @ 2022-09-26 2:39 UTC (permalink / raw) To: Eric Dumazet Cc: Jamal Hadi Salim, syzbot, David Miller, Jiri Pirko, Jakub Kicinski, LKML, netdev, Paolo Abeni, syzkaller-bugs, Cong Wang On Sun, Sep 25, 2022 at 10:34:37AM -0700, Eric Dumazet wrote: > Sure, please look at: > > commit 54d9469bc515dc5fcbc20eecbe19cea868b70d68 > Author: Kees Cook <keescook@chromium.org> > Date: Thu Jun 24 15:39:26 2021 -0700 > > fortify: Add run-time WARN for cross-field memcpy() > [...] > Here, we might switch to unsafe_memcpy() instead of memcpy() I would tend to agree. Something like: diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c index 4d27300c287c..21e0e6206ecc 100644 --- a/net/sched/cls_u32.c +++ b/net/sched/cls_u32.c @@ -1040,7 +1040,9 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, } #endif - memcpy(&n->sel, s, sel_size); + unsafe_memcpy(&n->sel, s, sel_size, + /* A composite flex-array structure destination, + * which was correctly sized and allocated above. */); RCU_INIT_POINTER(n->ht_up, ht); n->handle = handle; n->fshift = s->hmask ? ffs(ntohl(s->hmask)) - 1 : 0; This alloc/partial-copy pattern is relatively common in the kernel, so I've been considering adding a helper for it. It'd be like kmemdup(), but more like kmemdup_offset(), which only the object from a certainly point is copied. -- Kees Cook ^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-26 2:39 ` Kees Cook @ 2022-09-26 2:52 ` Kees Cook 2022-09-27 11:23 ` Jamal Hadi Salim 1 sibling, 0 replies; 12+ messages in thread From: Kees Cook @ 2022-09-26 2:52 UTC (permalink / raw) To: Eric Dumazet Cc: Jamal Hadi Salim, syzbot, David Miller, Jiri Pirko, Jakub Kicinski, LKML, netdev, Paolo Abeni, syzkaller-bugs, Cong Wang, Gustavo A. R. Silva On Sun, Sep 25, 2022 at 07:39:23PM -0700, Kees Cook wrote: > On Sun, Sep 25, 2022 at 10:34:37AM -0700, Eric Dumazet wrote: > > Sure, please look at: > > > > commit 54d9469bc515dc5fcbc20eecbe19cea868b70d68 > > Author: Kees Cook <keescook@chromium.org> > > Date: Thu Jun 24 15:39:26 2021 -0700 > > > > fortify: Add run-time WARN for cross-field memcpy() > > [...] > > Here, we might switch to unsafe_memcpy() instead of memcpy() > > I would tend to agree. Something like: > > diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c > index 4d27300c287c..21e0e6206ecc 100644 > --- a/net/sched/cls_u32.c > +++ b/net/sched/cls_u32.c > @@ -1040,7 +1040,9 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, > } > #endif > > - memcpy(&n->sel, s, sel_size); > + unsafe_memcpy(&n->sel, s, sel_size, > + /* A composite flex-array structure destination, > + * which was correctly sized and allocated above. */); > RCU_INIT_POINTER(n->ht_up, ht); > n->handle = handle; > n->fshift = s->hmask ? ffs(ntohl(s->hmask)) - 1 : 0; Ah, there is another in the same source file, in u32_init_knode(): memcpy(&new->sel, s, struct_size(s, keys, s->nkeys)); (I've been trying to convince Coccinelle to produce a list of all the composite structure targets, but I keep running into weird glitches. That it hadn't found this one let me track down the latest issue, so now I should be able to find more! Whew.) -- Kees Cook ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-26 2:39 ` Kees Cook 2022-09-26 2:52 ` Kees Cook @ 2022-09-27 11:23 ` Jamal Hadi Salim 1 sibling, 0 replies; 12+ messages in thread From: Jamal Hadi Salim @ 2022-09-27 11:23 UTC (permalink / raw) To: Kees Cook Cc: Eric Dumazet, syzbot, David Miller, Jiri Pirko, Jakub Kicinski, LKML, netdev, Paolo Abeni, syzkaller-bugs, Cong Wang Do you want to submit that patch then? FWIW, I could not recreate what syzbot saw even after setting CONFIG_FORTIFY_SOURCE=y cheers, jamal On Sun, Sep 25, 2022 at 10:39 PM Kees Cook <keescook@chromium.org> wrote: > > On Sun, Sep 25, 2022 at 10:34:37AM -0700, Eric Dumazet wrote: > > Sure, please look at: > > > > commit 54d9469bc515dc5fcbc20eecbe19cea868b70d68 > > Author: Kees Cook <keescook@chromium.org> > > Date: Thu Jun 24 15:39:26 2021 -0700 > > > > fortify: Add run-time WARN for cross-field memcpy() > > [...] > > Here, we might switch to unsafe_memcpy() instead of memcpy() > > I would tend to agree. Something like: > > diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c > index 4d27300c287c..21e0e6206ecc 100644 > --- a/net/sched/cls_u32.c > +++ b/net/sched/cls_u32.c > @@ -1040,7 +1040,9 @@ static int u32_change(struct net *net, struct sk_buff *in_skb, > } > #endif > > - memcpy(&n->sel, s, sel_size); > + unsafe_memcpy(&n->sel, s, sel_size, > + /* A composite flex-array structure destination, > + * which was correctly sized and allocated above. */); > RCU_INIT_POINTER(n->ht_up, ht); > n->handle = handle; > n->fshift = s->hmask ? ffs(ntohl(s->hmask)) - 1 : 0; > > This alloc/partial-copy pattern is relatively common in the kernel, so > I've been considering adding a helper for it. It'd be like kmemdup(), > but more like kmemdup_offset(), which only the object from a certainly > point is copied. > > -- > Kees Cook ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 16:14 ` Jamal Hadi Salim 2022-09-25 16:28 ` Eric Dumazet @ 2022-09-26 10:18 ` Dan Carpenter 1 sibling, 0 replies; 12+ messages in thread From: Dan Carpenter @ 2022-09-26 10:18 UTC (permalink / raw) To: Jamal Hadi Salim Cc: syzbot, davem, edumazet, jiri, kuba, linux-kernel, netdev, pabeni, syzkaller-bugs, xiyou.wangcong On Sun, Sep 25, 2022 at 12:14:44PM -0400, Jamal Hadi Salim wrote: > On Sun, Sep 25, 2022 at 11:38 AM Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > > > Is there a way to tell the boat "looking into it?" > > > I guess I have to swim across to it to get the message;-> > > I couldnt see the warning message but it is obvious by inspection that > the memcpy is broken. We should add more test coverage. > This should fix it. Will send a formal patch later: > > diff --git a/net/sched/cls_u32.c b/net/sched/cls_u32.c > index 4d27300c2..591cbbf27 100644 > --- a/net/sched/cls_u32.c > +++ b/net/sched/cls_u32.c > @@ -1019,7 +1019,7 @@ static int u32_change(struct net *net, struct > sk_buff *in_skb, > } > > s = nla_data(tb[TCA_U32_SEL]); > - sel_size = struct_size(s, keys, s->nkeys); > + sel_size = struct_size(s, keys, s->nkeys) + sizeof(n->sel); Smatch will soon start complaining about these. Can we instead do: sel_size = size_add(struct_size(s, keys, s->nkeys), sizeof(n->sel)); Probably eventually Smatch will be able to detect some times when struct_size() is used for readability and not for safety so maybe it won't warn... regards, dan carpenter ^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [syzbot] WARNING in u32_change 2022-09-25 15:38 ` Jamal Hadi Salim 2022-09-25 16:14 ` Jamal Hadi Salim @ 2022-10-06 7:55 ` Dmitry Vyukov 1 sibling, 0 replies; 12+ messages in thread From: Dmitry Vyukov @ 2022-10-06 7:55 UTC (permalink / raw) To: Jamal Hadi Salim, syzkaller Cc: syzbot, davem, edumazet, jiri, kuba, linux-kernel, netdev, pabeni, syzkaller-bugs, xiyou.wangcong On Sun, 25 Sept 2022 at 17:38, Jamal Hadi Salim <jhs@mojatatu.com> wrote: > > Is there a way to tell the boat "looking into it?" Hi Jamal, No, there is no way. How do you propose the bot use that information? If it won't use it, then there is no point in telling it. Though, it makes sense to tell this to other people. But for that I guess you just leave a note on the email thread. > On Sun, Sep 25, 2022 at 7:50 AM syzbot > <syzbot+a2c4601efc75848ba321@syzkaller.appspotmail.com> wrote: > > > > Hello, > > > > syzbot found the following issue on: > > > > HEAD commit: 483fed3b5dc8 Add linux-next specific files for 20220921 > > git tree: linux-next > > console+strace: https://syzkaller.appspot.com/x/log.txt?x=16becbd5080000 > > kernel config: https://syzkaller.appspot.com/x/.config?x=849cb9f70f15b1ba > > dashboard link: https://syzkaller.appspot.com/bug?extid=a2c4601efc75848ba321 > > compiler: gcc (Debian 10.2.1-6) 10.2.1 20210110, GNU ld (GNU Binutils for Debian) 2.35.2 > > syz repro: https://syzkaller.appspot.com/x/repro.syz?x=13bc196f080000 > > C reproducer: https://syzkaller.appspot.com/x/repro.c?x=152b15f8880000 > > > > Downloadable assets: > > disk image: https://storage.googleapis.com/syzbot-assets/1cb3f4618323/disk-483fed3b.raw.xz > > vmlinux: https://storage.googleapis.com/syzbot-assets/cc02cb30b495/vmlinux-483fed3b.xz > > > > IMPORTANT: if you fix the issue, please add the following tag to the commit: > > Reported-by: syzbot+a2c4601efc75848ba321@syzkaller.appspotmail.com > > > > ------------[ cut here ]------------ > > memcpy: detected field-spanning write (size 80) of single field "&n->sel" at net/sched/cls_u32.c:1043 (size 16) > > WARNING: CPU: 0 PID: 3608 at net/sched/cls_u32.c:1043 u32_change+0x2962/0x3250 net/sched/cls_u32.c:1043 > > Modules linked in: > > CPU: 0 PID: 3608 Comm: syz-executor971 Not tainted 6.0.0-rc6-next-20220921-syzkaller #0 > > Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 09/16/2022 > > RIP: 0010:u32_change+0x2962/0x3250 net/sched/cls_u32.c:1043 > > Code: f4 df 14 fa 48 8b b5 78 fe ff ff b9 10 00 00 00 48 c7 c2 20 f7 f5 8a 48 c7 c7 a0 f6 f5 8a c6 05 55 b3 63 06 01 e8 db d6 df 01 <0f> 0b e9 73 f3 ff ff e8 c2 df 14 fa 48 c7 c7 00 fc f5 8a e8 66 ed > > RSP: 0018:ffffc90003d7f300 EFLAGS: 00010282 > > RAX: 0000000000000000 RBX: ffffc90003d7f618 RCX: 0000000000000000 > > RDX: ffff8880235f1d40 RSI: ffffffff81620348 RDI: fffff520007afe52 > > RBP: ffffc90003d7f4a0 R08: 0000000000000005 R09: 0000000000000000 > > R10: 0000000080000000 R11: 203a7970636d656d R12: ffff888021d420e0 > > R13: ffffc90003d7f5b8 R14: ffff888021d43c30 R15: ffff888021d42000 > > FS: 0000555555f71300(0000) GS:ffff8880b9a00000(0000) knlGS:0000000000000000 > > CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 > > CR2: 000000000064a110 CR3: 000000002824c000 CR4: 00000000003506f0 > > DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 > > DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 > > Call Trace: > > <TASK> > > tc_new_tfilter+0x938/0x2190 net/sched/cls_api.c:2146 > > rtnetlink_rcv_msg+0x955/0xca0 net/core/rtnetlink.c:6082 > > netlink_rcv_skb+0x153/0x420 net/netlink/af_netlink.c:2540 > > netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline] > > netlink_unicast+0x543/0x7f0 net/netlink/af_netlink.c:1345 > > netlink_sendmsg+0x917/0xe10 net/netlink/af_netlink.c:1921 > > sock_sendmsg_nosec net/socket.c:714 [inline] > > sock_sendmsg+0xcf/0x120 net/socket.c:734 > > ____sys_sendmsg+0x712/0x8c0 net/socket.c:2482 > > ___sys_sendmsg+0x110/0x1b0 net/socket.c:2536 > > __sys_sendmsg+0xf3/0x1c0 net/socket.c:2565 > > do_syscall_x64 arch/x86/entry/common.c:50 [inline] > > do_syscall_64+0x35/0xb0 arch/x86/entry/common.c:80 > > entry_SYSCALL_64_after_hwframe+0x63/0xcd > > RIP: 0033:0x7f97a4bf4e69 > > Code: 28 c3 e8 2a 14 00 00 66 2e 0f 1f 84 00 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 c0 ff ff ff f7 d8 64 89 01 48 > > RSP: 002b:00007ffdcaf10028 EFLAGS: 00000246 ORIG_RAX: 000000000000002e > > RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 00007f97a4bf4e69 > > RDX: 0000000000000000 RSI: 0000000020000340 RDI: 0000000000000006 > > RBP: 00007f97a4bb9010 R08: 0000000000000000 R09: 0000000000000000 > > R10: 0000000000000000 R11: 0000000000000246 R12: 00007f97a4bb90a0 > > R13: 0000000000000000 R14: 0000000000000000 R15: 0000000000000000 > > </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. > > syzbot can test patches for this issue, for details see: > > https://goo.gl/tpsmEJ#testing-patches > > -- > You received this message because you are subscribed to the Google Groups "syzkaller-bugs" group. > To unsubscribe from this group and stop receiving emails from it, send an email to syzkaller-bugs+unsubscribe@googlegroups.com. > To view this discussion on the web visit https://groups.google.com/d/msgid/syzkaller-bugs/CAM0EoMnJ%3DSTtk5BnZ9oJtnkXY2Q%2BPx2cKa4gowFRGpp40UNKww%40mail.gmail.com. ^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2022-10-06 7:55 UTC | newest] Thread overview: 12+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2022-09-25 11:50 [syzbot] WARNING in u32_change syzbot 2022-09-25 15:38 ` Jamal Hadi Salim 2022-09-25 16:14 ` Jamal Hadi Salim 2022-09-25 16:28 ` Eric Dumazet 2022-09-25 17:08 ` Jamal Hadi Salim 2022-09-25 17:13 ` Jamal Hadi Salim 2022-09-25 17:34 ` Eric Dumazet 2022-09-26 2:39 ` Kees Cook 2022-09-26 2:52 ` Kees Cook 2022-09-27 11:23 ` Jamal Hadi Salim 2022-09-26 10:18 ` Dan Carpenter 2022-10-06 7:55 ` Dmitry Vyukov
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).