summaryrefslogtreecommitdiff
path: root/lib/nlattr.c
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2023-07-18 09:52:29 +0200
committerFlorian Westphal <fw@strlen.de>2023-07-27 13:45:51 +0200
commit5fac9b7c16c50c6c7699517f582b56e3743f453a (patch)
treedcfead2e72694a85eb7bb3f43de650bfafa7d2d8 /lib/nlattr.c
parenta927d77778e380ffd6ffea1f2037c6bdb23af99a (diff)
netlink: allow be16 and be32 types in all uint policy checks
__NLA_IS_BEINT_TYPE(tp) isn't useful. NLA_BE16/32 are identical to NLA_U16/32, the only difference is that it tells the netlink validation functions that byteorder conversion might be needed before comparing the value to the policy min/max ones. After this change all policy macros that can be used with UINT types, such as NLA_POLICY_MASK() can also be used with NLA_BE16/32. This will be used to validate nf_tables flag attributes which are in bigendian byte order. Signed-off-by: Florian Westphal <fw@strlen.de>
Diffstat (limited to 'lib/nlattr.c')
-rw-r--r--lib/nlattr.c6
1 files changed, 6 insertions, 0 deletions
diff --git a/lib/nlattr.c b/lib/nlattr.c
index 489e15bde5c1..7a2b6c38fd59 100644
--- a/lib/nlattr.c
+++ b/lib/nlattr.c
@@ -355,6 +355,12 @@ static int nla_validate_mask(const struct nla_policy *pt,
case NLA_U64:
value = nla_get_u64(nla);
break;
+ case NLA_BE16:
+ value = ntohs(nla_get_be16(nla));
+ break;
+ case NLA_BE32:
+ value = ntohl(nla_get_be32(nla));
+ break;
default:
return -EINVAL;
}