From mboxrd@z Thu Jan 1 00:00:00 1970 From: Hangbin Liu Subject: [PATCHv2 net] bridge: check iface upper dev when setting master via ioctl Date: Fri, 27 Apr 2018 20:59:24 +0800 Message-ID: <1524833964-674-1-git-send-email-liuhangbin@gmail.com> References: <1524750986-23904-1-git-send-email-liuhangbin@gmail.com> Cc: Nikolay Aleksandrov , Dmitry Vyukov , syzbot , David Miller , Hangbin Liu To: netdev@vger.kernel.org Return-path: Received: from mail-pg0-f65.google.com ([74.125.83.65]:46490 "EHLO mail-pg0-f65.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1757846AbeD0M7t (ORCPT ); Fri, 27 Apr 2018 08:59:49 -0400 Received: by mail-pg0-f65.google.com with SMTP id z4-v6so1519993pgu.13 for ; Fri, 27 Apr 2018 05:59:49 -0700 (PDT) In-Reply-To: <1524750986-23904-1-git-send-email-liuhangbin@gmail.com> Sender: netdev-owner@vger.kernel.org List-ID: When we set a bond slave's master to bridge via ioctl, we only check the IFF_BRIDGE_PORT flag. Although we will find the slave's real master at netdev_master_upper_dev_link() later, it already does some settings and allocates some resources. It would be better to return as early as possible. v1 -> v2: use netdev_master_upper_dev_get() instead of netdev_has_any_upper_dev() to check if we have a master, because not all upper devs are masters, e.g. vlan device. Reported-by: syzbot+de73361ee4971b6e6f75@syzkaller.appspotmail.com Signed-off-by: Hangbin Liu --- net/bridge/br_if.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/net/bridge/br_if.c b/net/bridge/br_if.c index 82c1a6f..5bb6681 100644 --- a/net/bridge/br_if.c +++ b/net/bridge/br_if.c @@ -518,8 +518,8 @@ int br_add_if(struct net_bridge *br, struct net_device *dev, return -ELOOP; } - /* Device is already being bridged */ - if (br_port_exists(dev)) + /* Device has master upper dev */ + if (netdev_master_upper_dev_get(dev)) return -EBUSY; /* No bridging devices that dislike that (e.g. wireless) */ -- 2.5.5