ieee802154: Fix EUI-64 station address validation.
Subsystems (2)
A message that is not in the archive (sent off-list or not yet received): 53cacc49e75b59f7b6458075b032be16f1133abb.1432816524.git.buytenh@wantstofly.org
RFC PATCH 2/2 ieee802154: Fix EUI-64 station address validation.
Refuse to allow setting an EUI-64 group address as an interface address, as those are not valid station addresses.
--- include/linux/ieee802154.h | 10 ++++------ net/mac802154/iface.c | 4 ++-- 2 files changed, 6 insertions(+), 8 deletions(-)
include/linux/ieee802154.h +4 -6
@@ -225,15 +225,13 @@ static inline bool ieee802154_is_valid_psdu_len(const u8 len)* ieee802154_is_valid_psdu_len - check if extended addr is valid * @addr: extended addr to check */ -static inline bool ieee802154_is_valid_extended_addr (const __le64 addr) +static inline bool ieee802154_is_valid_extended_unicast_addr (const __le64 addr) { -/* These EUI-64 addresses are reserved by IEEE. 0xffffffffffffffff -* is used internally as extended to short address broadcast mapping. -* This is currently a workaround because neighbor discovery can't -* deal with short addresses types right now. +/* Bail out if the address is all zero, or if the group +* address bit is set. */ return ((addr !=cpu_to_le64 (0x0000000000000000ULL )) && - (addr !=cpu_to_le64 (0xffffffffffffffffULL ))); + !(addr &cpu_to_le64 (0x0100000000000000ULL ))); }/**
net/mac802154/iface.c +2 -2
@@ -126,7 +126,7 @@ static int mac802154_wpan_mac_addr(struct net_device *dev, void *p)return -EBUSY ;ieee802154_be64_to_le64 (&extended_addr, addr->sa_data); -if (!ieee802154_is_valid_extended_addr (extended_addr)) +if (!ieee802154_is_valid_extended_unicast_addr (extended_addr))return -EINVAL ;memcpy (dev->dev_addr, addr->sa_data, dev->addr_len);
@@ -539,7 +539,7 @@ ieee802154_if_add(struct ieee802154_local *local, const char *name,switch (type) {case NL802154_IFTYPE_NODE : ndev->type =ARPHRD_IEEE802154 ; -if (ieee802154_is_valid_extended_addr (extended_addr)) +if (ieee802154_is_valid_extended_unicast_addr (extended_addr))ieee802154_le64_to_be64 (ndev->dev_addr, &extended_addr);else memcpy(ndev->dev_addr, ndev->perm_addr,
Signature · 1 line
2.4.1
Alexander Aring
maintainerQuoted 3 lines · Lennert Buytenhek
Refuse to allow setting an EUI-64 group address as an interface address, as those are not valid station addresses.
Read my other review, this will _maybe_ show that extended addr are always a unicast address (the full address range).
- Alex
Quoted 4 lines · Lennert Buytenhek
Refuse to allow setting an EUI-64 group address as an interface address, as those are not valid station addresses.
Signed-off-by Lennert Buytenhek <[email protected]>
Hi Lennert,
Quoted 8 lines
Refuse to allow setting an EUI-64 group address as an interface address, as those are not valid station addresses.
Signed-off-by Lennert Buytenhek <[email protected]>---
include/linux/ieee802154.h| 10 ++++------net/mac802154/iface.c| 4 ++--2 files changed, 6 insertions(+), 8 deletions(-)
patch has been applied to bluetooth-next tree.
Regards
Marcel