platform: fix a routing-related bug that could cause NM and other apps to spin (rh #1151665)
This commit is contained in:
parent
9cbebd1da6
commit
ae5363f941
@ -0,0 +1,73 @@
|
|||||||
|
From ace746df4e2936ab50224d9fbef88025b69d2379 Mon Sep 17 00:00:00 2001
|
||||||
|
From: Dan Winship <danw@gnome.org>
|
||||||
|
Date: Fri, 24 Oct 2014 13:48:46 -0400
|
||||||
|
Subject: [PATCH] platform: deal with default route being passed to
|
||||||
|
route_sync() (bgo 735325)
|
||||||
|
|
||||||
|
NMIP4Configs and NMIP6Configs are never supposed to contain a default
|
||||||
|
route, and thus nm_platform_ip6_route_sync() should never have to deal
|
||||||
|
with one. Unfortunately, if it *does* get passed a default route, it
|
||||||
|
will add it even if it was already there. This will result in an
|
||||||
|
RTM_NEWROUTE notification, which will cause NMPlatform to emit
|
||||||
|
ip6-route-changed, which will result in NMDevice doing some work and
|
||||||
|
then calling nm_ip6_config_commit(), which will result in NMIP6Config
|
||||||
|
passing the same list of routes to nm_platform_ip6_route_sync() again,
|
||||||
|
including the default route, which will cause NMPlatform to add the
|
||||||
|
route again...
|
||||||
|
|
||||||
|
(Something eventually causes this cycle to get broken, but it starts
|
||||||
|
up again the next time NM receives an RA.)
|
||||||
|
|
||||||
|
Fix this by having the route_sync() functions never add/modify the
|
||||||
|
default route (They were already not deleting it.)
|
||||||
|
---
|
||||||
|
src/platform/nm-platform.c | 12 ++++++++++++
|
||||||
|
1 file changed, 12 insertions(+)
|
||||||
|
|
||||||
|
diff --git a/src/platform/nm-platform.c b/src/platform/nm-platform.c
|
||||||
|
index 75e6448..5d478e8 100644
|
||||||
|
--- a/src/platform/nm-platform.c
|
||||||
|
+++ b/src/platform/nm-platform.c
|
||||||
|
@@ -1908,6 +1908,9 @@ array_contains_ip6_route (const GArray *routes, const NMPlatformIP6Route *route)
|
||||||
|
* with the least possible disturbance. It simply removes routes that are
|
||||||
|
* not listed and adds routes that are.
|
||||||
|
*
|
||||||
|
+ * @known_routes should not contain a default route; if it does, it will be
|
||||||
|
+ * ignored.
|
||||||
|
+ *
|
||||||
|
* Returns: %TRUE on success.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
@@ -1938,6 +1941,9 @@ nm_platform_ip4_route_sync (int ifindex, const GArray *known_routes)
|
||||||
|
for (i = 0; i < known_routes->len && success; i++) {
|
||||||
|
known_route = &g_array_index (known_routes, NMPlatformIP4Route, i);
|
||||||
|
|
||||||
|
+ if (known_route->plen == 0)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
if ((known_route->gateway == 0) ^ (i_type != 0)) {
|
||||||
|
/* Make two runs over the list of routes. On the first, only add
|
||||||
|
* device routes, on the second the others (gateway routes). */
|
||||||
|
@@ -1975,6 +1981,9 @@ nm_platform_ip4_route_sync (int ifindex, const GArray *known_routes)
|
||||||
|
* with the least possible disturbance. It simply removes routes that are
|
||||||
|
* not listed and adds routes that are.
|
||||||
|
*
|
||||||
|
+ * @known_routes should not contain a default route; if it does, it will be
|
||||||
|
+ * ignored.
|
||||||
|
+ *
|
||||||
|
* Returns: %TRUE on success.
|
||||||
|
*/
|
||||||
|
gboolean
|
||||||
|
@@ -2006,6 +2015,9 @@ nm_platform_ip6_route_sync (int ifindex, const GArray *known_routes)
|
||||||
|
for (i = 0; i < known_routes->len && success; i++) {
|
||||||
|
known_route = &g_array_index (known_routes, NMPlatformIP6Route, i);
|
||||||
|
|
||||||
|
+ if (known_route->plen == 0)
|
||||||
|
+ continue;
|
||||||
|
+
|
||||||
|
if (IN6_IS_ADDR_UNSPECIFIED (&known_route->gateway) ^ (i_type != 0)) {
|
||||||
|
/* Make two runs over the list of routes. On the first, only add
|
||||||
|
* device routes, on the second the others (gateway routes). */
|
||||||
|
--
|
||||||
|
1.9.3
|
||||||
|
|
@ -13,7 +13,7 @@
|
|||||||
%define snapshot .git20140704
|
%define snapshot .git20140704
|
||||||
%define git_sha 6eb82acd
|
%define git_sha 6eb82acd
|
||||||
%define realversion 0.9.10.0
|
%define realversion 0.9.10.0
|
||||||
%define release_version 11
|
%define release_version 12
|
||||||
%define epoch_version 1
|
%define epoch_version 1
|
||||||
|
|
||||||
%define obsoletes_nmver 1:0.9.9.95-1
|
%define obsoletes_nmver 1:0.9.9.95-1
|
||||||
@ -87,6 +87,7 @@ Patch2: 0002-bluez-split-out-errors.patch
|
|||||||
Patch3: 0003-bluez-track-adapter-address-in-NMBluezDevice.patch
|
Patch3: 0003-bluez-track-adapter-address-in-NMBluezDevice.patch
|
||||||
Patch4: 0004-bluez-re-add-DUN-support-for-Bluez5.patch
|
Patch4: 0004-bluez-re-add-DUN-support-for-Bluez5.patch
|
||||||
Patch5: 0005-core-only-set-IPv6-hop_limit-for-values-greater-than.patch
|
Patch5: 0005-core-only-set-IPv6-hop_limit-for-values-greater-than.patch
|
||||||
|
Patch6: 0006-platform-deal-with-default-route-being-passed-to-rou.patch
|
||||||
|
|
||||||
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-root-%(%{__id_u} -n)
|
||||||
|
|
||||||
@ -330,6 +331,7 @@ by nm-connection-editor and nm-applet in a non-graphical environment.
|
|||||||
%patch3 -p1 -b .bluez-track-adapter-address-in-NMBluezDevice.orig
|
%patch3 -p1 -b .bluez-track-adapter-address-in-NMBluezDevice.orig
|
||||||
%patch4 -p1 -b .bluez-re-add-DUN-support-for-Bluez5.orig
|
%patch4 -p1 -b .bluez-re-add-DUN-support-for-Bluez5.orig
|
||||||
%patch5 -p1 -b .core-only-set-IPv6-hop_limit-for-values-greater-than.orig
|
%patch5 -p1 -b .core-only-set-IPv6-hop_limit-for-values-greater-than.orig
|
||||||
|
%patch6 -p1 -b .default-route-spam
|
||||||
|
|
||||||
%build
|
%build
|
||||||
|
|
||||||
@ -601,6 +603,9 @@ fi
|
|||||||
%endif
|
%endif
|
||||||
|
|
||||||
%changelog
|
%changelog
|
||||||
|
* Wed Oct 29 2014 Dan Winship <danw@redhat.com> - 1:0.9.10.0-12.git20140704
|
||||||
|
- platform: fix a routing-related bug that could cause NM and other apps to spin (rh #1151665)
|
||||||
|
|
||||||
* Wed Oct 29 2014 Lubomir Rintel <lkundrak@v3.sk> 1:0.9.10.0-11.git20140704
|
* Wed Oct 29 2014 Lubomir Rintel <lkundrak@v3.sk> 1:0.9.10.0-11.git20140704
|
||||||
- Fix IPv6 next hop default setting
|
- Fix IPv6 next hop default setting
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user