diff options
Diffstat (limited to 'net/core/rtnetlink.c')
| -rw-r--r-- | net/core/rtnetlink.c | 13 | 
1 files changed, 10 insertions, 3 deletions
| diff --git a/net/core/rtnetlink.c b/net/core/rtnetlink.c index d4bcdcc68e92..5ace48926b19 100644 --- a/net/core/rtnetlink.c +++ b/net/core/rtnetlink.c @@ -1483,7 +1483,10 @@ static const struct nla_policy ifla_policy[IFLA_MAX+1] = {  	[IFLA_LINKINFO]		= { .type = NLA_NESTED },  	[IFLA_NET_NS_PID]	= { .type = NLA_U32 },  	[IFLA_NET_NS_FD]	= { .type = NLA_U32 }, -	[IFLA_IFALIAS]	        = { .type = NLA_STRING, .len = IFALIASZ-1 }, +	/* IFLA_IFALIAS is a string, but policy is set to NLA_BINARY to +	 * allow 0-length string (needed to remove an alias). +	 */ +	[IFLA_IFALIAS]	        = { .type = NLA_BINARY, .len = IFALIASZ - 1 },  	[IFLA_VFINFO_LIST]	= {. type = NLA_NESTED },  	[IFLA_VF_PORTS]		= { .type = NLA_NESTED },  	[IFLA_PORT_SELF]	= { .type = NLA_NESTED }, @@ -2093,7 +2096,7 @@ static int do_setlink(const struct sk_buff *skb,  				dev->tx_queue_len = orig_len;  				goto errout;  			} -			status |= DO_SETLINK_NOTIFY; +			status |= DO_SETLINK_MODIFIED;  		}  	} @@ -2248,7 +2251,7 @@ static int do_setlink(const struct sk_buff *skb,  errout:  	if (status & DO_SETLINK_MODIFIED) { -		if (status & DO_SETLINK_NOTIFY) +		if ((status & DO_SETLINK_NOTIFY) == DO_SETLINK_NOTIFY)  			netdev_state_change(dev);  		if (err < 0) @@ -4279,13 +4282,17 @@ static int rtnetlink_event(struct notifier_block *this, unsigned long event, voi  	switch (event) {  	case NETDEV_REBOOT: +	case NETDEV_CHANGEMTU:  	case NETDEV_CHANGEADDR:  	case NETDEV_CHANGENAME:  	case NETDEV_FEAT_CHANGE:  	case NETDEV_BONDING_FAILOVER: +	case NETDEV_POST_TYPE_CHANGE:  	case NETDEV_NOTIFY_PEERS: +	case NETDEV_CHANGEUPPER:  	case NETDEV_RESEND_IGMP:  	case NETDEV_CHANGEINFODATA: +	case NETDEV_CHANGE_TX_QUEUE_LEN:  		rtmsg_ifinfo_event(RTM_NEWLINK, dev, 0, rtnl_get_event(event),  				   GFP_KERNEL);  		break; | 
