Blob Blame History Raw
From 46a7760ead2841d0a8ad5468bae8042b44af7aa2 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes@redhat.com>
Date: Wed, 20 Nov 2013 18:05:01 +0100
Subject: [PATCH 1/2] core: do not generate a connection for loopback interface
 (rh #1032594)

Else loopback is managed, and could be easily disconnected, which causes various
issues with applications. So do not manage it for now, to be on the safer side.

https://bugzilla.redhat.com/show_bug.cgi?id=1032594
---
 src/nm-manager.c | 19 ++++++++++---------
 1 file changed, 10 insertions(+), 9 deletions(-)

diff --git a/src/nm-manager.c b/src/nm-manager.c
index bf03084..adb8d72 100644
--- a/src/nm-manager.c
+++ b/src/nm-manager.c
@@ -147,15 +147,15 @@ static void bluez_manager_bdaddr_added_cb (NMBluezManager *bluez_mgr,
                                            NMManager *manager);
 
 static void bluez_manager_bdaddr_removed_cb (NMBluezManager *bluez_mgr,
                                              const char *bdaddr,
                                              const char *object_path,
                                              gpointer user_data);
 
-static void add_device (NMManager *self, NMDevice *device, gboolean nm_created);
+static void add_device (NMManager *self, NMDevice *device, gboolean generate_con);
 static void remove_device (NMManager *self, NMDevice *device, gboolean quitting);
 
 static void hostname_provider_init (NMHostnameProvider *provider_class);
 
 static NMActiveConnection *_new_active_connection (NMManager *self,
                                                    NMConnection *connection,
                                                    const char *specific_object,
@@ -577,15 +577,15 @@ modem_added (NMModemManager *modem_manager,
 		nm_log_info (LOGD_MB, "ignoring modem '%s' (no associated Bluetooth device)", modem_iface);
 		return;
 	}
 
 	/* Make the new modem device */
 	device = nm_device_modem_new (modem, driver);
 	if (device)
-		add_device (self, device, TRUE);
+		add_device (self, device, FALSE);
 }
 
 static void
 set_state (NMManager *manager, NMState state)
 {
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (manager);
 	const char *state_str;
@@ -1184,15 +1184,15 @@ system_create_virtual_device (NMManager *self, NMConnection *connection)
 		device = nm_device_vlan_new_for_connection (connection, parent);
 	} else if (nm_connection_is_type (connection, NM_SETTING_INFINIBAND_SETTING_NAME)) {
 		device = nm_device_infiniband_new_partition (connection, parent);
 	}
 
 	if (device) {
 		nm_device_set_is_nm_owned (device, TRUE);
-		add_device (self, device, TRUE);
+		add_device (self, device, FALSE);
 	}
 
 	g_signal_handlers_unblock_by_func (nm_platform_get (), G_CALLBACK (platform_link_added_cb), self);
 
 out:
 	g_free (iface);
 	return device;
@@ -1765,15 +1765,15 @@ get_existing_connection (NMManager *manager, NMDevice *device)
 	}
 	g_object_unref (connection);
 
 	return added ? NM_CONNECTION (added) : NULL;
 }
 
 static void
-add_device (NMManager *self, NMDevice *device, gboolean nm_created)
+add_device (NMManager *self, NMDevice *device, gboolean generate_con)
 {
 	NMManagerPrivate *priv = NM_MANAGER_GET_PRIVATE (self);
 	const char *iface, *driver, *type_desc;
 	char *path;
 	static guint32 devcount = 0;
 	const GSList *unmanaged_specs;
 	NMConnection *connection = NULL;
@@ -1858,16 +1858,17 @@ add_device (NMManager *self, NMDevice *device, gboolean nm_created)
 
 	path = g_strdup_printf ("/org/freedesktop/NetworkManager/Devices/%d", devcount++);
 	nm_device_set_path (device, path);
 	nm_dbus_manager_register_object (priv->dbus_mgr, path, device);
 	nm_log_info (LOGD_CORE, "(%s): exported as %s", iface, path);
 	g_free (path);
 
-	/* Don't bother generating a connection for devices NM just created */
-	if (!nm_created)
+	/* Don't generate a connection e.g. for devices NM just created, or
+	 * for the loopback */
+	if (generate_con)
 		connection = get_existing_connection (self, device);
 
 	/* Start the device if it's supposed to be managed */
 	unmanaged_specs = nm_settings_get_unmanaged_specs (priv->settings);
 	if (   !manager_sleeping (self)
 	    && !nm_device_spec_match_list (device, unmanaged_specs)) {
 		nm_device_set_manager_managed (device,
@@ -1959,15 +1960,15 @@ bluez_manager_bdaddr_added_cb (NMBluezManager *bluez_mgr,
 		nm_log_info (LOGD_HW, "BT device %s (%s) added (%s%s%s)",
 		             name,
 		             bdaddr,
 		             has_dun ? "DUN" : "",
 		             has_dun && has_nap ? " " : "",
 		             has_nap ? "NAP" : "");
 
-		add_device (manager, device, TRUE);
+		add_device (manager, device, FALSE);
 	}
 }
 
 static void
 bluez_manager_bdaddr_removed_cb (NMBluezManager *bluez_mgr,
                                  const char *bdaddr,
                                  const char *object_path,
@@ -2259,15 +2260,15 @@ platform_link_added_cb (NMPlatform *platform,
 		default:
 			device = nm_device_generic_new (plink);
 			break;
 		}
 	}
 
 	if (device)
-		add_device (self, device, FALSE);
+		add_device (self, device, plink->type != NM_LINK_TYPE_LOOPBACK);
 }
 
 static void
 platform_link_removed_cb (NMPlatform *platform,
                           int ifindex,
                           NMPlatformLink *plink,
                           NMPlatformReason reason,
@@ -2296,15 +2297,15 @@ atm_device_added_cb (NMAtmManager *atm_mgr,
 
 	device = find_device_by_iface (self, iface);
 	if (device)
 		return;
 
 	device = nm_device_adsl_new (sysfs_path, iface, driver);
 	if (device)
-		add_device (self, device, FALSE);
+		add_device (self, device, TRUE);
 }
 
 static void
 atm_device_removed_cb (NMAtmManager *manager,
                        const char *iface,
                        gpointer user_data)
 {
-- 
1.8.3.1