tipc: check minimum bearer MTU
[pandora-kernel.git] / net / tipc / eth_media.c
index a224a38..2e79e84 100644 (file)
@@ -167,6 +167,10 @@ static int enable_bearer(struct tipc_bearer *tb_ptr)
        read_unlock(&dev_base_lock);
        if (!dev)
                return -ENODEV;
+       if (tipc_mtu_bad(dev, 0)) {
+               dev_put(dev);
+               return -EINVAL;
+       }
 
        /* Create Ethernet bearer for device */
 
@@ -227,8 +231,6 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt,
        if (!eb_ptr->bearer)
                return NOTIFY_DONE;             /* bearer had been disabled */
 
-       eb_ptr->bearer->mtu = dev->mtu;
-
        switch (evt) {
        case NETDEV_CHANGE:
                if (netif_carrier_ok(dev))
@@ -243,6 +245,12 @@ static int recv_notification(struct notifier_block *nb, unsigned long evt,
                tipc_block_bearer(eb_ptr->bearer->name);
                break;
        case NETDEV_CHANGEMTU:
+               if (tipc_mtu_bad(dev, 0)) {
+                       tipc_disable_bearer(eb_ptr->bearer->name);
+                       break;
+               }
+               eb_ptr->bearer->mtu = dev->mtu;
+               /* fall through */
        case NETDEV_CHANGEADDR:
                tipc_block_bearer(eb_ptr->bearer->name);
                tipc_continue(eb_ptr->bearer);