NetworkManager/rh1019021-fix-crash-ip6-rou...

63 lines
2.7 KiB
Diff

commit 19b040236ec59fe8f9730d9da6d9262921d28936
Author: Thomas Haller <thaller@redhat.com>
Date: Wed Oct 30 20:18:58 2013 +0100
core: fix segfault in nm-policy when setting default route for vpn
nm_vpn_connection_get_ip6_internal_gateway might return NULL. In this
case, we add a device route (to gateway '::') over the vpn.
Before, in such a case, NM crashed with SEGFAULT.
https://bugzilla.redhat.com/show_bug.cgi?id=1019021
Signed-off-by: Thomas Haller <thaller@redhat.com>
diff --git a/src/nm-policy.c b/src/nm-policy.c
index 6d15e01..49c005c 100644
--- a/src/nm-policy.c
+++ b/src/nm-policy.c
@@ -860,12 +860,15 @@ update_ip6_routing (NMPolicy *policy, gboolean force_update)
int parent_ifindex = nm_device_get_ip_ifindex (parent);
NMIP6Config *parent_ip6 = nm_device_get_ip6_config (parent);
guint32 parent_mss = parent_ip6 ? nm_ip6_config_get_mss (parent_ip6) : 0;
- struct in6_addr int_gw = *nm_vpn_connection_get_ip6_internal_gateway (vpn);
+ const struct in6_addr *int_gw = nm_vpn_connection_get_ip6_internal_gateway (vpn);
int mss = nm_ip6_config_get_mss (ip6_config);
- if (!nm_platform_ip6_route_add (ip_ifindex, in6addr_any, 0, int_gw, 0, mss)) {
+ if (!int_gw)
+ int_gw = &in6addr_any;
+
+ if (!nm_platform_ip6_route_add (ip_ifindex, in6addr_any, 0, *int_gw, 0, mss)) {
nm_platform_ip6_route_add (parent_ifindex, *gw_addr, 128, in6addr_any, 0, parent_mss);
- if (!nm_platform_ip6_route_add (ip_ifindex, in6addr_any, 0, int_gw, 0, mss)) {
+ if (!nm_platform_ip6_route_add (ip_ifindex, in6addr_any, 0, *int_gw, 0, mss)) {
nm_log_err (LOGD_IP6 | LOGD_VPN, "Failed to set default route.");
}
}
commit 886ca75ac33de252158a63074cc7cf9d0215c962
Author: Thomas Haller <thaller@redhat.com>
Date: Fri Nov 1 10:57:18 2013 +0100
core: fix crash when reading routes from VPN Ip6Config (bgo #706332)
https://bugzilla.gnome.org/show_bug.cgi?id=706332
Reported-by: Nicolas Iooss <nicolas.iooss.2010_nm@m4x.org>
Signed-off-by: Thomas Haller <thaller@redhat.com>
diff --git a/src/vpn-manager/nm-vpn-connection.c b/src/vpn-manager/nm-vpn-connection.c
index 6962e30..263f253 100644
--- a/src/vpn-manager/nm-vpn-connection.c
+++ b/src/vpn-manager/nm-vpn-connection.c
@@ -1084,7 +1084,7 @@ nm_vpn_connection_ip6_config_get (DBusGProxy *proxy,
* the VPN server, we want to use the NM created route instead of
* whatever the server provides.
*/
- if (IN6_ARE_ADDR_EQUAL (&route.network, priv->ip6_external_gw) && route.plen == 128)
+ if (priv->ip6_external_gw && IN6_ARE_ADDR_EQUAL (&route.network, priv->ip6_external_gw) && route.plen == 128)
continue;
/* Otherwise accept the VPN-provided route */