d4c1522a3e
This commit is mostly similar to c9b963bc22
as
we revert to the previous release.
74 lines
2.7 KiB
Diff
74 lines
2.7 KiB
Diff
From 696f655d7c7b605d0344aeb6ba4ff643cd46a5b4 Mon Sep 17 00:00:00 2001
|
|
From: Dan Williams <dcbw@redhat.com>
|
|
Date: Mon, 11 Nov 2013 15:43:13 -0600
|
|
Subject: [PATCH] ethernet: don't crash if device doesn't have a MAC address
|
|
(rh #1029053)
|
|
MIME-Version: 1.0
|
|
Content-Type: text/plain; charset=UTF-8
|
|
Content-Transfer-Encoding: 8bit
|
|
|
|
Like IBM s390 CTC devices, which aren't really ethernet but for
|
|
historical reasons we treat them as such.
|
|
|
|
Signed-off-by: Jiří Klimeš <jklimes@redhat.com>
|
|
|
|
Updated to apply for Fedora 20 snapshot.
|
|
|
|
---
|
|
src/devices/nm-device-ethernet.c | 14 +++++++++++---
|
|
1 file changed, 11 insertions(+), 3 deletions(-)
|
|
|
|
diff --git a/src/devices/nm-device-ethernet.c b/src/devices/nm-device-ethernet.c
|
|
index 7b1c248..c0b7861 100644
|
|
--- a/src/devices/nm-device-ethernet.c
|
|
+++ b/src/devices/nm-device-ethernet.c
|
|
@@ -310,6 +310,7 @@ update_permanent_hw_address (NMDevice *dev)
|
|
struct ifreq req;
|
|
struct ethtool_perm_addr *epaddr = NULL;
|
|
int fd, ret;
|
|
+ const guint8 *mac;
|
|
|
|
fd = socket (PF_INET, SOCK_DGRAM, 0);
|
|
if (fd < 0) {
|
|
@@ -332,7 +333,11 @@ update_permanent_hw_address (NMDevice *dev)
|
|
nm_log_dbg (LOGD_HW | LOGD_ETHER, "(%s): unable to read permanent MAC address (error %d)",
|
|
nm_device_get_iface (dev), errno);
|
|
/* Fall back to current address */
|
|
- memcpy (epaddr->data, nm_device_get_hw_address (dev, NULL), ETH_ALEN);
|
|
+ mac = nm_device_get_hw_address (dev, NULL);
|
|
+ if (mac)
|
|
+ memcpy (epaddr->data, mac, ETH_ALEN);
|
|
+ else
|
|
+ memset (epaddr->data, 0, ETH_ALEN);
|
|
}
|
|
|
|
if (memcmp (&priv->perm_hw_addr, epaddr->data, ETH_ALEN)) {
|
|
@@ -350,11 +355,14 @@ update_initial_hw_address (NMDevice *dev)
|
|
NMDeviceEthernet *self = NM_DEVICE_ETHERNET (dev);
|
|
NMDeviceEthernetPrivate *priv = NM_DEVICE_ETHERNET_GET_PRIVATE (self);
|
|
char *mac_str;
|
|
+ const guint8 *mac;
|
|
|
|
/* This sets initial MAC address from current MAC address. It should only
|
|
* be called from NMDevice constructor() to really get the initial address.
|
|
*/
|
|
- memcpy (priv->initial_hw_addr, nm_device_get_hw_address (dev, NULL), ETH_ALEN);
|
|
+ mac = nm_device_get_hw_address (dev, NULL);
|
|
+ if (mac)
|
|
+ memcpy (priv->initial_hw_addr, mac, ETH_ALEN);
|
|
|
|
mac_str = nm_utils_hwaddr_ntoa (priv->initial_hw_addr, ARPHRD_ETHER);
|
|
nm_log_dbg (LOGD_DEVICE | LOGD_ETHER, "(%s): read initial MAC address %s",
|
|
@@ -1219,7 +1219,7 @@ update_connection (NMDevice *device, NMConnection *connection)
|
|
{
|
|
NMSettingWired *s_wired = nm_connection_get_setting_wired (connection);
|
|
guint maclen;
|
|
- gconstpointer mac = nm_device_get_hw_address (device, &maclen);
|
|
+ const guint8 *mac = nm_device_get_hw_address (device, &maclen);
|
|
|
|
if (!s_wired) {
|
|
s_wired = (NMSettingWired *) nm_setting_wired_new ();
|
|
--
|
|
1.7.11.7
|
|
|