network-manager fails to deprecate addresses
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
linux (Ubuntu) |
Incomplete
|
Undecided
|
Unassigned | ||
network-manager (Ubuntu) |
Triaged
|
Undecided
|
Unassigned | ||
systemd (Ubuntu) |
Invalid
|
Undecided
|
Unassigned |
Bug Description
network manager does not properly deprecate autoconfigured temporary IP addresses when ValidLifetime for a prefix is 0 in router advertisements. This behaviour is non-compliant with RFC 4861 § 6.3.4, which reads:
If the prefix is already present in the host's Prefix List as
the result of a previously received advertisement, reset its
Information option. If the new Lifetime value is zero, time-out
the prefix immediately.
The hosts instead continued to use temporary addresses configured until they reached their timeout, rather than immediately dropping the addresses. It further appears that it is generating new temporary addresses when the previous ones expire, but I have not been monitoring hosts closely enough to tell for sure---I will update on this when I have further information.
This problem was discovered on Ubuntu Studio 16.04.2; it is not present on Ubuntu Server (which uses Debian networking scripts).
Additional Info:
$ lsb_release -rd
Description: Ubuntu 16.04.2 LTS
Release: 16.04
$ apt-cache policy network-manager
network-manager:
Installed: 1.2.6-0ubuntu0.
Candidate: 1.2.6-0ubuntu0.
Version table:
*** 1.2.6-0ubuntu0.
500 http://
100 /var/lib/
1.
500 http://
1.
500 http://
tags: | added: rls-kk-incoming |
Changed in network-manager (Ubuntu): | |
status: | New → Triaged |
Changed in systemd (Ubuntu): | |
status: | New → Won't Fix |
status: | Won't Fix → Incomplete |
I can reproduce this on kinetic. I get sent a 2a02:908: 2812:7d20: :/64 prefix via RA with "valid lifetime" and ""preferred lifetime" set to 0, every 3s. Instead of the prefix being deleted from the interface, it's lifetime is set to 1s and then expires every second, causing regular "connection changed" type of errors in Chrome, it looks like this:
inet6 2a02:908: 2812:7d20: :e9eb/128 scope global dynamic noprefixroute 2812:7d20: 55e8:17dd: e766:a872/ 64 scope global deprecated dynamic noprefixroute
valid_lft 42961sec preferred_lft 42961sec
inet6 2a02:908:
valid_lft 6603sec preferred_lft 0sec
Reconnecting the WiFi gets rid of the /64 prefix.
I think my router is broken though, as it does not advertise any valid prefix, so you end up with *only* the /64 prefix until the router receives a new prefix from the ISP or reconfirms it or whatever, but still this is broken regardless.