All of lore.kernel.org
 help / color / mirror / Atom feed
From: Jay Vosburgh <jay.vosburgh@canonical.com>
To: 'Simon Horman' <horms@kernel.org>
Cc: "David S. Miller" <davem@davemloft.net>,
	Eric Dumazet <edumazet@google.com>,
	Jakub Kicinski <kuba@kernel.org>, Paolo Abeni <pabeni@redhat.com>,
	Andy Gospodarek <andy@greyhouse.net>,
	Ding Tianhong <dingtianhong@huawei.com>,
	Hangbin Liu <liuhangbin@gmail.com>,
	Sam Sun <samsun1006219@gmail.com>,
	netdev@vger.kernel.org
Subject: Re: [PATCH net v5] bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set()
Date: Sun, 30 Jun 2024 11:20:48 -0700	[thread overview]
Message-ID: <1568135.1719771648@famine> (raw)
In-Reply-To: <20240630-bond-oob-v5-1-7d7996e0a077@kernel.org>

'Simon Horman' <horms@kernel.org> wrote:

>From: Sam Sun <samsun1006219@gmail.com>
>
>In function bond_option_arp_ip_targets_set(), if newval->string is an
>empty string, newval->string+1 will point to the byte after the
>string, causing an out-of-bound read.
>
>BUG: KASAN: slab-out-of-bounds in strlen+0x7d/0xa0 lib/string.c:418
>Read of size 1 at addr ffff8881119c4781 by task syz-executor665/8107
>CPU: 1 PID: 8107 Comm: syz-executor665 Not tainted 6.7.0-rc7 #1
>Hardware name: QEMU Standard PC (i440FX + PIIX, 1996), BIOS 1.15.0-1 04/01/2014
>Call Trace:
> <TASK>
> __dump_stack lib/dump_stack.c:88 [inline]
> dump_stack_lvl+0xd9/0x150 lib/dump_stack.c:106
> print_address_description mm/kasan/report.c:364 [inline]
> print_report+0xc1/0x5e0 mm/kasan/report.c:475
> kasan_report+0xbe/0xf0 mm/kasan/report.c:588
> strlen+0x7d/0xa0 lib/string.c:418
> __fortify_strlen include/linux/fortify-string.h:210 [inline]
> in4_pton+0xa3/0x3f0 net/core/utils.c:130
> bond_option_arp_ip_targets_set+0xc2/0x910
>drivers/net/bonding/bond_options.c:1201
> __bond_opt_set+0x2a4/0x1030 drivers/net/bonding/bond_options.c:767
> __bond_opt_set_notify+0x48/0x150 drivers/net/bonding/bond_options.c:792
> bond_opt_tryset_rtnl+0xda/0x160 drivers/net/bonding/bond_options.c:817
> bonding_sysfs_store_option+0xa1/0x120 drivers/net/bonding/bond_sysfs.c:156
> dev_attr_store+0x54/0x80 drivers/base/core.c:2366
> sysfs_kf_write+0x114/0x170 fs/sysfs/file.c:136
> kernfs_fop_write_iter+0x337/0x500 fs/kernfs/file.c:334
> call_write_iter include/linux/fs.h:2020 [inline]
> new_sync_write fs/read_write.c:491 [inline]
> vfs_write+0x96a/0xd80 fs/read_write.c:584
> ksys_write+0x122/0x250 fs/read_write.c:637
> do_syscall_x64 arch/x86/entry/common.c:52 [inline]
> do_syscall_64+0x40/0x110 arch/x86/entry/common.c:83
> entry_SYSCALL_64_after_hwframe+0x63/0x6b
>---[ end trace ]---
>
>Fix it by adding a check of string length before using it.
>
>Fixes: f9de11a16594 ("bonding: add ip checks when store ip target")
>Signed-off-by: Yue Sun <samsun1006219@gmail.com>
>Signed-off-by: Simon Horman <horms@kernel.org>

Acked-by: Jay Vosburgh <jay.vosburgh@canonical.com>

>---
>Changes in v5 (Simon):
>- Remove stray 'I4' from netdev_err() string. Thanks to Hangbin Liu.
>- Sorry for the long delay between v4 and v5, this completely slipped my
>  mind.
>- Link to v4: https://lore.kernel.org/r/20240419-bond-oob-v4-1-69dd1a66db20@kernel.org
>
>Changes in v4 (Simon):
>- Correct  whitespace mangled patch; posting as requested by Sam Sun
>- Link to v3: https://lore.kernel.org/r/CAEkJfYOnsLLiCrtgOpq2Upr+_W0dViYVHU8YdjJOi-mxD8H9oQ@mail.gmail.com
>
>Changes in v3 (Sam Sun):
>- According to Hangbin's opinion, change Fixes tag from 4fb0ef585eb2
>  ("bonding: convert arp_ip_target to use the new option API") to
>  f9de11a16594 ("bonding: add ip checks when store ip target").
>- Link to v2: https://lore.kernel.org/r/CAEkJfYMdDQKY1C-wBZLiaJ=dCqfM9r=rykwwf+J-XHsFp7D9Ag@mail.gmail.com/
>
>Changes in v2 (Sam Sun):
>- According to Jay and Hangbin's opinion, remove target address in
>  netdev_err message since target is not initialized in error path and
>  will not provide useful information.
>- Link to v1: https://lore.kernel.org/r/CAEkJfYPYF-nNB2oiXfXwjPG0VVB2Bd8Q8kAq+74J=R+4HkngWw@mail.gmail.com/
>---
> drivers/net/bonding/bond_options.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
>diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
>index 0cacd7027e35..228128e727c2 100644
>--- a/drivers/net/bonding/bond_options.c
>+++ b/drivers/net/bonding/bond_options.c
>@@ -1214,9 +1214,9 @@ static int bond_option_arp_ip_targets_set(struct bonding *bond,
> 	__be32 target;
> 
> 	if (newval->string) {
>-		if (!in4_pton(newval->string+1, -1, (u8 *)&target, -1, NULL)) {
>-			netdev_err(bond->dev, "invalid ARP target %pI4 specified\n",
>-				   &target);
>+		if (!(strlen(newval->string)) ||
>+		    !in4_pton(newval->string + 1, -1, (u8 *)&target, -1, NULL)) {
>+			netdev_err(bond->dev, "invalid ARP target specified\n");
> 			return ret;
> 		}
> 		if (newval->string[0] == '+')
>

  reply	other threads:[~2024-06-30 18:21 UTC|newest]

Thread overview: 7+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-30 13:20 [PATCH net v5] bonding: Fix out-of-bounds read in bond_option_arp_ip_targets_set() 'Simon Horman'
2024-06-30 18:20 ` Jay Vosburgh [this message]
2024-07-01  0:57 ` Hangbin Liu
2024-07-01 21:32 ` Jakub Kicinski
2024-07-01 23:07   ` Jay Vosburgh
2024-07-02  2:59     ` Jakub Kicinski
2024-07-02 13:44       ` Simon Horman

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=1568135.1719771648@famine \
    --to=jay.vosburgh@canonical.com \
    --cc=andy@greyhouse.net \
    --cc=davem@davemloft.net \
    --cc=dingtianhong@huawei.com \
    --cc=edumazet@google.com \
    --cc=horms@kernel.org \
    --cc=kuba@kernel.org \
    --cc=liuhangbin@gmail.com \
    --cc=netdev@vger.kernel.org \
    --cc=pabeni@redhat.com \
    --cc=samsun1006219@gmail.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.