Merge ~daxtens/ubuntu/+source/systemd:lp1812760-bionic into ubuntu/+source/systemd:ubuntu/bionic-devel

Proposed by Daniel Axtens
Status: Rejected
Rejected by: Christian Ehrhardt 
Proposed branch: ~daxtens/ubuntu/+source/systemd:lp1812760-bionic
Merge into: ubuntu/+source/systemd:ubuntu/bionic-devel
Diff against target: 498 lines (+458/-0)
6 files modified
debian/changelog (+15/-0)
debian/patches/Install-routes-after-addresses-are-ready.patch (+98/-0)
debian/patches/Move-link_check_ready-to-later-in-the-file.patch (+147/-0)
debian/patches/networkd-don-t-remove-ip-address.patch (+92/-0)
debian/patches/networkd-don-t-remove-route.patch (+102/-0)
debian/patches/series (+4/-0)
Reviewer Review Type Date Requested Status
Christian Ehrhardt  (community) Needs Fixing
Dimitri John Ledkov Pending
Canonical Server Core Reviewers Pending
Canonical Server Pending
Review via email: mp+362056@code.launchpad.net

Description of the change

  * Fix an issue where IPv6 routes that specified PreferredSource
    would not be added - upstream bug #5882. (LP: #1812760)

PPA: ppa:daxtens/systemd-lp1812760

Steps to test:

Start a Bionic VM.

Add the following netplan yaml (adjust for ethernet card and MAC):

network:
    version: 2
    ethernets:
        ens3:
            dhcp4: true
            match:
                macaddress: 52:54:00:e2:c2:d7
            set-name: ens3
            addresses: ["fd8f:1d7d:b141::2/64", "fd8f:1d7d:b141::200/64"]
            routes:
              - to: "a::/16"
                via: "fd8f:1d7d:b141::1"
                from: "fd8f:1d7d:b141::2"
              - to: "fd8f:1d7d:b141::/64"
                scope: link
                from: "fd8f:1d7d:b141::2"
                metric: 255

Run netplan apply or reboot. (If you have run netplan apply, wait ~10s for addresses to leave tentative state.)

With the current version, ip -6 route reports:

ubuntu@b-np:~$ ip -6 route
fd8f:1d7d:b141::/64 dev ens3 proto kernel metric 256 pref medium
fe80::/64 dev ens3 proto kernel metric 256 pref medium

This is missing the route to "a::/16", and the route to "fd8f:1d7d:b141::/64" that has "fd8f:1d7d:b141::2" as the source address.

Test the new version:

sudo apt-add-repository ppa:daxtens/systemd-lp1812760
sudo apt update
sudo apt install systemd
sudo reboot # it's not sufficient to run netplan apply here as the addresses already exist and are not tentative

Now, we see:

ubuntu@b-np:~$ ip -6 route
a::/16 via fd8f:1d7d:b141::1 dev ens3 proto static src fd8f:1d7d:b141::2 metric 1024 pref medium
fd8f:1d7d:b141::/64 dev ens3 proto static src fd8f:1d7d:b141::2 metric 255 pref medium
fd8f:1d7d:b141::/64 dev ens3 proto kernel metric 256 pref medium
fe80::/64 dev ens3 proto kernel metric 256 pref medium

To post a comment you must log in.
Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

Hi Daniel,
this isn't a full review as I'm not feeling authorized for that on systemd.
I added xnox as a reviewer to take a look from that POV.
But already I saw a few formal things you could address.

- The changelog entry should list the patches in d/p/... that are related to this fix.
- the patches should get more entries to follow dep3 [1] standard
  You have backported changes (modified) and used as-is - mark those accordingly
  Please use URLs to a git, not just hash values.
  The following snippet might help

# IF MODIFIED
Author: <<our mail/name>
Original-Author: <todo-author>
Origin: backport, <todo-URL-to-git>
# OTHERWISE
Origin: upstream, <todo-URL-to-git>

Bug-Ubuntu: https://bugs.launchpad.net/bugs/1812760
Last-Update: 2019-01-22

[1]: https://dep-team.pages.debian.net/deps/dep3/

review: Needs Fixing
Revision history for this message
Daniel Axtens (daxtens) wrote :

Hi Christian,

