net: Fix locking bug in netif_set_xps_queue
authorAlexander Duyck <alexander.h.duyck@intel.com>
Fri, 22 Feb 2013 06:38:44 +0000 (06:38 +0000)
committerDavid S. Miller <davem@davemloft.net>
Fri, 22 Feb 2013 20:10:19 +0000 (15:10 -0500)
Smatch found a locking bug in netif_set_xps_queue in which we were not
releasing the lock in the case of an allocation failure.

This change corrects that so that we release the xps_map_mutex before
returning -ENOMEM in the case of an allocation failure.

Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/core/dev.c

index 17bc535115d3db24be70403a00efa6b9b2f056a8..18d8b5acc3435f0a81dd0513fae7f1d829e71db8 100644 (file)
@@ -1882,8 +1882,10 @@ int netif_set_xps_queue(struct net_device *dev, struct cpumask *mask, u16 index)
 
                if (!new_dev_maps)
                        new_dev_maps = kzalloc(maps_sz, GFP_KERNEL);
-               if (!new_dev_maps)
+               if (!new_dev_maps) {
+                       mutex_unlock(&xps_map_mutex);
                        return -ENOMEM;
+               }
 
                map = dev_maps ? xmap_dereference(dev_maps->cpu_map[cpu]) :
                                 NULL;