Skip to content

Commit 6f64ec7

Browse files
Eric Dumazetdavem330
Eric Dumazet
authored andcommitted
net: prevent sign extension in dev_get_stats()
Similar to the fix provided by Dominik Heidler in commit 9b3dc0a ("l2tp: cast l2tp traffic counter to unsigned") we need to take care of 32bit kernels in dev_get_stats(). When using atomic_long_read(), we add a 'long' to u64 and might misinterpret high order bit, unless we cast to unsigned. Fixes: caf586e ("net: add a core netdev->rx_dropped counter") Fixes: 015f068 ("net: net: add a core netdev->tx_dropped counter") Fixes: 6e7333d ("net: add rx_nohandler stat counter") Signed-off-by: Eric Dumazet <[email protected]> Cc: Jarod Wilson <[email protected]> Signed-off-by: David S. Miller <[email protected]>
1 parent d747a7a commit 6f64ec7

File tree

1 file changed

+3
-3
lines changed

1 file changed

+3
-3
lines changed

net/core/dev.c

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7783,9 +7783,9 @@ struct rtnl_link_stats64 *dev_get_stats(struct net_device *dev,
77837783
} else {
77847784
netdev_stats_to_stats64(storage, &dev->stats);
77857785
}
7786-
storage->rx_dropped += atomic_long_read(&dev->rx_dropped);
7787-
storage->tx_dropped += atomic_long_read(&dev->tx_dropped);
7788-
storage->rx_nohandler += atomic_long_read(&dev->rx_nohandler);
7786+
storage->rx_dropped += (unsigned long)atomic_long_read(&dev->rx_dropped);
7787+
storage->tx_dropped += (unsigned long)atomic_long_read(&dev->tx_dropped);
7788+
storage->rx_nohandler += (unsigned long)atomic_long_read(&dev->rx_nohandler);
77897789
return storage;
77907790
}
77917791
EXPORT_SYMBOL(dev_get_stats);

0 commit comments

Comments
 (0)