diff options
Diffstat (limited to 'net/tipc/bearer.c')
| -rw-r--r-- | net/tipc/bearer.c | 11 | 
1 files changed, 9 insertions, 2 deletions
| diff --git a/net/tipc/bearer.c b/net/tipc/bearer.c index 975dbeb60ab0..52d74760fb68 100644 --- a/net/tipc/bearer.c +++ b/net/tipc/bearer.c @@ -421,6 +421,10 @@ int tipc_enable_l2_media(struct net *net, struct tipc_bearer *b,  	dev = dev_get_by_name(net, driver_name);  	if (!dev)  		return -ENODEV; +	if (tipc_mtu_bad(dev, 0)) { +		dev_put(dev); +		return -EINVAL; +	}  	/* Associate TIPC bearer with L2 bearer */  	rcu_assign_pointer(b->media_ptr, dev); @@ -610,8 +614,6 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt,  	if (!b)  		return NOTIFY_DONE; -	b->mtu = dev->mtu; -  	switch (evt) {  	case NETDEV_CHANGE:  		if (netif_carrier_ok(dev)) @@ -624,6 +626,11 @@ static int tipc_l2_device_event(struct notifier_block *nb, unsigned long evt,  		tipc_reset_bearer(net, b);  		break;  	case NETDEV_CHANGEMTU: +		if (tipc_mtu_bad(dev, 0)) { +			bearer_disable(net, b); +			break; +		} +		b->mtu = dev->mtu;  		tipc_reset_bearer(net, b);  		break;  	case NETDEV_CHANGEADDR: |