From: Eric Dumazet <eric.dumazet@gmail.com>
To: Jay Vosburgh <jay.vosburgh@canonical.com>, zhudi <zhudi21@huawei.com>
Cc: vfalico@gmail.com, kuba@kernel.org, davem@davemloft.net,
netdev@vger.kernel.org, rose.chen@huawei.com
Subject: Re: [PATCH] bonding: avoid adding slave device with IFF_MASTER flag
Date: Tue, 22 Jun 2021 20:52:13 +0200 [thread overview]
Message-ID: <bf84fc7b-8829-420a-3aca-00a378921f61@gmail.com> (raw)
In-Reply-To: <21984.1624385801@famine>
On 6/22/21 8:16 PM, Jay Vosburgh wrote:
> zhudi <zhudi21@huawei.com> wrote:
>
>> From: Di Zhu <zhudi21@huawei.com>
>>
>> The following steps will definitely cause the kernel to crash:
>> ip link add vrf1 type vrf table 1
>> modprobe bonding.ko max_bonds=1
>> echo "+vrf1" >/sys/class/net/bond0/bonding/slaves
>> rmmod bonding
>>
>> The root cause is that: When the VRF is added to the slave device,
>> it will fail, and some cleaning work will be done. because VRF device
>> has IFF_MASTER flag, cleanup process will not clear the IFF_BONDING flag.
>> Then, when we unload the bonding module, unregister_netdevice_notifier()
>> will treat the VRF device as a bond master device and treat netdev_priv()
>> as struct bonding{} which actually is struct net_vrf{}.
>>
>> By analyzing the processing logic of bond_enslave(), it seems that
>> it is not allowed to add the slave device with the IFF_MASTER flag, so
>> we need to add a code check for this situation.
>
> I don't believe the statement just above is correct; nesting
> bonds has historically been permitted, even if it is of questionable
> value these days. I've not tested nesting in a while, but last I recall
> it did function.
>
> Leaving aside the question of whether it's really useful to nest
> bonds or not, my concern with disabling this is that it will break
> existing configurations that currently work fine.
>
> However, it should be possible to use netif_is_bonding_master
> (which tests dev->flags & IFF_MASTER and dev->priv_flags & IFF_BONDING)
> to exclude IFF_MASTER devices that are not bonds (which seem to be vrf
> and eql), e.g.,
>
> if ((slave_dev->flags & IFF_MASTER) &&
> !netif_is_bond_master(slave_dev))
>
> Or we can just go with this patch and see if anything breaks.
>
syzbot for sure will stop finding stack overflows and other issues like that :)
I know that some people used nested bonding devices in order to implement complex qdisc setups.
(eg HTB on the first level, netem on the second level).
next prev parent reply other threads:[~2021-06-22 18:52 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-06-22 3:09 [PATCH] bonding: avoid adding slave device with IFF_MASTER flag zhudi
2021-06-22 17:40 ` patchwork-bot+netdevbpf
2021-06-22 17:53 ` Eric Dumazet
2021-06-22 18:16 ` Jay Vosburgh
2021-06-22 18:52 ` Eric Dumazet [this message]
-- strict thread matches above, loose matches on Subject: below --
2021-06-23 2:02 zhudi (J)
2021-06-23 2:11 zhudi (J)
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=bf84fc7b-8829-420a-3aca-00a378921f61@gmail.com \
--to=eric.dumazet@gmail.com \
--cc=davem@davemloft.net \
--cc=jay.vosburgh@canonical.com \
--cc=kuba@kernel.org \
--cc=netdev@vger.kernel.org \
--cc=rose.chen@huawei.com \
--cc=vfalico@gmail.com \
--cc=zhudi21@huawei.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 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).