diff options
author | Johannes Berg <johannes.berg@intel.com> | 2019-04-26 14:07:27 +0200 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2019-04-27 17:07:21 -0400 |
commit | 6f455f5f4e9c28aefaefbe18ce7304b499645d75 (patch) | |
tree | f28d52c28e15bb7bf9cb4b58ab57d6b1aae2a769 /lib/nlattr.c | |
parent | f6ad55a6a184ebdf3d98a90eab0895f73ce9797e (diff) | |
download | linux-6f455f5f4e9c28aefaefbe18ce7304b499645d75.tar.gz linux-6f455f5f4e9c28aefaefbe18ce7304b499645d75.tar.bz2 linux-6f455f5f4e9c28aefaefbe18ce7304b499645d75.zip |
netlink: add NLA_MIN_LEN
Rather than using NLA_UNSPEC for this type of thing, use NLA_MIN_LEN
so we can make NLA_UNSPEC be NLA_REJECT under certain conditions for
future attributes.
While at it, also use NLA_EXACT_LEN for the struct example.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'lib/nlattr.c')
-rw-r--r-- | lib/nlattr.c | 9 |
1 files changed, 8 insertions, 1 deletions
diff --git a/lib/nlattr.c b/lib/nlattr.c index d26de6156b97..465c9e8ef8a5 100644 --- a/lib/nlattr.c +++ b/lib/nlattr.c @@ -278,10 +278,17 @@ static int validate_nla(const struct nlattr *nla, int maxtype, } } break; + + case NLA_UNSPEC: + case NLA_MIN_LEN: + if (attrlen < pt->len) + goto out_err; + break; + default: if (pt->len) minlen = pt->len; - else if (pt->type != NLA_UNSPEC) + else minlen = nla_attr_minlen[pt->type]; if (attrlen < minlen) |