mirror of
https://github.com/adulau/aha.git
synced 2024-12-28 19:56:18 +00:00
ipv6: Do not assign non-valid address on interface.
Check the type of the address when adding a new one on interface. - the unspecified address (::) is always disallowed (RFC4291 2.5.2) - the loopback address is disallowed unless the interface is (one of) loopback (RFC4291 2.5.3). - multicast addresses are disallowed. Signed-off-by: YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
This commit is contained in:
parent
b4653e9945
commit
d68b82705a
1 changed files with 7 additions and 0 deletions
|
@ -578,6 +578,13 @@ ipv6_add_addr(struct inet6_dev *idev, const struct in6_addr *addr, int pfxlen,
|
|||
struct rt6_info *rt;
|
||||
int hash;
|
||||
int err = 0;
|
||||
int addr_type = ipv6_addr_type(addr);
|
||||
|
||||
if (addr_type == IPV6_ADDR_ANY ||
|
||||
addr_type & IPV6_ADDR_MULTICAST ||
|
||||
(!(idev->dev->flags & IFF_LOOPBACK) &&
|
||||
addr_type & IPV6_ADDR_LOOPBACK))
|
||||
return ERR_PTR(-EADDRNOTAVAIL);
|
||||
|
||||
rcu_read_lock_bh();
|
||||
if (idev->dead) {
|
||||
|
|
Loading…
Reference in a new issue