]> git.ipfire.org Git - people/ms/linux.git/commitdiff
igbvf: integer wrapping bug setting the mtu
authorDan Carpenter <dan.carpenter@oracle.com>
Fri, 13 Sep 2013 20:44:20 +0000 (20:44 +0000)
committerJiri Slaby <jslaby@suse.cz>
Tue, 26 Aug 2014 12:12:18 +0000 (14:12 +0200)
commit 3de9e65f011b95235a789b12abc4730570cdb737 upstream.

If new_mtu is very large then "new_mtu + ETH_HLEN + ETH_FCS_LEN" can
wrap and the check on the next line can underflow. This is one of those
bugs which can be triggered by the user if you have namespaces
configured.

Also since this is something the user can trigger then we don't want to
have dev_err() message.

This is a static checker fix and I'm not sure what the impact is.

Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Tested-by: Aaron Brown <aaron.f.brown@intel.com>
Tested-by: Sibai Li Sibai.li@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
Signed-off-by: Jiri Slaby <jslaby@suse.cz>
drivers/net/ethernet/intel/igbvf/netdev.c

index 4e6b02fbe65280614c68b6b76d013368281ccc4f..0c0b8f6855a25fe5db93115b1868f3b6d3b63ad3 100644 (file)
@@ -2343,10 +2343,9 @@ static int igbvf_change_mtu(struct net_device *netdev, int new_mtu)
        struct igbvf_adapter *adapter = netdev_priv(netdev);
        int max_frame = new_mtu + ETH_HLEN + ETH_FCS_LEN;
 
-       if ((new_mtu < 68) || (max_frame > MAX_JUMBO_FRAME_SIZE)) {
-               dev_err(&adapter->pdev->dev, "Invalid MTU setting\n");
+       if (new_mtu < 68 || new_mtu > INT_MAX - ETH_HLEN - ETH_FCS_LEN ||
+           max_frame > MAX_JUMBO_FRAME_SIZE)
                return -EINVAL;
-       }
 
 #define MAX_STD_JUMBO_FRAME_SIZE 9234
        if (max_frame > MAX_STD_JUMBO_FRAME_SIZE) {