mirror of
https://github.com/systemd/systemd-stable.git
synced 2025-01-24 02:03:54 +03:00
ndisc: ignore invalid SLAAC prefix lengths (#4923)
- linux does not accept prefixes for SLAAC unequal to 64 bits: http://lxr.free-electrons.com/source/net/ipv6/addrconf.c#L2741 - when networkd tries export such a route to the kernel it will get -EINVAL and set the whole device into a failed state. - this patch will make networkd ignore such prefixes for SLAAC, but process other informations which may contain other prefixes. - Note that rfc4862 does not forbid prefix length != 64 bit
This commit is contained in:
parent
72d17ce680
commit
9f702d00d6
@ -459,6 +459,7 @@ _public_ int sd_ndisc_router_prefix_get_preferred_lifetime(sd_ndisc_router *rt,
|
|||||||
|
|
||||||
_public_ int sd_ndisc_router_prefix_get_flags(sd_ndisc_router *rt, uint8_t *ret) {
|
_public_ int sd_ndisc_router_prefix_get_flags(sd_ndisc_router *rt, uint8_t *ret) {
|
||||||
struct nd_opt_prefix_info *pi;
|
struct nd_opt_prefix_info *pi;
|
||||||
|
uint8_t flags;
|
||||||
int r;
|
int r;
|
||||||
|
|
||||||
assert_return(rt, -EINVAL);
|
assert_return(rt, -EINVAL);
|
||||||
@ -468,7 +469,14 @@ _public_ int sd_ndisc_router_prefix_get_flags(sd_ndisc_router *rt, uint8_t *ret)
|
|||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
*ret = pi->nd_opt_pi_flags_reserved;
|
flags = pi->nd_opt_pi_flags_reserved;
|
||||||
|
|
||||||
|
if ((flags & ND_OPT_PI_FLAG_AUTO) && (pi->nd_opt_pi_prefix_len != 64)) {
|
||||||
|
log_ndisc("Invalid prefix length, ignoring prefix for stateless autoconfiguration.");
|
||||||
|
flags &= ~ND_OPT_PI_FLAG_AUTO;
|
||||||
|
}
|
||||||
|
|
||||||
|
*ret = flags;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user