All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jiri Pirko <jiri@resnulli.us>
To: Lin Ma <linma@zju.edu.cn>
Cc: quic_subashab@quicinc.com, quic_stranche@quicinc.com,
	davem@davemloft.net, edumazet@google.com, kuba@kernel.org,
	pabeni@redhat.com, netdev@vger.kernel.org,
	linux-kernel@vger.kernel.org
Subject: Re: [PATCH net v1] net: qualcomm: rmnet: fix global oob in rmnet_policy
Date: Wed, 10 Jan 2024 17:32:35 +0100	[thread overview]
Message-ID: <ZZ7Go2Y2fURBU974@nanopsycho> (raw)
In-Reply-To: <20240110061400.3356108-1-linma@zju.edu.cn>

Wed, Jan 10, 2024 at 07:14:00AM CET, linma@zju.edu.cn wrote:
>The variable rmnet_link_ops assign a *bigger* maxtype which leads to a
>global out-of-bounds read when parsing the netlink attributes. See bug
>trace below:
>
>==================================================================
>BUG: KASAN: global-out-of-bounds in validate_nla lib/nlattr.c:386 [inline]
>BUG: KASAN: global-out-of-bounds in __nla_validate_parse+0x24af/0x2750 lib/nlattr.c:600
>Read of size 1 at addr ffffffff92c438d0 by task syz-executor.6/84207
>
>CPU: 0 PID: 84207 Comm: syz-executor.6 Tainted: G                 N 6.1.0 #3
>Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.13.0-1ubuntu1.1 04/01/2014
>Call Trace:
> <TASK>
> __dump_stack lib/dump_stack.c:88 [inline]
> dump_stack_lvl+0x8b/0xb3 lib/dump_stack.c:106
> print_address_description mm/kasan/report.c:284 [inline]
> print_report+0x172/0x475 mm/kasan/report.c:395
> kasan_report+0xbb/0x1c0 mm/kasan/report.c:495
> validate_nla lib/nlattr.c:386 [inline]
> __nla_validate_parse+0x24af/0x2750 lib/nlattr.c:600
> __nla_parse+0x3e/0x50 lib/nlattr.c:697
> nla_parse_nested_deprecated include/net/netlink.h:1248 [inline]
> __rtnl_newlink+0x50a/0x1880 net/core/rtnetlink.c:3485
> rtnl_newlink+0x64/0xa0 net/core/rtnetlink.c:3594
> rtnetlink_rcv_msg+0x43c/0xd70 net/core/rtnetlink.c:6091
> netlink_rcv_skb+0x14f/0x410 net/netlink/af_netlink.c:2540
> netlink_unicast_kernel net/netlink/af_netlink.c:1319 [inline]
> netlink_unicast+0x54e/0x800 net/netlink/af_netlink.c:1345
> netlink_sendmsg+0x930/0xe50 net/netlink/af_netlink.c:1921
> sock_sendmsg_nosec net/socket.c:714 [inline]
> sock_sendmsg+0x154/0x190 net/socket.c:734
> ____sys_sendmsg+0x6df/0x840 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+0x3b/0x90 arch/x86/entry/common.c:80
> entry_SYSCALL_64_after_hwframe+0x63/0xcd
>RIP: 0033:0x7fdcf2072359
>Code: 28 00 00 00 75 05 48 83 c4 28 c3 e8 f1 19 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 b8 ff ff ff f7 d8 64 89 01 48
>RSP: 002b:00007fdcf13e3168 EFLAGS: 00000246 ORIG_RAX: 000000000000002e
>RAX: ffffffffffffffda RBX: 00007fdcf219ff80 RCX: 00007fdcf2072359
>RDX: 0000000000000000 RSI: 0000000020000200 RDI: 0000000000000003
>RBP: 00007fdcf20bd493 R08: 0000000000000000 R09: 0000000000000000
>R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000000
>R13: 00007fffbb8d7bdf R14: 00007fdcf13e3300 R15: 0000000000022000
> </TASK>
>
>The buggy address belongs to the variable:
> rmnet_policy+0x30/0xe0
>
>The buggy address belongs to the physical page:
>page:0000000065bdeb3c refcount:1 mapcount:0 mapping:0000000000000000 index:0x0 pfn:0x155243
>flags: 0x200000000001000(reserved|node=0|zone=2)
>raw: 0200000000001000 ffffea00055490c8 ffffea00055490c8 0000000000000000
>raw: 0000000000000000 0000000000000000 00000001ffffffff 0000000000000000
>page dumped because: kasan: bad access detected
>
>Memory state around the buggy address:
> ffffffff92c43780: f9 f9 f9 f9 00 00 00 02 f9 f9 f9 f9 00 00 00 07
> ffffffff92c43800: f9 f9 f9 f9 00 00 00 05 f9 f9 f9 f9 06 f9 f9 f9
>>ffffffff92c43880: f9 f9 f9 f9 00 00 00 00 00 00 f9 f9 f9 f9 f9 f9
>                                                 ^
> ffffffff92c43900: 00 00 00 00 00 00 00 00 07 f9 f9 f9 f9 f9 f9 f9
> ffffffff92c43980: 00 00 00 07 f9 f9 f9 f9 00 00 00 05 f9 f9 f9 f9
>
>According to the comment of `nla_parse_nested_deprecated`, the maxtype
>should be len(destination array) - 1. Hence use `IFLA_RMNET_MAX` here.
>
>Fixes: 14452ca3b5ce ("net: qualcomm: rmnet: Export mux_id and flags to netlink")
>Signed-off-by: Lin Ma <linma@zju.edu.cn>

Reviewed-by: Jiri Pirko <jiri@nvidia.com>

Btw, any idea why this rmnet thing, which clearly looks like a
softdevice, is in vendor directory where drivers for real devices should
reside?


  parent reply	other threads:[~2024-01-10 16:32 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-01-10  6:14 [PATCH net v1] net: qualcomm: rmnet: fix global oob in rmnet_policy Lin Ma
2024-01-10  6:56 ` Subash Abhinov Kasiviswanathan (KS)
2024-01-10 13:55 ` Simon Horman
2024-01-10 16:32 ` Jiri Pirko [this message]
2024-01-10 18:16   ` Subash Abhinov Kasiviswanathan (KS)
2024-01-11  7:46     ` Jiri Pirko
2024-01-12  0:40 ` patchwork-bot+netdevbpf

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=ZZ7Go2Y2fURBU974@nanopsycho \
    --to=jiri@resnulli.us \
    --cc=davem@davemloft.net \
    --cc=edumazet@google.com \
    --cc=kuba@kernel.org \
    --cc=linma@zju.edu.cn \
    --cc=linux-kernel@vger.kernel.org \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=quic_stranche@quicinc.com \
    --cc=quic_subashab@quicinc.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.