From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-8.8 required=3.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,FREEMAIL_FORGED_FROMDOMAIN,FREEMAIL_FROM, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_PASS,USER_AGENT_GIT autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CAE13C282DA for ; Wed, 17 Apr 2019 12:12:34 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [209.132.180.67]) by mail.kernel.org (Postfix) with ESMTP id 98C6720872 for ; Wed, 17 Apr 2019 12:12:34 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="JcIm7PJb" Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731986AbfDQMMd (ORCPT ); Wed, 17 Apr 2019 08:12:33 -0400 Received: from mail-pl1-f195.google.com ([209.85.214.195]:44492 "EHLO mail-pl1-f195.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726708AbfDQMMd (ORCPT ); Wed, 17 Apr 2019 08:12:33 -0400 Received: by mail-pl1-f195.google.com with SMTP id g12so11926846pll.11 for ; Wed, 17 Apr 2019 05:12:32 -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:mime-version :content-transfer-encoding; bh=VswJU1tt+z2uLj9G+nKtl7y8N3LKuS3ZqAvkNuLCXhc=; b=JcIm7PJbGrcpX8jx9ULtKlFEsAjKxXI9q8bOKVRYu4lpWsjAJOXUdN9TyidFrzFb5F vtnTJUVh7gTiKfp3yTLFIfDePaZxikBAPJh/QBG389yBCJTjzeq+ACsVdnsNqzCBhyC+ 7THe5hEYfRqZsp/TeTcqy/5ot7KUdC7VqV1+0ZglzVCVpn9ibZtIpHJ7Gi1Nazo71Hyf N5G7AuAQ0TLQtGoy6KfaPV/2SglnW7o2zenJZ3d9ZgefTUuv7cn5zKlyHqFXsDrutxXC pVwuOivuCYdnmJlAX6vuji5lOe4NzudIoQF+i0TWOS5tdFWxfEHreoSY4jz6zwbqeeMR D4fg== 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:mime-version :content-transfer-encoding; bh=VswJU1tt+z2uLj9G+nKtl7y8N3LKuS3ZqAvkNuLCXhc=; b=dIe0EWJV2xWna090D7bR+uR6sD+o6WxoWiHl2WtuE0ttGlZJtRRFqoFKrqfUdecK9Y qkIbl6/2G66H0Evk14WrDlgAeBjmOBgnqXa3doW6gHNkAG6/NmjKMatkB0a8A5qNWXjr JVbHYywWaJLkwsQF76wNC8Q6kuwRo2tfc5o9f+Oh5+URADagFR8FIh8O/csLRFqaGNjJ yT+ZbbGRFAps1ucLSMwtSdJuL6adiDG9C95Aee8C9lV9egFkHhx7b9Z2a4KrZrpqKf2k 6ECSh2PVLNLF35bBuJfbnLeh87uwxKqw+5wefq7xhBKm0RIXZhXHg92Jjk7IEVV1NMr/ eQJA== X-Gm-Message-State: APjAAAVIrlnmJbNzVxPTmpDRWEElrCkUHS26D7z2eUZr4nLXVYq2EV8B qIXtV/kVZNUZoSg82HH7T4xlxlpH3c4= X-Google-Smtp-Source: APXvYqw6cRKyEGsq6I+Et+buRBwnn0rz34wh4GU6xfQpNroB3YBw5/7jrLAuyEPWXyL/1GPkYuxJ2g== X-Received: by 2002:a17:902:6b8b:: with SMTP id p11mr64674998plk.225.1555503152021; Wed, 17 Apr 2019 05:12:32 -0700 (PDT) Received: from dhcp-12-139.nay.redhat.com ([209.132.188.80]) by smtp.gmail.com with ESMTPSA id w10sm56952858pfi.126.2019.04.17.05.12.29 (version=TLS1_2 cipher=ECDHE-RSA-CHACHA20-POLY1305 bits=256/256); Wed, 17 Apr 2019 05:12:31 -0700 (PDT) From: Hangbin Liu To: netdev@vger.kernel.org Cc: Jiri Pirko , davem@davemloft.net, Xin Long , Hangbin Liu Subject: [PATCH net] team: fix possible recursive locking when add slaves Date: Wed, 17 Apr 2019 20:12:11 +0800 Message-Id: <20190417121211.21063-1-liuhangbin@gmail.com> X-Mailer: git-send-email 2.19.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: netdev-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: netdev@vger.kernel.org If we add a bond device which is already the master of the team interface, we will hold the team->lock in team_add_slave() first and then request the lock in team_set_mac_address() again. The functions are called like: - team_add_slave() - team_port_add() - team_port_enter() - team_modeop_port_enter() - __set_port_dev_addr() - dev_set_mac_address() - bond_set_mac_address() - dev_set_mac_address() - team_set_mac_address Although team_upper_dev_link() would check the upper devices but it is called too late. Fix it by adding a checking before processing the slave. Fixes: 3d249d4ca7d0 ("net: introduce ethernet teaming device") Signed-off-by: Hangbin Liu --- drivers/net/team/team.c | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/drivers/net/team/team.c b/drivers/net/team/team.c index 9ce61b019aad..8313c4f2b635 100644 --- a/drivers/net/team/team.c +++ b/drivers/net/team/team.c @@ -1156,6 +1156,13 @@ static int team_port_add(struct team *team, struct net_device *port_dev, return -EINVAL; } + if (netdev_has_upper_dev(dev, port_dev)) { + NL_SET_ERR_MSG(extack, "Device is already an upper device of the team interface"); + netdev_err(dev, "Device %s is already an upper device " + "of the team interface\n", portname); + return -EBUSY; + } + if (port_dev->features & NETIF_F_VLAN_CHALLENGED && vlan_uses_dev(dev)) { NL_SET_ERR_MSG(extack, "Device is VLAN challenged and team device has VLAN set up"); -- 2.19.2