Package: network-manager Version: 0.9.10.0-2 Severity: serious Tags: patch Justification: breaks unrelated software
Hello, When using unrelated software, such as openvpn, that pushes default routes, network-manager immediately (and incorrectly) removes that route. This is new behavior in 0.9.10, it does not do this in previous versions. I spent quite a bit of time debugging this issue with upstream NM people on their IRC channel, in the end they came up with a patch that was committed upstream in git with the following hash: 06703c1670d0f96834b268920b09792e22fdb4c4) I tested this change, and it worked well for me, previously I uploaded a NMU, with this patch, thinking that this was #755015, and it successfully fixed the problem for me and others I know who are experiencing this issue. However, the NMU was not acknowledged in -2, due to it being targeted for the incorrect bug number. Considering that this effectively breaks all OpenVPN setups (and other software that modifies default routes) that are not using network-manager's built-in VPN mechanisms, this seems to me a serious regression over previous versions. Seeing as upstream has acknowledged this issue and provided a fix for it and that fix has been tested and even migrated to testing, it seems to me appropriate to cherry-pick the change in the package without waiting for the next major release of NM. I'm happy to re-NMU this fix, this time with the right bug number. Attached is the NMU diff (I'd only add the bug number to the changelog). micah -- System Information: Debian Release: jessie/sid APT prefers unstable APT policy: (500, 'unstable') Architecture: amd64 (x86_64) Foreign Architectures: i386 Kernel: Linux 3.14-2-amd64 (SMP w/4 CPU cores) Locale: LANG=en_US.utf8, LC_CTYPE=en_US.UTF-8 (charmap=UTF-8) Shell: /bin/sh linked to /bin/dash Versions of packages network-manager depends on: ii adduser 3.113+nmu3 ii dbus 1.8.6-2 ii init-system-helpers 1.21 ii isc-dhcp-client 4.3.1-1 ii libc6 2.19-10 ii libdbus-1-3 1.8.6-2 ii libdbus-glib-1-2 0.102-1 ii libgcrypt11 1.5.4-3 ii libglib2.0-0 2.40.0-5 ii libgnutls-deb0-28 3.3.7-2 ii libgudev-1.0-0 208-8 ii libmm-glib0 1.2.0-1 ii libndp0 1.4-1 ii libnewt0.52 0.52.17-1 ii libnl-3-200 3.2.24-2 ii libnl-genl-3-200 3.2.24-2 ii libnl-route-3-200 3.2.24-2 ii libnm-glib4 0.9.10.0-2 ii libnm-util2 0.9.10.0-2 ii libpam-systemd 208-8 ii libpolkit-gobject-1-0 0.105-6.1 ii libreadline6 6.3-8 ii libsoup2.4-1 2.46.0-2 ii libsystemd-daemon0 208-8 ii libsystemd-login0 208-8 ii libteamdctl0 1.12-1 ii libuuid1 2.20.1-5.8 ii lsb-base 4.1+Debian13 ii policykit-1 0.105-6.1 ii udev 208-8 ii wpasupplicant 1.1-1 Versions of packages network-manager recommends: ii crda 3.13-1 ii dnsmasq-base 2.71-1 ii iptables 1.4.21-2 ii modemmanager 1.2.0-1 ii ppp 2.4.6-2 Versions of packages network-manager suggests: ii avahi-autoipd 0.6.31-4 pn libteam-utils <none> -- Configuration Files: /etc/NetworkManager/NetworkManager.conf changed: [main] plugins=ifupdown,keyfile [ifupdown] managed=false [logging] -- no debconf information
diff -Nru network-manager-0.9.10.0/debian/changelog network-manager-0.9.10.0/debian/changelog --- network-manager-0.9.10.0/debian/changelog 2014-07-10 00:49:54.000000000 -0400 +++ network-manager-0.9.10.0/debian/changelog 2014-08-11 12:37:33.000000000 -0400 @@ -1,3 +1,11 @@ +network-manager (0.9.10.0-2.1) unstable; urgency=medium + + * Non-maintainer upload. + * Pull patch from upstream to fix checks for default + routes + + -- Micah Anderson <mi...@debian.org> Mon, 11 Aug 2014 12:08:31 -0400 + network-manager (0.9.10.0-2) unstable; urgency=medium * New upstream release. diff -Nru network-manager-0.9.10.0/debian/patches/0006-Fix-checks-for-default-routes network-manager-0.9.10.0/debian/patches/0006-Fix-checks-for-default-routes --- network-manager-0.9.10.0/debian/patches/0006-Fix-checks-for-default-routes 1969-12-31 19:00:00.000000000 -0500 +++ network-manager-0.9.10.0/debian/patches/0006-Fix-checks-for-default-routes 2014-08-11 12:37:08.000000000 -0400 @@ -0,0 +1,83 @@ +Index: network-manager-0.9.10.0/src/nm-ip4-config.c +=================================================================== +--- network-manager-0.9.10.0.orig/src/nm-ip4-config.c 2014-07-03 20:44:19.000000000 -0400 ++++ network-manager-0.9.10.0/src/nm-ip4-config.c 2014-07-29 19:42:06.965378158 -0400 +@@ -198,7 +198,7 @@ + for (i = 0; i < priv->routes->len; i++) { + const NMPlatformIP4Route *route = &g_array_index (priv->routes, NMPlatformIP4Route, i); + +- if (route->network == 0) { ++ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route)) { + if (route->metric < lowest_metric) { + priv->gateway = route->gateway; + lowest_metric = route->metric; +@@ -276,7 +276,8 @@ + /* Don't add the default route if the connection + * is never supposed to be the default connection. + */ +- if (nm_ip4_config_get_never_default (config) && route.network == 0) ++ if ( nm_ip4_config_get_never_default (config) ++ && NM_PLATFORM_IP_ROUTE_IS_DEFAULT (&route)) + continue; + + g_array_append_val (routes, route); +Index: network-manager-0.9.10.0/src/nm-ip6-config.c +=================================================================== +--- network-manager-0.9.10.0.orig/src/nm-ip6-config.c 2014-07-03 20:44:19.000000000 -0400 ++++ network-manager-0.9.10.0/src/nm-ip6-config.c 2014-07-29 19:42:06.965378158 -0400 +@@ -308,7 +308,7 @@ + for (i = 0; i < priv->routes->len; i++) { + const NMPlatformIP6Route *route = &g_array_index (priv->routes, NMPlatformIP6Route, i); + +- if (IN6_IS_ADDR_UNSPECIFIED (&route->network)) { ++ if (NM_PLATFORM_IP_ROUTE_IS_DEFAULT (route)) { + if (route->metric < lowest_metric) { + priv->gateway = route->gateway; + lowest_metric = route->metric; +@@ -387,7 +387,8 @@ + /* Don't add the default route if the connection + * is never supposed to be the default connection. + */ +- if (nm_ip6_config_get_never_default (config) && IN6_IS_ADDR_UNSPECIFIED (&route.network)) ++ if ( nm_ip6_config_get_never_default (config) ++ && NM_PLATFORM_IP_ROUTE_IS_DEFAULT (&route)) + continue; + + g_array_append_val (routes, route); +Index: network-manager-0.9.10.0/src/platform/nm-linux-platform.c +=================================================================== +--- network-manager-0.9.10.0.orig/src/platform/nm-linux-platform.c 2014-07-03 20:44:19.000000000 -0400 ++++ network-manager-0.9.10.0/src/platform/nm-linux-platform.c 2014-07-29 19:42:06.969378050 -0400 +@@ -3520,7 +3520,7 @@ + for (object = nl_cache_get_first (priv->route_cache); object; object = nl_cache_get_next (object)) { + if (_route_match ((struct rtnl_route *) object, AF_INET, ifindex)) { + if (init_ip4_route (&route, (struct rtnl_route *) object)) { +- if (route.plen != 0 || include_default) ++ if (!NM_PLATFORM_IP_ROUTE_IS_DEFAULT (&route) || include_default) + g_array_append_val (routes, route); + } + } +@@ -3542,7 +3542,7 @@ + for (object = nl_cache_get_first (priv->route_cache); object; object = nl_cache_get_next (object)) { + if (_route_match ((struct rtnl_route *) object, AF_INET6, ifindex)) { + if (init_ip6_route (&route, (struct rtnl_route *) object)) { +- if (route.plen != 0 || include_default) ++ if (!NM_PLATFORM_IP_ROUTE_IS_DEFAULT (&route) || include_default) + g_array_append_val (routes, route); + } + } +Index: network-manager-0.9.10.0/src/platform/nm-platform.h +=================================================================== +--- network-manager-0.9.10.0.orig/src/platform/nm-platform.h 2014-07-03 20:44:13.000000000 -0400 ++++ network-manager-0.9.10.0/src/platform/nm-platform.h 2014-07-29 19:41:45.549955242 -0400 +@@ -248,6 +248,10 @@ + }; + } NMPlatformIPRoute; + ++#define NM_PLATFORM_IP_ROUTE_IS_DEFAULT(route) \ ++ ( ((const NMPlatformIPRoute *) (route))->plen <= 0 ) ++ ++ + typedef struct { + __NMPlatformIPRoute_COMMON; + in_addr_t network; diff -Nru network-manager-0.9.10.0/debian/patches/series network-manager-0.9.10.0/debian/patches/series --- network-manager-0.9.10.0/debian/patches/series 2014-07-10 00:49:54.000000000 -0400 +++ network-manager-0.9.10.0/debian/patches/series 2014-08-11 12:37:21.000000000 -0400 @@ -3,3 +3,4 @@ 0003-Don-t-setup-Sleep-Monitor-if-not-booted-with-systemd.patch 0004-Use-symlinks-for-nmtui.patch 0005-Mark-virtual-ethernet-interfaces-as-unmanaged.patch +0006-Fix-checks-for-default-routes