netlink: allow empty nested attributes
authorPatrick McHardy <kaber@trash.net>
Fri, 28 Nov 2008 11:05:19 +0000 (03:05 -0800)
committerDavid S. Miller <davem@davemloft.net>
Fri, 28 Nov 2008 11:05:19 +0000 (03:05 -0800)
validate_nla() currently doesn't allow empty nested attributes. This
makes userspace code unnecessarily complicated when starting and ending
the nested attribute is done by generic upper level code and the inner
attributes are dumped by a module.

Add a special case to accept empty nested attributes. When the nested
attribute is non empty, the same checks as before are performed.

Signed-off-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/netlink/attr.c

index c83fea7da9a8246dce2b4fb137e357c395a83f9f..56c3ce7fe29af8b2bf47dd8bdc41edb93576c70a 100644 (file)
@@ -83,6 +83,12 @@ static int validate_nla(struct nlattr *nla, int maxtype,
                if (attrlen < NLA_ALIGN(pt->len) + NLA_HDRLEN + nla_len(nla))
                        return -ERANGE;
                break;
+       case NLA_NESTED:
+               /* a nested attributes is allowed to be empty; if its not,
+                * it must have a size of at least NLA_HDRLEN.
+                */
+               if (attrlen == 0)
+                       break;
        default:
                if (pt->len)
                        minlen = pt->len;