Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp6576073ybx; Mon, 11 Nov 2019 11:12:39 -0800 (PST) X-Google-Smtp-Source: APXvYqzFQ915DaNoQnNkepSOGIKBMU9aijI7ShUjtQcPY5chTC+mqECF2wLJ2UbP9Vw2jL3n7Ot/ X-Received: by 2002:a50:f7cb:: with SMTP id i11mr17479223edn.194.1573499559511; Mon, 11 Nov 2019 11:12:39 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1573499559; cv=none; d=google.com; s=arc-20160816; b=aLxV+DU+Jk69V8z4BJYWo8e3m+wIcVgwOPhEUyaWXxwV3/tj/oyGtyxj5FMSwAug+z Mf7DZJQRRl91TszLebe2cVqbPtT9uOw+qQX6zne9k+sITGNot36MPQs4XhdAHEq/29JQ Y5aEAEZ/w+Za48schqB9pUt+deQqe1igj3Wx/vVcVc4eUw6Pa5BLcXXa7ajKI7vs7ilQ Jdl8OQ+M2UONBYnRAqtqTZy2mUSQc4EzkXseaboutu5IL15weZvrRqGAbiCzYzO9jZQr eNsZzn4juyr1fE4uUODORc2AzHcYLZB7cVoXWtiCYThfo+5DihuffprTFpy5NAXOva5b umDQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :user-agent:references:in-reply-to:message-id:date:subject:cc:to :from:dkim-signature; bh=9fV07xtkW+d7DUFb08HIKnCNJoG3oB+r8vlsmgyuJew=; b=Ct5kIWJNk2y4XFjdw/xCqqwOonftSfGh12/y+Fgu7SRnlqPlARZnPK6W4SZH/W/HMp IBEt8vEsx+BS3E50Lzs7c069T85IO4LmAlaEdusoT1ga18JLebQ7Y8Ngw1iMkhfduGIh 6RbApgQQolkKcxWgHfz8hcr2Bn0nHGqHzBECqor6FkXmDG7Z4wzMS2+bmfF32bVEF0Rk VNCoIKLhP9BX0dYGGlrXdUKoZm1GHv/pSZmFJXzNqfR1hp8+KUXwaj6dg6JRgjaj+zkz 3bRetrY7dZDsQHY2DxAD6ovCCAbIAClaOV0V3E7NCiDJ73Q8IKiMlL0QEN9WRdCxraBL +fkw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=eY7yGYMw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id me8si10361968ejb.382.2019.11.11.11.12.15; Mon, 11 Nov 2019 11:12:39 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=eY7yGYMw; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727354AbfKKSdt (ORCPT + 99 others); Mon, 11 Nov 2019 13:33:49 -0500 Received: from mail.kernel.org ([198.145.29.99]:51118 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728198AbfKKSdo (ORCPT ); Mon, 11 Nov 2019 13:33:44 -0500 Received: from localhost (83-86-89-107.cable.dynamic.v4.ziggo.nl [83.86.89.107]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id E67B621655; Mon, 11 Nov 2019 18:33:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1573497222; bh=qho5X3XawYVbrt+GZcY6gtwzyRavQ2oHt8KXTLUD7bA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=eY7yGYMwtmVPuxnMuzwBtP/l6iFFbu2jzQW96FeIygDhl8n4pvC4G2rJp4lrGYu77 1B/cb6Y2bUTlUVdmUhhYcsyyk2lc1GRJQIaMPzJOQgN0uEsBNFoIo31FbMJEw9hmTJ 4TRIbx9GCyVp5RuP0LqruzNnYQWkN4x2lDyMqdCA= From: Greg Kroah-Hartman To: linux-kernel@vger.kernel.org Cc: Greg Kroah-Hartman , stable@vger.kernel.org, Taehee Yoo , "David S. Miller" , Sasha Levin Subject: [PATCH 4.9 43/65] bonding: fix unexpected IFF_BONDING bit unset Date: Mon, 11 Nov 2019 19:28:43 +0100 Message-Id: <20191111181348.519116167@linuxfoundation.org> X-Mailer: git-send-email 2.24.0 In-Reply-To: <20191111181331.917659011@linuxfoundation.org> References: <20191111181331.917659011@linuxfoundation.org> User-Agent: quilt/0.66 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Taehee Yoo [ Upstream commit 65de65d9033750d2cf1b336c9d6e9da3a8b5cc6e ] The IFF_BONDING means bonding master or bonding slave device. ->ndo_add_slave() sets IFF_BONDING flag and ->ndo_del_slave() unsets IFF_BONDING flag. bond0<--bond1 Both bond0 and bond1 are bonding device and these should keep having IFF_BONDING flag until they are removed. But bond1 would lose IFF_BONDING at ->ndo_del_slave() because that routine do not check whether the slave device is the bonding type or not. This patch adds the interface type check routine before removing IFF_BONDING flag. Test commands: ip link add bond0 type bond ip link add bond1 type bond ip link set bond1 master bond0 ip link set bond1 nomaster ip link del bond1 type bond ip link add bond1 type bond Splat looks like: [ 226.665555] proc_dir_entry 'bonding/bond1' already registered [ 226.666440] WARNING: CPU: 0 PID: 737 at fs/proc/generic.c:361 proc_register+0x2a9/0x3e0 [ 226.667571] Modules linked in: bonding af_packet sch_fq_codel ip_tables x_tables unix [ 226.668662] CPU: 0 PID: 737 Comm: ip Not tainted 5.4.0-rc3+ #96 [ 226.669508] Hardware name: innotek GmbH VirtualBox/VirtualBox, BIOS VirtualBox 12/01/2006 [ 226.670652] RIP: 0010:proc_register+0x2a9/0x3e0 [ 226.671612] Code: 89 fa 48 c1 ea 03 80 3c 02 00 0f 85 39 01 00 00 48 8b 04 24 48 89 ea 48 c7 c7 a0 0b 14 9f 48 8b b0 e 0 00 00 00 e8 07 e7 88 ff <0f> 0b 48 c7 c7 40 2d a5 9f e8 59 d6 23 01 48 8b 4c 24 10 48 b8 00 [ 226.675007] RSP: 0018:ffff888050e17078 EFLAGS: 00010282 [ 226.675761] RAX: dffffc0000000008 RBX: ffff88805fdd0f10 RCX: ffffffff9dd344e2 [ 226.676757] RDX: 0000000000000001 RSI: 0000000000000008 RDI: ffff88806c9f6b8c [ 226.677751] RBP: ffff8880507160f3 R08: ffffed100d940019 R09: ffffed100d940019 [ 226.678761] R10: 0000000000000001 R11: ffffed100d940018 R12: ffff888050716008 [ 226.679757] R13: ffff8880507160f2 R14: dffffc0000000000 R15: ffffed100a0e2c1e [ 226.680758] FS: 00007fdc217cc0c0(0000) GS:ffff88806c800000(0000) knlGS:0000000000000000 [ 226.681886] CS: 0010 DS: 0000 ES: 0000 CR0: 0000000080050033 [ 226.682719] CR2: 00007f49313424d0 CR3: 0000000050e46001 CR4: 00000000000606f0 [ 226.683727] DR0: 0000000000000000 DR1: 0000000000000000 DR2: 0000000000000000 [ 226.684725] DR3: 0000000000000000 DR6: 00000000fffe0ff0 DR7: 0000000000000400 [ 226.685681] Call Trace: [ 226.687089] proc_create_seq_private+0xb3/0xf0 [ 226.687778] bond_create_proc_entry+0x1b3/0x3f0 [bonding] [ 226.691458] bond_netdev_event+0x433/0x970 [bonding] [ 226.692139] ? __module_text_address+0x13/0x140 [ 226.692779] notifier_call_chain+0x90/0x160 [ 226.693401] register_netdevice+0x9b3/0xd80 [ 226.694010] ? alloc_netdev_mqs+0x854/0xc10 [ 226.694629] ? netdev_change_features+0xa0/0xa0 [ 226.695278] ? rtnl_create_link+0x2ed/0xad0 [ 226.695849] bond_newlink+0x2a/0x60 [bonding] [ 226.696422] __rtnl_newlink+0xb9f/0x11b0 [ 226.696968] ? rtnl_link_unregister+0x220/0x220 [ ... ] Fixes: 0b680e753724 ("[PATCH] bonding: Add priv_flag to avoid event mishandling") Signed-off-by: Taehee Yoo Signed-off-by: David S. Miller Signed-off-by: Sasha Levin --- drivers/net/bonding/bond_main.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/net/bonding/bond_main.c b/drivers/net/bonding/bond_main.c index c1971bca62fb1..d52fd842ef1fe 100644 --- a/drivers/net/bonding/bond_main.c +++ b/drivers/net/bonding/bond_main.c @@ -1759,7 +1759,8 @@ err_detach: slave_disable_netpoll(new_slave); err_close: - slave_dev->priv_flags &= ~IFF_BONDING; + if (!netif_is_bond_master(slave_dev)) + slave_dev->priv_flags &= ~IFF_BONDING; dev_close(slave_dev); err_restore_mac: @@ -1960,7 +1961,8 @@ static int __bond_release_one(struct net_device *bond_dev, dev_set_mtu(slave_dev, slave->original_mtu); - slave_dev->priv_flags &= ~IFF_BONDING; + if (!netif_is_bond_master(slave_dev)) + slave_dev->priv_flags &= ~IFF_BONDING; bond_free_slave(slave); -- 2.20.1