From patchwork Thu Apr 26 13:56:26 2018 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Hangbin Liu X-Patchwork-Id: 905080 X-Patchwork-Delegate: davem@davemloft.net Return-Path: X-Original-To: patchwork-incoming-netdev@ozlabs.org Delivered-To: patchwork-incoming-netdev@ozlabs.org Authentication-Results: ozlabs.org; spf=none (mailfrom) smtp.mailfrom=vger.kernel.org (client-ip=209.132.180.67; helo=vger.kernel.org; envelope-from=netdev-owner@vger.kernel.org; receiver=) Authentication-Results: ozlabs.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=gmail.com header.i=@gmail.com header.b="Nlrjy0tJ"; dkim-atps=neutral Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by ozlabs.org (Postfix) with ESMTP id 40WzBr25F7z9ry1 for ; Thu, 26 Apr 2018 23:56:52 +1000 (AEST) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755655AbeDZN4t (ORCPT ); Thu, 26 Apr 2018 09:56:49 -0400 Received: from mail-pf0-f196.google.com ([209.85.192.196]:45723 "EHLO mail-pf0-f196.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755872AbeDZN4r (ORCPT ); Thu, 26 Apr 2018 09:56:47 -0400 Received: by mail-pf0-f196.google.com with SMTP id l27so18436206pfk.12 for ; Thu, 26 Apr 2018 06:56:47 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20161025; h=from:to:cc:subject:date:message-id; bh=FxxFjW16XrEnNZQTHRY2MFxIsxMLVvLktnNkJkr+Ybk=; b=Nlrjy0tJTRVhBB/mdQR+dNWluPMKZh9VS9gQd9mLZy85cfO0PNoC6QYY1JBcjLm/Cp auAjt1mg3/bk1FNF8VnzayiMkobJj9DHQuPRvKE0HIPbnwrIqkctw6S0KSFZ891Rih7M 5o+8RomvZZJeWsvAGisM9AvEFRcjv4ROlVMtnIR+qd61gr5sdN4d5WYorcV7HAnoLmFo FViWXZ+OMi8fNTjj5unCIi/lqYf+MIXT3wEp063s8XydwlKlEOUZKbLytmBB2VF3GuZu GYVIhrq1l/lhSVgzg9egST7EWnf6SXwqkjWIBwQAgBI5h4UM/2tNQ4E+iBqidsbOfZ0+ 2ssA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20161025; h=x-gm-message-state:from:to:cc:subject:date:message-id; bh=FxxFjW16XrEnNZQTHRY2MFxIsxMLVvLktnNkJkr+Ybk=; b=FeBnNrSoBtrEiHdOQDWcbiq2ZfIqMC1CKGKgb8A+Tm0A2Ua+Gvs9TfhF1AlD6t7u3b zqfoW3RQatfwG8CPbSObiy4bX+ZpxkX8vhcx/mOxa7+w2WaGS71Xhax7IcaQdjx+qIZt JGD8T97jKFF8yTCt8S219LoJ4Ai1groGhsRsJkWYIOw9GvyX7I0BJrQaW5IR06ykI2GS TDLYvatpWM9EnZwjGYx2HoA8xbMNVGzNqG/ZrB5ofnssMdANYezODpHOQGKNzYRxAPPw 6MFTPt4Zn09T/9IYov+ThExDjnvk1a6PVrlWwFVe1wsz7V3LDXF2kVv6y90yxb5kB4d2 kqxA== X-Gm-Message-State: ALQs6tAxmgTeT2PG5u/ZtDUX6rFnt5UfzYSysfExdD7loHxwGP9AdoWN loUjhX/GQ+b/7Ob7DTvVDOv/8v/F X-Google-Smtp-Source: AIpwx4+Xkn1q61tfOPgsJF0oLirGvqrudJ1eGYNaNXKuhvlXR16lKgw5n/EywmeyJVLeIYrlK+WAaA== X-Received: by 10.99.109.7 with SMTP id i7mr27246474pgc.174.1524751006735; Thu, 26 Apr 2018 06:56:46 -0700 (PDT) Received: from leo.usersys.redhat.com ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id a23sm8258623pfi.176.2018.04.26.06.56.44 (version=TLS1_2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128/128); Thu, 26 Apr 2018 06:56:46 -0700 (PDT) From: Hangbin Liu To: netdev@vger.kernel.org Cc: Dmitry Vyukov , syzbot , David Miller , Hangbin Liu Subject: [PATCH net] bridge: check iface upper dev when setting master via ioctl Date: Thu, 26 Apr 2018 21:56:26 +0800 Message-Id: <1524750986-23904-1-git-send-email-liuhangbin@gmail.com> X-Mailer: git-send-email 2.5.5 Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org 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. So it would be better to return as early as possible. 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..176de8a9 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_has_any_upper_dev(dev)) return -EBUSY; /* No bridging devices that dislike that (e.g. wireless) */