Thanks for the review. I think the latest update resolves your feedback.

Regards,
Daniel

Revision history for this message
Christian Ehrhardt  (paelzer) wrote :

The fixes for bug 1812760 have landed in Bionic with:
systemd (237-3ubuntu10.20) bionic; urgency=medium
Similarly for Cosmic

Rejecting this outdated MP to clear our view to active MPs.

There was an error fetching revisions from git servers. Please try again in a few minutes. If the problem persists, contact Launchpad support.

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
1diff --git a/debian/changelog b/debian/changelog
2index de0dd4a..04feb3b 100644
3--- a/debian/changelog
4+++ b/debian/changelog
5@@ -1,3 +1,18 @@
6+systemd (237-3ubuntu10.12) bionic; urgency=medium
7+
8+ * Fix an issue where IPv6 routes that specified PreferredSource
9+ would not be added - upstream bug #5882. (LP: #1812760)
10+ - debian/patches/networkd-don-t-remove-ip-address.patch,
11+ debian/patches/networkd-don-t-remove-route.patch: don't clear out all
12+ IP addresses and routes when starting, only ones not in the config.
13+ Required for the remaining patches to fully cover the field.
14+ - debian/patches/Move-link_check_ready-to-later-in-the-file.patch,
15+ debian/patches/Install-routes-after-addresses-are-ready.patch: wait
16+ until addresses are ready (not tentative) before installing routes,
17+ allowing routes with IPv6 source addresses to work.
18+
19+ -- Daniel Axtens <daniel.axtens@canonical.com> Wed, 23 Jan 2019 14:24:37 +1100
20+
21 systemd (237-3ubuntu10.11) bionic-security; urgency=medium
22
23 * SECURITY UPDATE: memory corruption in journald via attacker controlled alloca
24diff --git a/debian/patches/Install-routes-after-addresses-are-ready.patch b/debian/patches/Install-routes-after-addresses-are-ready.patch
25new file mode 100644
26index 0000000..c29b824
27--- /dev/null
28+++ b/debian/patches/Install-routes-after-addresses-are-ready.patch
29@@ -0,0 +1,98 @@
30+From 74471d996d5a191de7704958f9c9fd7dcc44157b Mon Sep 17 00:00:00 2001
31+From: Daniel Axtens <dja@axtens.net>
32+Date: Wed, 5 Dec 2018 21:49:35 +1100
33+Subject: Install routes after addresses are ready
34+
35+If an IPv6 route is added with a source address that is still
36+tentative, the kernel will refuse to install it.
37+
38+Previously, once we sent the messages to the kernel to add the
39+addresses, we would immediately proceed to add the routes. The
40+addresses would usually still be tentative at this point, so
41+adding static IPv6 routes was broken - see issue #5882.
42+
43+Now, only begin to configure routes once the addresses are ready,
44+by restructuring the state machine, and tracking when addresses are
45+ready, not just added.
46+
47+Fixes: #5882
48+
49+Author: Daniel Axtens <daniel.axtens@canonical.com>
50+Original-Author: Daniel Axtens <dja@axtens.net>
51+Origin: backport, https://github.com/systemd/systemd/commit/6aa5773bfff0a92d64da70426cae833df6f84daf
52+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1812760
53+Last-Update: 2019-01-23
54+---
55+ src/network/networkd-link.c | 21 +++++++++++++--------
56+ src/network/networkd-link.h | 2 ++
57+ 2 files changed, 15 insertions(+), 8 deletions(-)
58+
59+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
60+index 972b92992f68..53c4da18aa7a 100644
61+--- a/src/network/networkd-link.c
62++++ b/src/network/networkd-link.c
63+@@ -847,6 +847,15 @@ void link_check_ready(Link *link) {
64+ if (!link->network)
65+ return;
66+
67++ SET_FOREACH(a, link->addresses, i)
68++ if (!address_is_ready(a))
69++ return;
70++
71++ if (!link->addresses_ready) {
72++ link->addresses_ready = true;
73++ link_enter_set_routes(link);
74++ }
75++
76+ if (!link->static_routes_configured)
77+ return;
78+
79+@@ -878,10 +887,6 @@ void link_check_ready(Link *link) {
80+ return;
81+ }
82+
83+- SET_FOREACH(a, link->addresses, i)
84+- if (!address_is_ready(a))
85+- return;
86+-
87+ if (link->state != LINK_STATE_CONFIGURED)
88+ link_enter_configured(link);
89+
90+@@ -931,7 +936,7 @@ static int address_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userda
91+
92+ if (link->address_messages == 0) {
93+ log_link_debug(link, "Addresses set");
94+- link_enter_set_routes(link);
95++ link_check_ready(link);
96+ }
97+
98+ return 1;
99+@@ -1232,9 +1237,9 @@ static int link_enter_set_addresses(Link *link) {
100+ log_link_debug(link, "Offering DHCPv4 leases");
101+ }
102+
103+- if (link->address_messages == 0)
104+- link_enter_set_routes(link);
105+- else
106++ if (link->address_messages == 0) {
107++ link_check_ready(link);
108++ } else
109+ log_link_debug(link, "Setting addresses");
110+
111+ return 0;
112+diff --git a/src/network/networkd-link.h b/src/network/networkd-link.h
113+index 8aaaa679ff36..32b4934349b7 100644
114+--- a/src/network/networkd-link.h
115++++ b/src/network/networkd-link.h
116+@@ -98,6 +98,8 @@ typedef struct Link {
117+ Set *routes;
118+ Set *routes_foreign;
119+
120++ bool addresses_ready;
121++
122+ sd_dhcp_client *dhcp_client;
123+ sd_dhcp_lease *dhcp_lease;
124+ char *lease_file;
125+--
126+2.17.1
127+
128diff --git a/debian/patches/Move-link_check_ready-to-later-in-the-file.patch b/debian/patches/Move-link_check_ready-to-later-in-the-file.patch
129new file mode 100644
130index 0000000..469270e
131--- /dev/null
132+++ b/debian/patches/Move-link_check_ready-to-later-in-the-file.patch
133@@ -0,0 +1,147 @@
134+From 74b69ca2b89f8cf29262de97c40a8e79056a3779 Mon Sep 17 00:00:00 2001
135+From: Daniel Axtens <dja@axtens.net>
136+Date: Wed, 5 Dec 2018 20:39:41 +1100
137+Subject: Move link_check_ready() to later in the file
138+
139+We're about to need it to be later in the file for the next commit.
140+Moving it now means that when we change it in the next commit, it's
141+not intermingled with the move.
142+
143+No functional change intended.
144+
145+Author: Daniel Axtens <daniel.axtens@canonical.com>
146+Original-Author: Daniel Axtens <dja@axtens.net>
147+Origin: backport, https://github.com/systemd/systemd/commit/6accfd3139a0ccef9859b742452c04926f52515c
148+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1812760
149+Last-Update: 2019-01-23
150+---
151+ src/network/networkd-link.c | 106 ++++++++++++++++++------------------
152+ 1 file changed, 53 insertions(+), 53 deletions(-)
153+
154+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
155+index cae7519efe2c..972b92992f68 100644
156+--- a/src/network/networkd-link.c
157++++ b/src/network/networkd-link.c
158+@@ -741,59 +741,6 @@ static void link_enter_configured(Link *link) {
159+ link_dirty(link);
160+ }
161+
162+-void link_check_ready(Link *link) {
163+- Address *a;
164+- Iterator i;
165+-
166+- assert(link);
167+-
168+- if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
169+- return;
170+-
171+- if (!link->network)
172+- return;
173+-
174+- if (!link->static_routes_configured)
175+- return;
176+-
177+- if (!link->routing_policy_rules_configured)
178+- return;
179+-
180+- if (link_ipv4ll_enabled(link))
181+- if (!link->ipv4ll_address ||
182+- !link->ipv4ll_route)
183+- return;
184+-
185+- if (!link->network->bridge) {
186+-
187+- if (link_ipv6ll_enabled(link))
188+- if (in_addr_is_null(AF_INET6, (const union in_addr_union*) &link->ipv6ll_address) > 0)
189+- return;
190+-
191+- if ((link_dhcp4_enabled(link) && !link_dhcp6_enabled(link) &&
192+- !link->dhcp4_configured) ||
193+- (link_dhcp6_enabled(link) && !link_dhcp4_enabled(link) &&
194+- !link->dhcp6_configured) ||
195+- (link_dhcp4_enabled(link) && link_dhcp6_enabled(link) &&
196+- !link->dhcp4_configured && !link->dhcp6_configured))
197+- return;
198+-
199+- bool implicit = false;
200+- if (link_ipv6_accept_ra_enabled_implicit(link, &implicit) && !link->ndisc_configured)
201+- if (!implicit)
202+- return;
203+- }
204+-
205+- SET_FOREACH(a, link->addresses, i)
206+- if (!address_is_ready(a))
207+- return;
208+-
209+- if (link->state != LINK_STATE_CONFIGURED)
210+- link_enter_configured(link);
211+-
212+- return;
213+-}
214+-
215+ static int link_set_routing_policy_rule(Link *link) {
216+ RoutingPolicyRule *rule, *rrule = NULL;
217+ int r;
218+@@ -888,6 +835,59 @@ static int link_enter_set_routes(Link *link) {
219+ return 0;
220+ }
221+
222++void link_check_ready(Link *link) {
223++ Address *a;
224++ Iterator i;
225++
226++ assert(link);
227++
228++ if (IN_SET(link->state, LINK_STATE_FAILED, LINK_STATE_LINGER))
229++ return;
230++
231++ if (!link->network)
232++ return;
233++
234++ if (!link->static_routes_configured)
235++ return;
236++
237++ if (!link->routing_policy_rules_configured)
238++ return;
239++
240++ if (link_ipv4ll_enabled(link))
241++ if (!link->ipv4ll_address ||
242++ !link->ipv4ll_route)
243++ return;
244++
245++ if (!link->network->bridge) {
246++
247++ if (link_ipv6ll_enabled(link))
248++ if (in_addr_is_null(AF_INET6, (const union in_addr_union*) &link->ipv6ll_address) > 0)
249++ return;
250++
251++ if ((link_dhcp4_enabled(link) && !link_dhcp6_enabled(link) &&
252++ !link->dhcp4_configured) ||
253++ (link_dhcp6_enabled(link) && !link_dhcp4_enabled(link) &&
254++ !link->dhcp6_configured) ||
255++ (link_dhcp4_enabled(link) && link_dhcp6_enabled(link) &&
256++ !link->dhcp4_configured && !link->dhcp6_configured))
257++ return;
258++
259++ bool implicit = false;
260++ if (link_ipv6_accept_ra_enabled_implicit(link, &implicit) && !link->ndisc_configured)
261++ if (!implicit)
262++ return;
263++ }
264++
265++ SET_FOREACH(a, link->addresses, i)
266++ if (!address_is_ready(a))
267++ return;
268++
269++ if (link->state != LINK_STATE_CONFIGURED)
270++ link_enter_configured(link);
271++
272++ return;
273++}
274++
275+ int link_route_remove_handler(sd_netlink *rtnl, sd_netlink_message *m, void *userdata) {
276+ _cleanup_link_unref_ Link *link = userdata;
277+ int r;
278+--
279+2.17.1
280+
281diff --git a/debian/patches/networkd-don-t-remove-ip-address.patch b/debian/patches/networkd-don-t-remove-ip-address.patch
282new file mode 100644
283index 0000000..99bdecb
284--- /dev/null
285+++ b/debian/patches/networkd-don-t-remove-ip-address.patch
286@@ -0,0 +1,92 @@
287+From dfac6d99809a66bc840682b0171a9b08f073d363 Mon Sep 17 00:00:00 2001
288+From: Tobias Jungel <tobias.jungel@bisdn.de>
289+Date: Wed, 31 Oct 2018 13:33:54 +0100
290+Subject: networkd: don't remove ip address
291+
292+In case networkd is restarted this prevents a removal of an already existing IP
293+address that would be configured using networkd. With the proposed changes the
294+IP address will be kept on the interface without removing. This happens only on
295+physical hosts or VMs since networkd handles interface configuration slightly
296+different in containers.
297+
298+Origin: upstream, https://github.com/systemd/systemd/commit/30226d2718d9c3209ff779465ab62c3fb05b3f22
299+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1812760
300+Last-Update: 2019-01-23
301+---
302+ src/network/networkd-address.c | 6 ++++++
303+ src/network/networkd-link.c | 28 +++++++++++++++++++++++++---
304+ 2 files changed, 31 insertions(+), 3 deletions(-)
305+
306+diff --git a/src/network/networkd-address.c b/src/network/networkd-address.c
307+index ca5b54bdbf01..ed3ba005e435 100644
308+--- a/src/network/networkd-address.c
309++++ b/src/network/networkd-address.c
310+@@ -451,6 +451,7 @@ int address_remove(
311+ sd_netlink_message_handler_t callback) {
312+
313+ _cleanup_(sd_netlink_message_unrefp) sd_netlink_message *req = NULL;
314++ _cleanup_free_ char *b = NULL;
315+ int r;
316+
317+ assert(address);
318+@@ -460,6 +461,11 @@ int address_remove(
319+ assert(link->manager);
320+ assert(link->manager->rtnl);
321+
322++ if (DEBUG_LOGGING) {
323++ if (in_addr_to_string(address->family, &address->in_addr, &b) >= 0)
324++ log_link_debug(link, "Removing address %s", b);
325++ }
326++
327+ r = sd_rtnl_message_new_addr(link->manager->rtnl, &req, RTM_DELADDR,
328+ link->ifindex, address->family);
329+ if (r < 0)
330+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
331+index 30c2745bb562..1639f7ebf19c 100644
332+--- a/src/network/networkd-link.c
333++++ b/src/network/networkd-link.c
334+@@ -2519,6 +2519,22 @@ static int link_set_ipv6_mtu(Link *link) {
335+ return 0;
336+ }
337+
338++static bool link_is_static_address_configured(Link *link, Address *address) {
339++ Address *net_address;
340++
341++ assert(link);
342++ assert(address);
343++
344++ if (!link->network)
345++ return false;
346++
347++ LIST_FOREACH(addresses, net_address, link->network->static_addresses)
348++ if (address_equal(net_address, address))
349++ return true;
350++
351++ return false;
352++}
353++
354+ static int link_drop_foreign_config(Link *link) {
355+ Address *address;
356+ Route *route;
357+@@ -2530,9 +2546,15 @@ static int link_drop_foreign_config(Link *link) {
358+ if (address->family == AF_INET6 && in_addr_is_link_local(AF_INET6, &address->in_addr) == 1)
359+ continue;
360+
361+- r = address_remove(address, link, link_address_remove_handler);
362+- if (r < 0)
363+- return r;
364++ if (link_is_static_address_configured(link, address)) {
365++ r = address_add(link, address->family, &address->in_addr, address->prefixlen, NULL);
366++ if (r < 0)
367++ return log_link_error_errno(link, r, "Failed to add address: %m");
368++ } else {
369++ r = address_remove(address, link, link_address_remove_handler);
370++ if (r < 0)
371++ return r;
372++ }
373+ }
374+
375+ SET_FOREACH(route, link->routes_foreign, i) {
376+--
377+2.17.1
378+
379diff --git a/debian/patches/networkd-don-t-remove-route.patch b/debian/patches/networkd-don-t-remove-route.patch
380new file mode 100644
381index 0000000..cc9141b
382--- /dev/null
383+++ b/debian/patches/networkd-don-t-remove-route.patch
384@@ -0,0 +1,102 @@
385+From 51e1e204251bfa3e6c7e53b98039510dfe29b769 Mon Sep 17 00:00:00 2001
386+From: Tobias Jungel <tobias.jungel@bisdn.de>
387+Date: Tue, 6 Nov 2018 13:28:12 +0100
388+Subject: networkd: don't remove route
389+
390+In case networkd is restarted this prevents a removal of an already existing
391+route that would be configured using networkd. With the proposed changes the
392+route will be kept on the interface without removing. This happens only on
393+physical hosts or VMs since networkd handles interface configuration slightly
394+different in containers.
395+
396+Origin: upstream, https://github.com/systemd/systemd/commit/7ecf0c3e1795c08f3089752d7224fe097be4ea8e
397+Bug-Ubuntu: https://bugs.launchpad.net/bugs/1812760
398+Last-Update: 2019-01-23
399+---
400+ src/network/networkd-link.c | 28 +++++++++++++++++++++++++---
401+ src/network/networkd-route.c | 10 ++++++++++
402+ src/network/networkd-route.h | 1 +
403+ 3 files changed, 36 insertions(+), 3 deletions(-)
404+
405+diff --git a/src/network/networkd-link.c b/src/network/networkd-link.c
406+index 1639f7ebf19c..cae7519efe2c 100644
407+--- a/src/network/networkd-link.c
408++++ b/src/network/networkd-link.c
409+@@ -2535,6 +2535,22 @@ static bool link_is_static_address_configured(Link *link, Address *address) {
410+ return false;
411+ }
412+
413++static bool link_is_static_route_configured(Link *link, Route *route) {
414++ Route *net_route;
415++
416++ assert(link);
417++ assert(route);
418++
419++ if (!link->network)
420++ return false;
421++
422++ LIST_FOREACH(routes, net_route, link->network->static_routes)
423++ if (route_equal(net_route, route))
424++ return true;
425++
426++ return false;
427++}
428++
429+ static int link_drop_foreign_config(Link *link) {
430+ Address *address;
431+ Route *route;
432+@@ -2562,9 +2578,15 @@ static int link_drop_foreign_config(Link *link) {
433+ if (route->protocol == RTPROT_KERNEL)
434+ continue;
435+
436+- r = route_remove(route, link, link_route_remove_handler);
437+- if (r < 0)
438+- return r;
439++ if (link_is_static_route_configured(link, route)) {
440++ r = route_add(link, route->family, &route->dst, route->dst_prefixlen, route->tos, route->priority, route->table, NULL);
441++ if (r < 0)
442++ return r;
443++ } else {
444++ r = route_remove(route, link, link_route_remove_handler);
445++ if (r < 0)
446++ return r;
447++ }
448+ }
449+
450+ return 0;
451+diff --git a/src/network/networkd-route.c b/src/network/networkd-route.c
452+index 70dca5219bae..0157979f40e9 100644
453+--- a/src/network/networkd-route.c
454++++ b/src/network/networkd-route.c
455+@@ -227,6 +227,16 @@ static const struct hash_ops route_hash_ops = {
456+ .compare = route_compare_func
457+ };
458+
459++bool route_equal(Route *r1, Route *r2) {
460++ if (r1 == r2)
461++ return true;
462++
463++ if (!r1 || !r2)
464++ return false;
465++
466++ return route_compare_func(r1, r2) == 0;
467++}
468++
469+ int route_get(Link *link,
470+ int family,
471+ const union in_addr_union *dst,
472+diff --git a/src/network/networkd-route.h b/src/network/networkd-route.h
473+index 6db9d592ea53..0f54bd98fee8 100644
474+--- a/src/network/networkd-route.h
475++++ b/src/network/networkd-route.h
476+@@ -69,6 +69,7 @@ int route_get(Link *link, int family, const union in_addr_union *dst, unsigned c
477+ int route_add(Link *link, int family, const union in_addr_union *dst, unsigned char dst_prefixlen, unsigned char tos, uint32_t priority, uint32_t table, Route **ret);
478+ int route_add_foreign(Link *link, int family, const union in_addr_union *dst, unsigned char dst_prefixlen, unsigned char tos, uint32_t priority, uint32_t table, Route **ret);
479+ void route_update(Route *route, const union in_addr_union *src, unsigned char src_prefixlen, const union in_addr_union *gw, const union in_addr_union *prefsrc, unsigned char scope, unsigned char protocol, unsigned char type);
480++bool route_equal(Route *r1, Route *r2);
481+
482+ int route_expire_handler(sd_event_source *s, uint64_t usec, void *userdata);
483+
484+--
485+2.17.1
486+
487diff --git a/debian/patches/series b/debian/patches/series
488index d6ec9d0..f76931d 100644
489--- a/debian/patches/series
490+++ b/debian/patches/series
491@@ -91,3 +91,7 @@ CVE-2018-16864.patch
492 CVE-2018-16865_1.patch
493 CVE-2018-16865_2.patch
494 CVE-2018-16866.patch
495+networkd-don-t-remove-ip-address.patch
496+networkd-don-t-remove-route.patch
497+Move-link_check_ready-to-later-in-the-file.patch
498+Install-routes-after-addresses-are-ready.patch

Subscribers

People subscribed via source and target branches