Skip to content

Commit

Permalink
netlink: Fix nla_parse_nested_compat() to call nla_parse() directly
Browse files Browse the repository at this point in the history
The purpose of nla_parse_nested_compat() is to parse attributes which
contain a struct followed by a stream of nested attributes.  So far,
it called nla_parse_nested() to parse the stream of nested attributes
which was wrong, as nla_parse_nested() expects a container attribute
as data which holds the attribute stream.  It needs to call
nla_parse() directly while pointing at the next possible alignment
point after the struct in the beginning of the attribute.

With this patch, I can no longer reproduce the reported leftover
warnings.

Signed-off-by: Thomas Graf <tgraf@suug.ch>
Acked-by: Patrick McHardy <kaber@trash.net>
Signed-off-by: David S. Miller <davem@davemloft.net>
  • Loading branch information
Thomas Graf authored and David S. Miller committed May 22, 2008
1 parent 071f92d commit b9a2f2e
Showing 1 changed file with 6 additions and 5 deletions.
11 changes: 6 additions & 5 deletions include/net/netlink.h
Original file line number Diff line number Diff line change
Expand Up @@ -772,12 +772,13 @@ static inline int __nla_parse_nested_compat(struct nlattr *tb[], int maxtype,
const struct nla_policy *policy,
int len)
{
if (nla_len(nla) < len)
int nested_len = nla_len(nla) - NLA_ALIGN(len);

if (nested_len < 0)
return -1;
if (nla_len(nla) >= NLA_ALIGN(len) + sizeof(struct nlattr))
return nla_parse_nested(tb, maxtype,
nla_data(nla) + NLA_ALIGN(len),
policy);
if (nested_len >= nla_attr_size(0))
return nla_parse(tb, maxtype, nla_data(nla) + NLA_ALIGN(len),
nested_len, policy);
memset(tb, 0, sizeof(struct nlattr *) * (maxtype + 1));
return 0;
}
Expand Down

0 comments on commit b9a2f2e

Please sign in to comment.