All of lore.kernel.org
 help / color / mirror / Atom feed
From: Nicolas Dichtel <nicolas.dichtel@6wind.com>
To: jiri@resnulli.us
Cc: davem@davemloft.net, netdev@vger.kernel.org,
	j.vosburgh@gmail.com, vfalico@gmail.com,
	gospo@cumulusnetworks.com,
	Nicolas Dichtel <nicolas.dichtel@6wind.com>
Subject: [PATCH net v2] rtnl/bond: don't send rtnl msg for unregistered iface
Date: Tue, 12 May 2015 17:03:55 +0200	[thread overview]
Message-ID: <1431443035-4265-1-git-send-email-nicolas.dichtel@6wind.com> (raw)
In-Reply-To: <20150511175355.GA3130@nanopsycho>

Before the patch, the command 'ip link add bond2 type bond mode 802.3ad'
causes the kernel to send a rtnl message for the bond2 interface, with an
ifindex 0.

'ip monitor' shows:
0: bond2: <BROADCAST,MULTICAST,MASTER> mtu 1500 state DOWN group default
    link/ether 00:00:00:00:00:00 brd ff:ff:ff:ff:ff:ff
9: bond2@NONE: <BROADCAST,MULTICAST,MASTER> mtu 1500 qdisc noop state DOWN group default
    link/ether ea:3e:1f:53:92:7b brd ff:ff:ff:ff:ff:ff
[snip]

First, nobody seems to care about NETDEV_CHANGEINFODATA (commit
d4261e565000 says that it was put only to notify userspace). Hence, we can
call directly rtmsg_ifinfo().
Secondly, prevent in rtnetlink_event() to send notifications to userspace
about unregistered interfaces.

Fixes: d4261e565000 ("bonding: create netlink event when bonding option is changed")
CC: Jiri Pirko <jiri@resnulli.us>
Reported-by: Julien Meunier <julien.meunier@6wind.com>
Signed-off-by: Nicolas Dichtel <nicolas.dichtel@6wind.com>
---

v2: check dev->reg_state instead of ifindex
    call rtmsg_ifinfo() directly in __bond_opt_set()

There is about 20 occurences of "dev->reg_state .= NETREG_REGISTERED".
I will send a patch on net-next to introduce an helper for this when net
will be merged with this patch in net-next.

 drivers/net/bonding/bond_options.c | 4 ++--
 include/linux/netdevice.h          | 3 +--
 net/core/rtnetlink.c               | 3 ++-
 3 files changed, 5 insertions(+), 5 deletions(-)

diff --git a/drivers/net/bonding/bond_options.c b/drivers/net/bonding/bond_options.c
index 4df28943d222..882e0599e72b 100644
--- a/drivers/net/bonding/bond_options.c
+++ b/drivers/net/bonding/bond_options.c
@@ -624,8 +624,8 @@ int __bond_opt_set(struct bonding *bond,
 out:
 	if (ret)
 		bond_opt_error_interpret(bond, opt, ret, val);
-	else
-		call_netdevice_notifiers(NETDEV_CHANGEINFODATA, bond->dev);
+	else if (bond->dev->reg_state == NETREG_REGISTERED)
+		rtmsg_ifinfo(RTM_NEWLINK, bond->dev, 0, GFP_KERNEL);
 
 	return ret;
 }
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 1899c74a7127..c040d48925fd 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -2069,8 +2069,7 @@ struct pcpu_sw_netstats {
 #define NETDEV_CHANGEUPPER	0x0015
 #define NETDEV_RESEND_IGMP	0x0016
 #define NETDEV_PRECHANGEMTU	0x0017 /* notify before mtu change happened */
-#define NETDEV_CHANGEINFODATA	0x0018
-#define NETDEV_BONDING_INFO	0x0019
+#define NETDEV_BONDING_INFO	0x0018
 
 int register_netdevice_notifier(struct notifier_block *nb);
 int unregister_netdevice_notifier(struct notifier_block *nb);
diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c
index 837d30b5ffed..e6e4d7fc863e 100644
--- a/net/core/rtnetlink.c
+++ b/net/core/rtnetlink.c
@@ -3273,7 +3273,8 @@ static int rtnetlink_event(struct notifier_block *this, unsigned long event, voi
 	case NETDEV_BONDING_INFO:
 		break;
 	default:
-		rtmsg_ifinfo(RTM_NEWLINK, dev, 0, GFP_KERNEL);
+		if (dev->reg_state == NETREG_REGISTERED)
+			rtmsg_ifinfo(RTM_NEWLINK, dev, 0, GFP_KERNEL);
 		break;
 	}
 	return NOTIFY_DONE;
-- 
2.2.2

  parent reply	other threads:[~2015-05-12 15:04 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-05-11 14:25 [PATCH net] rtnl: don't send rtnl msg for unregistered iface Nicolas Dichtel
2015-05-11 15:37 ` Jiri Pirko
2015-05-11 16:04   ` Nicolas Dichtel
2015-05-11 16:15     ` Nicolas Dichtel
2015-05-11 17:53       ` Jiri Pirko
2015-05-11 22:15         ` Andy Gospodarek
2015-05-12  8:43         ` Nicolas Dichtel
2015-05-12 15:03         ` Nicolas Dichtel [this message]
2015-05-12 15:06           ` [PATCH net v2] rtnl/bond: " Nicolas Dichtel
2015-05-12 15:17             ` [PATCH net v3] " Nicolas Dichtel
2015-05-12 15:58               ` Jiri Pirko
2015-05-12 16:10                 ` Nicolas Dichtel
2015-05-12 16:14                   ` Jiri Pirko
2015-05-13 12:19                     ` [PATCH net v4] " Nicolas Dichtel
2015-05-13 12:24                       ` Jiri Pirko
2015-05-13 12:36                         ` Nicolas Dichtel
2015-05-18  2:44                       ` David Miller
2015-07-13 14:11                       ` Kristian Evensen
2015-07-15 15:07                         ` Nicolas Dichtel
2015-07-16  9:06                         ` Nicolas Dichtel
2015-07-16  9:31                           ` [PATCH linux-3.18.y] rtnl: restore notifications for deleted interfaces Nicolas Dichtel
2015-05-12 17:12                 ` [PATCH net v3] rtnl/bond: don't send rtnl msg for unregistered iface Andy Gospodarek
2015-05-13 12:01                   ` Nicolas Dichtel
2015-05-13 14:43                     ` Andy Gospodarek

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=1431443035-4265-1-git-send-email-nicolas.dichtel@6wind.com \
    --to=nicolas.dichtel@6wind.com \
    --cc=davem@davemloft.net \
    --cc=gospo@cumulusnetworks.com \
    --cc=j.vosburgh@gmail.com \
    --cc=jiri@resnulli.us \
    --cc=netdev@vger.kernel.org \
    --cc=vfalico@gmail.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.