Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

tg3: Fix race condition in tg3_get_stats64()

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>

authored by

Michael Chan and committed by
David S. Miller
0f566b20 091f0ea3

+5 -3
+5 -3
drivers/net/ethernet/broadcom/tg3.c
··· 12524 12524 { 12525 12525 struct tg3 *tp = netdev_priv(dev); 12526 12526 12527 - if (!tp->hw_stats) 12528 - return &tp->net_stats_prev; 12529 - 12530 12527 spin_lock_bh(&tp->lock); 12528 + if (!tp->hw_stats) { 12529 + spin_unlock_bh(&tp->lock); 12530 + return &tp->net_stats_prev; 12531 + } 12532 + 12531 12533 tg3_get_nstats(tp, stats); 12532 12534 spin_unlock_bh(&tp->lock); 12533 12535