summaryrefslogtreecommitdiffstats
path: root/lib/nlattr.c
diff options
context:
space:
mode:
authorJohannes Berg2019-04-26 14:07:27 +0200
committerDavid S. Miller2019-04-27 23:07:21 +0200
commit6f455f5f4e9c28aefaefbe18ce7304b499645d75 (patch)
treef28d52c28e15bb7bf9cb4b58ab57d6b1aae2a769 /lib/nlattr.c
parentMerge branch 'nla_nest_start' (diff)
downloadkernel-qcow2-linux-6f455f5f4e9c28aefaefbe18ce7304b499645d75.tar.gz
kernel-qcow2-linux-6f455f5f4e9c28aefaefbe18ce7304b499645d75.tar.xz
kernel-qcow2-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.c9
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)