[NetworkManager/f20] core: fix crash calling wpa_supplicant and fix setting MTU from DHCP

thaller thaller at fedoraproject.org
Wed Jul 2 15:40:52 UTC 2014


commit 546ae50c5a1092382382af49e83917ae8c1fbaf9
Author: Thomas Haller <thaller at redhat.com>
Date:   Wed Jul 2 17:40:41 2014 +0200

    core: fix crash calling wpa_supplicant and fix setting MTU from DHCP
    
    - core: fix crash passing wrong parameter to AddBlob for wpa_supplicant (rh #1115538)
    - core: fix setting MTU from DHCP (rh #1047083)

 ...h1115538-fix-supplicant-crash-for-AddBlob.patch |   36 +++++
 ...dle-mtu-for-ip4-config-merge-and-subtract.patch |  156 ++++++++++++++++++++
 NetworkManager.spec                                |   10 +-
 3 files changed, 201 insertions(+), 1 deletions(-)
---
diff --git a/0069-rh1115538-fix-supplicant-crash-for-AddBlob.patch b/0069-rh1115538-fix-supplicant-crash-for-AddBlob.patch
new file mode 100644
index 0000000..871304c
--- /dev/null
+++ b/0069-rh1115538-fix-supplicant-crash-for-AddBlob.patch
@@ -0,0 +1,36 @@
+From c3f062a63a732d55abf7e090b13743677e81f214 Mon Sep 17 00:00:00 2001
+From: Thomas Haller <thaller at redhat.com>
+Date: Wed, 2 Jul 2014 10:58:49 +0200
+Subject: [PATCH 1/1] supplicant: fix crash passing invalid parameter to
+ AddBlob when adding network
+
+The DBUS method 'AddBlob' expects a data argument of type 'ay'.
+Instead we passed the hash table 'blobs'.
+
+This must be broken for a long time and surprisingly stayed unnoticed.
+
+https://mail.gnome.org/archives/networkmanager-list/2014-July/msg00001.html
+
+Fixes: fb6cde508c1417765684ae940f72d639067ddf0a
+Signed-off-by: Thomas Haller <thaller at redhat.com>
+(cherry picked from commit e343c45ebbb7976e15241a241f2876de8619ca3c)
+---
+ src/supplicant-manager/nm-supplicant-interface.c | 2 +-
+ 1 file changed, 1 insertion(+), 1 deletion(-)
+
+diff --git a/src/supplicant-manager/nm-supplicant-interface.c b/src/supplicant-manager/nm-supplicant-interface.c
+index 4063085..e81dd61 100644
+--- a/src/supplicant-manager/nm-supplicant-interface.c
++++ b/src/supplicant-manager/nm-supplicant-interface.c
+@@ -1080,7 +1080,7 @@ add_network_cb (DBusGProxy *proxy, DBusGProxyCall *call_id, gpointer user_data)
+ 			                            self,
+ 			                            NULL,
+ 			                            DBUS_TYPE_STRING, name,
+-			                            DBUS_TYPE_G_UCHAR_ARRAY, blobs,
++			                            DBUS_TYPE_G_UCHAR_ARRAY, data,
+ 			                            G_TYPE_INVALID);
+ 		nm_call_store_add (priv->assoc_pcalls, priv->iface_proxy, call);
+ 	}
+-- 
+1.9.3
+
diff --git a/0070-rh1047083-handle-mtu-for-ip4-config-merge-and-subtract.patch b/0070-rh1047083-handle-mtu-for-ip4-config-merge-and-subtract.patch
new file mode 100644
index 0000000..b2d6893
--- /dev/null
+++ b/0070-rh1047083-handle-mtu-for-ip4-config-merge-and-subtract.patch
@@ -0,0 +1,156 @@
+From e8be37613784c96c48c18e23790c7c246d2c750b Mon Sep 17 00:00:00 2001
+From: =?UTF-8?q?Ji=C5=99=C3=AD=20Klime=C5=A1?= <jklimes at redhat.com>
+Date: Thu, 17 Apr 2014 11:15:36 +0200
+Subject: [PATCH 1/1] core: fix MTU handling while merging/subtracting IP
+ configs (bgo #721420)
+
+https://bugzilla.gnome.org/show_bug.cgi?id=721420
+https://bugzilla.redhat.com/show_bug.cgi?id=1047083
+(cherry picked from commit 0757e33e746f0a203b4a4c5f386307e3a8ed9766)
+
+Conflicts:
+	src/tests/test-ip4-config.c
+---
+ src/nm-ip4-config.c         | 12 ++++++++++-
+ src/tests/test-ip4-config.c | 50 ++++++++++++++++++++++++++++++++++++++++++++-
+ 2 files changed, 60 insertions(+), 2 deletions(-)
+
+diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c
+index b7ae161..23be6d7 100644
+--- a/src/nm-ip4-config.c
++++ b/src/nm-ip4-config.c
+@@ -15,7 +15,7 @@
+  * with this program; if not, write to the Free Software Foundation, Inc.,
+  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+  *
+- * Copyright (C) 2005 - 2013 Red Hat, Inc.
++ * Copyright (C) 2005 - 2014 Red Hat, Inc.
+  * Copyright (C) 2006 - 2008 Novell, Inc.
+  */
+ 
+@@ -386,9 +386,14 @@ nm_ip4_config_merge (NMIP4Config *dst, const NMIP4Config *src)
+ 	for (i = 0; i < nm_ip4_config_get_num_searches (src); i++)
+ 		nm_ip4_config_add_search (dst, nm_ip4_config_get_search (src, i));
+ 
++	/* MSS */
+ 	if (!nm_ip4_config_get_mss (dst))
+ 		nm_ip4_config_set_mss (dst, nm_ip4_config_get_mss (src));
+ 
++	/* MTU */
++	if (!nm_ip4_config_get_mtu (dst))
++		nm_ip4_config_set_mtu (dst, nm_ip4_config_get_mtu (src));
++
+ 	/* NIS */
+ 	for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++)
+ 		nm_ip4_config_add_nis_server (dst, nm_ip4_config_get_nis_server (src, i));
+@@ -495,9 +500,14 @@ nm_ip4_config_subtract (NMIP4Config *dst, const NMIP4Config *src)
+ 		}
+ 	}
+ 
++	/* MSS */
+ 	if (nm_ip4_config_get_mss (src) == nm_ip4_config_get_mss (dst))
+ 		nm_ip4_config_set_mss (dst, 0);
+ 
++	/* MTU */
++	if (nm_ip4_config_get_mtu (src) == nm_ip4_config_get_mtu (dst))
++		nm_ip4_config_set_mtu (dst, 0);
++
+ 	/* NIS */
+ 	for (i = 0; i < nm_ip4_config_get_num_nis_servers (src); i++) {
+ 		guint32 src_nis = nm_ip4_config_get_nis_server (src, i);
+diff --git a/src/tests/test-ip4-config.c b/src/tests/test-ip4-config.c
+index fde4a40..1f2c968 100644
+--- a/src/tests/test-ip4-config.c
++++ b/src/tests/test-ip4-config.c
+@@ -14,7 +14,7 @@
+  * with this program; if not, write to the Free Software Foundation, Inc.,
+  * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+  *
+- * Copyright (C) 2013 Red Hat, Inc.
++ * Copyright (C) 2013 - 2014 Red Hat, Inc.
+  *
+  */
+ 
+@@ -116,6 +116,8 @@ test_subtract (void)
+ 	const char *expected_search = "somewhere.com";
+ 	guint32 expected_nis = addr_to_num ("1.2.3.13");
+ 	guint32 expected_wins = addr_to_num ("2.3.4.5");
++	guint32 expected_mss = 1400;
++	guint32 expected_mtu = 1492;
+ 
+ 	src = build_test_config ();
+ 
+@@ -135,6 +137,9 @@ test_subtract (void)
+ 	nm_ip4_config_add_nis_server (dst, expected_nis);
+ 	nm_ip4_config_add_wins (dst, expected_wins);
+ 
++	nm_ip4_config_set_mss (dst, expected_mss);
++	nm_ip4_config_set_mtu (dst, expected_mtu);
++
+ 	nm_ip4_config_subtract (dst, src);
+ 
+ 	/* ensure what's left is what we expect */
+@@ -169,10 +174,52 @@ test_subtract (void)
+ 	g_assert_cmpuint (nm_ip4_config_get_num_wins (dst), ==, 1);
+ 	g_assert_cmpuint (nm_ip4_config_get_wins (dst, 0), ==, expected_wins);
+ 
++	g_assert_cmpuint (nm_ip4_config_get_mss (dst), ==, expected_mss);
++	g_assert_cmpuint (nm_ip4_config_get_mtu (dst), ==, expected_mtu);
++
+ 	g_object_unref (src);
+ 	g_object_unref (dst);
+ }
+ 
++static void
++test_merge_subtract_mss_mtu (void)
++{
++	NMIP4Config *cfg1, *cfg2, *cfg3;
++	guint32 expected_mss2 = 1400;
++	guint32 expected_mtu2 = 1492;
++	guint32 expected_mss3 = 555;
++	guint32 expected_mtu3 = 666;
++
++	cfg1 = build_test_config ();
++	cfg2 = build_test_config ();
++	cfg3 = build_test_config ();
++
++	/* add MSS, MTU to configs to test them */
++	nm_ip4_config_set_mss (cfg2, expected_mss2);
++	nm_ip4_config_set_mtu (cfg2, expected_mtu2);
++	nm_ip4_config_set_mss (cfg3, expected_mss3);
++	nm_ip4_config_set_mtu (cfg3, expected_mtu3);
++
++	nm_ip4_config_merge (cfg1, cfg2);
++	/* ensure MSS and MTU are in cfg1 */
++	g_assert_cmpuint (nm_ip4_config_get_mss (cfg1), ==, expected_mss2);
++	g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu2);
++
++	nm_ip4_config_merge (cfg1, cfg3);
++	/* ensure again the same MSS and MTU are in cfg1 */
++	g_assert_cmpuint (nm_ip4_config_get_mss (cfg1), ==, expected_mss2);
++	g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, expected_mtu2);
++
++	nm_ip4_config_subtract (cfg1, cfg2);
++	/* ensure MSS and MTU are zero in cfg1 */
++	g_assert_cmpuint (nm_ip4_config_get_mss (cfg1), ==, 0);
++	g_assert_cmpuint (nm_ip4_config_get_mtu (cfg1), ==, 0);
++
++	g_object_unref (cfg1);
++	g_object_unref (cfg2);
++	g_object_unref (cfg3);
++}
++
+ /*******************************************/
+ 
+ int
+@@ -183,6 +230,7 @@ main (int argc, char **argv)
+ 	g_type_init ();
+ 
+ 	g_test_add_func ("/ip4-config/subtract", test_subtract);
++	g_test_add_func ("/ip4-config/merge-subtract-mss-mtu", test_merge_subtract_mss_mtu);
+ 
+ 	return g_test_run ();
+ }
+-- 
+1.9.3
+
diff --git a/NetworkManager.spec b/NetworkManager.spec
index 632e67b..2501a17 100644
--- a/NetworkManager.spec
+++ b/NetworkManager.spec
@@ -42,7 +42,7 @@ Name: NetworkManager
 Summary: Network connection manager and user applications
 Epoch: 1
 Version: 0.9.9.0
