diff --git a/[refs] b/[refs] index 7608a1d779ef..fe8d86dba8e0 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: bdefff1f54cb76a19700663f211350de2f65cc91 +refs/heads/master: 7bece8155be133cd67c41eed2b31c60a310609de diff --git a/trunk/include/net/netlink.h b/trunk/include/net/netlink.h index a5506c42f03c..112dcdf7e34e 100644 --- a/trunk/include/net/netlink.h +++ b/trunk/include/net/netlink.h @@ -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; }