Patrick Williams | b48b7b4 | 2016-08-17 15:04:38 -0500 | [diff] [blame^] | 1 | From 11aa07ed939193e85516c287a57dee1837242972 Mon Sep 17 00:00:00 2001 |
| 2 | From: Thomas Haller <thaller@redhat.com> |
| 3 | Date: Mon, 4 Jan 2016 18:54:26 +0100 |
| 4 | Subject: [PATCH 1/7] core: fix failure to configure routes due to wrong |
| 5 | device-route for IPv4 peer-addresses |
| 6 | |
| 7 | As in the case of a OpenVPN connection, we might add an address like: |
| 8 | 10.8.0.58/32 ptp 10.8.0.57 |
| 9 | |
| 10 | In this case, kernel would automatically add a device-route like: |
| 11 | 10.8.0.57/32 via 0.0.0.0 dev 32 metric 0 mss 0 src rtprot-kernel scope link pref-src 10.8.0.58 |
| 12 | |
| 13 | nm_ip4_config_commit() checks all IP addresses to figure out |
| 14 | the present device-routes. Then the routes are synced by NMRouteManager. |
| 15 | Due to a bug, we would not consider the peer-address, but the local-address |
| 16 | and configure a route 10.8.0.58/32, instead of 10.8.0.57/32. |
| 17 | |
| 18 | That stays mostly unnoticed, because usually the peer and the local-address are |
| 19 | in the same subnet, so that there is no difference (/32 is an example of the |
| 20 | peer-address being in a different subnet). |
| 21 | |
| 22 | It also seems that due to a bug fixed by df4e5357521 this issue didn't surface. |
| 23 | Probably because we would not notice the 10.8.0.57/32 right away and thus |
| 24 | nm_route_manager_ip4_route_sync() would not wrongly delete it. |
| 25 | |
| 26 | https://bugzilla.gnome.org/show_bug.cgi?id=759892 |
| 27 | |
| 28 | https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=809195 |
| 29 | https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=809494 |
| 30 | https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=809526 |
| 31 | https://bugs.archlinux.org/task/47535 |
| 32 | https://bugzilla.redhat.com/show_bug.cgi?id=1294309 |
| 33 | https://mail.gnome.org/archives/networkmanager-list/2015-December/msg00059.html |
| 34 | --- |
| 35 | src/nm-ip4-config.c | 3 ++- |
| 36 | 1 file changed, 2 insertions(+), 1 deletion(-) |
| 37 | |
| 38 | diff --git a/src/nm-ip4-config.c b/src/nm-ip4-config.c |
| 39 | index f625d35..61e29af 100644 |
| 40 | --- a/src/nm-ip4-config.c |
| 41 | +++ b/src/nm-ip4-config.c |
| 42 | @@ -298,7 +298,8 @@ nm_ip4_config_commit (const NMIP4Config *config, int ifindex, gboolean routes_fu |
| 43 | |
| 44 | route.ifindex = ifindex; |
| 45 | route.source = NM_IP_CONFIG_SOURCE_KERNEL; |
| 46 | - route.network = nm_utils_ip4_address_clear_host_address (addr->address, addr->plen); |
| 47 | + route.network = nm_utils_ip4_address_clear_host_address (addr->peer_address ? : addr->address, |
| 48 | + addr->plen); |
| 49 | route.plen = addr->plen; |
| 50 | route.pref_src = addr->address; |
| 51 | route.metric = default_route_metric; |
| 52 | -- |
| 53 | 2.5.0 |
| 54 | |