-Release: 40%{snapshot}%{?dist}
+Release: 41%{snapshot}%{?dist}
 Group: System Environment/Base
 License: GPLv2+
 URL: http://www.gnome.org/projects/NetworkManager/
@@ -119,6 +119,8 @@ Patch65: 0065-rh1094064-agent-crash-fix.patch
 Patch66: 0066-rh1082041-addr-preferred-time-fix.patch
 Patch67: 0067-rh1113122-missing-dispatcher-event-on-dhcp-change.patch
 Patch68: 0068-cli-bash-completion-escaping.patch
+Patch69: 0069-rh1115538-fix-supplicant-crash-for-AddBlob.patch
+Patch70: 0070-rh1047083-handle-mtu-for-ip4-config-merge-and-subtract.patch
 
 BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
 
@@ -352,6 +354,8 @@ by nm-connection-editor and nm-applet in a non-graphical environment.
 %patch66 -p1 -b .0066-rh1082041-addr-preferred-time-fix.orig
 %patch67 -p1 -b .0067-rh1113122-missing-dispatcher-event-on-dhcp-change.orig
 %patch68 -p1 -b .0068-cli-bash-completion-escaping.orig
+%patch69 -p1 -b .0069-rh1115538-fix-supplicant-crash-for-AddBlob.orig
+%patch70 -p1 -b .0070-rh1047083-handle-mtu-for-ip4-config-merge-and-subtract.orig
 
 %build
 
@@ -578,6 +582,10 @@ fi
 %endif
 
 %changelog
+* Wed Jul  2 2014 Thomas Haller <thaller at redhat.com> - 0.9.9.0-41.git20131003
+- core: fix crash passing wrong parameter to AddBlob for wpa_supplicant (rh #1115538)
+- core: fix setting MTU from DHCP (rh #1047083)
+
 * Wed Jun 25 2014 Thomas Haller <thaller at redhat.com> - 0.9.9.0-40.git20131003
 - core: fix missing dispatcher events on DHCP change (rh #1113122)
 - cli: improve escaping special characters and space for bash completion (bgo #709426)


More information about the scm-commits mailing list