mirror of
https://github.com/openvswitch/ovs
synced 2025-08-30 22:05:19 +00:00
netdev-linux: Avoid fiddling with indeterminate data.
If we are using netlink to get stats and get_ifindex() fails, then for an internal network device we will then swap around a bunch of indeterminate (uninitialized) data values. That won't hurt anything--the caller will still set them to all-1-bits due to the error--but it still seems wrong. So this commit avoid it. Found using Clang (http://clang-analyzer.llvm.org/).
This commit is contained in:
@@ -1223,9 +1223,7 @@ netdev_linux_get_stats(const struct netdev *netdev_,
|
||||
COVERAGE_INC(netdev_get_stats);
|
||||
|
||||
if (!(netdev_dev->cache_valid & VALID_IS_INTERNAL)) {
|
||||
netdev_dev->is_internal = !strcmp(netdev_get_type(netdev_),
|
||||
"tap");
|
||||
|
||||
netdev_dev->is_internal = !strcmp(netdev_get_type(netdev_), "tap");
|
||||
if (!netdev_dev->is_internal) {
|
||||
struct ethtool_drvinfo drvinfo;
|
||||
|
||||
@@ -1266,7 +1264,7 @@ netdev_linux_get_stats(const struct netdev *netdev_,
|
||||
* will appear to be swapped relative to the other ports since we are the
|
||||
* one sending the data, not a remote computer. For consistency, we swap
|
||||
* them back here. */
|
||||
if (netdev_dev->is_internal) {
|
||||
if (!error && netdev_dev->is_internal) {
|
||||
stats->rx_packets = raw_stats.tx_packets;
|
||||
stats->tx_packets = raw_stats.rx_packets;
|
||||
stats->rx_bytes = raw_stats.tx_bytes;
|
||||
|
Reference in New Issue
Block a user