]> git.karo-electronics.de Git - karo-tx-linux.git/commitdiff
tg3: Fix race condition in tg3_get_stats64()
authorMichael Chan <mchan@broadcom.com>
Sun, 29 Jul 2012 19:15:44 +0000 (19:15 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 9 Aug 2012 15:31:38 +0000 (08:31 -0700)
commit 0f566b208b41918053b2e67399673aaec02dde5d upstream.

Spinlock should be taken before checking for tp->hw_stats.

Signed-off-by: Michael Chan <mchan@broadcom.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/net/ethernet/broadcom/tg3.c

index 8506c54ee1632298163c3db398ed175f8f518329..689d2a1935bd15e34d660e688631b1ae8d6f9092 100644 (file)
@@ -12255,10 +12255,12 @@ static struct rtnl_link_stats64 *tg3_get_stats64(struct net_device *dev,
 {
        struct tg3 *tp = netdev_priv(dev);
 
-       if (!tp->hw_stats)
+       spin_lock_bh(&tp->lock);
+       if (!tp->hw_stats) {
+               spin_unlock_bh(&tp->lock);
                return &tp->net_stats_prev;
+       }
 
-       spin_lock_bh(&tp->lock);
        tg3_get_nstats(tp, stats);
        spin_unlock_bh(&tp->lock);