From 34d28376ed0979f547249a59c2e9b1e47e0eaa97 Mon Sep 17 00:00:00 2001 From: Thomas Haller Date: Wed, 21 Aug 2013 12:36:14 +0200 Subject: [PATCH] core: fix segfault on initialization of macvlan and gre device The link_changed method expects a valid info parameter. NMDeviceMacvlan and NMDeviceGre calls link_changed during construction for initialization. As it was before, NMDeviceMacvlan and NMDeviceGre passed NULL as NMPlatformLink, causing NM to segfault. (Regression was introduced in 0e361e894c4c3b699e89c68ccc7fee6b4adb09f9) https://bugzilla.redhat.com/show_bug.cgi?id=997396 Signed-off-by: Thomas Haller --- src/devices/nm-device-gre.c | 13 +++++++++---- src/devices/nm-device-macvlan.c | 13 +++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/src/devices/nm-device-gre.c b/src/devices/nm-device-gre.c index c816c94bc9..3e5fdd1bea 100644 --- a/src/devices/nm-device-gre.c +++ b/src/devices/nm-device-gre.c @@ -59,14 +59,12 @@ enum { /**************************************************************/ static void -link_changed (NMDevice *device, NMPlatformLink *info) +update_properties (NMDevice *device) { NMDeviceGrePrivate *priv = NM_DEVICE_GRE_GET_PRIVATE (device); GObject *object = G_OBJECT (device); NMPlatformGreProperties props; - NM_DEVICE_CLASS (nm_device_gre_parent_class)->link_changed (device, info); - if (!nm_platform_gre_get_properties (nm_device_get_ifindex (device), &props)) { nm_log_warn (LOGD_HW, "(%s): could not read gre properties", nm_device_get_iface (device)); @@ -108,6 +106,13 @@ link_changed (NMDevice *device, NMPlatformLink *info) g_object_thaw_notify (object); } +static void +link_changed (NMDevice *device, NMPlatformLink *info) +{ + NM_DEVICE_CLASS (nm_device_gre_parent_class)->link_changed (device, info); + update_properties (device); +} + /**************************************************************/ NMDevice * @@ -130,7 +135,7 @@ nm_device_gre_init (NMDeviceGre *self) static void constructed (GObject *object) { - link_changed (NM_DEVICE (object), NULL); + update_properties (NM_DEVICE (object)); G_OBJECT_CLASS (nm_device_gre_parent_class)->constructed (object); } diff --git a/src/devices/nm-device-macvlan.c b/src/devices/nm-device-macvlan.c index 0f782024b4..fa71c35583 100644 --- a/src/devices/nm-device-macvlan.c +++ b/src/devices/nm-device-macvlan.c @@ -54,14 +54,12 @@ enum { /**************************************************************/ static void -link_changed (NMDevice *device, NMPlatformLink *info) +update_properties (NMDevice *device) { NMDeviceMacvlanPrivate *priv = NM_DEVICE_MACVLAN_GET_PRIVATE (device); GObject *object = G_OBJECT (device); NMPlatformMacvlanProperties props; - NM_DEVICE_CLASS (nm_device_macvlan_parent_class)->link_changed (device, info); - if (!nm_platform_macvlan_get_properties (nm_device_get_ifindex (device), &props)) { nm_log_warn (LOGD_HW, "(%s): could not read macvlan properties", nm_device_get_iface (device)); @@ -88,6 +86,13 @@ link_changed (NMDevice *device, NMPlatformLink *info) g_object_thaw_notify (object); } +static void +link_changed (NMDevice *device, NMPlatformLink *info) +{ + NM_DEVICE_CLASS (nm_device_macvlan_parent_class)->link_changed (device, info); + update_properties (device); +} + /**************************************************************/ NMDevice * @@ -110,7 +115,7 @@ nm_device_macvlan_init (NMDeviceMacvlan *self) static void constructed (GObject *object) { - link_changed (NM_DEVICE (object), NULL); + update_properties (NM_DEVICE (object)); G_OBJECT_CLASS (nm_device_macvlan_parent_class)->constructed (object); }