[ovs-dev] [PATCHv2] netdev: netdev_get_etheraddr is not functioning as advertised.
Yifeng Sun
pkusunyifeng at gmail.com
Thu Nov 30 16:31:24 UTC 2017
netdev_get_etheraddr claims to clear 'mac' on error, but it fails to do so.
When looking further into both netdev_windows_get_etheraddr() and
netdev_linux_get_etheraddr(), 'mac' is also not cleared. This will lead to
usage of uninitialised ofputil_phy_port.hw_addr.
v1 -> v2: fixed a bug in v1 found by Ben, thanks Ben.
Signed-off-by: Yifeng Sun <pkusunyifeng at gmail.com>
---
lib/netdev.c | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/lib/netdev.c b/lib/netdev.c
index c52680659e3f..2d69fe5dac68 100644
--- a/lib/netdev.c
+++ b/lib/netdev.c
@@ -897,7 +897,13 @@ netdev_set_etheraddr(struct netdev *netdev, const struct eth_addr mac)
int
netdev_get_etheraddr(const struct netdev *netdev, struct eth_addr *mac)
{
- return netdev->netdev_class->get_etheraddr(netdev, mac);
+ int error;
+
+ error = netdev->netdev_class->get_etheraddr(netdev, mac);
+ if (error) {
+ memset(mac, 0, sizeof *mac);
+ }
+ return error;
}
/* Returns the name of the network device that 'netdev' represents,
--
2.7.4
More information about the dev
mailing list