Message ID | 20101112014759.GA8491@canuck.infradead.org |
---|---|
State | Accepted, archived |
Delegated to: | David Miller |
Headers | show |
On 12.11.2010 02:47, Thomas Graf wrote: > nlmsg_total_size() calculates the length of a netlink message > including header and alignment. nla_total_size() calculates the > space an individual attribute consumes which was meant to be used > in this context. > > Also, ensure to account for the attribute header for the > IFLA_INFO_XSTATS attribute as implementations of get_xstats_size() > seem to assume that we do so. > > The addition of two message headers minus the missing attribute > header resulted in a calculated message size that was larger than > required. Therefore we never risked running out of skb tailroom. > > Signed-off-by: Thomas Graf <tgraf@infradead.org> > Cc: Patrick McHardy <kaber@trash.net> Looks good to me, thanks Thomas. Acked-by: Patrick McHardy <kaber@trash.net> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
From: Patrick McHardy <kaber@trash.net> Date: Fri, 12 Nov 2010 08:43:46 +0100 > On 12.11.2010 02:47, Thomas Graf wrote: >> nlmsg_total_size() calculates the length of a netlink message >> including header and alignment. nla_total_size() calculates the >> space an individual attribute consumes which was meant to be used >> in this context. >> >> Also, ensure to account for the attribute header for the >> IFLA_INFO_XSTATS attribute as implementations of get_xstats_size() >> seem to assume that we do so. >> >> The addition of two message headers minus the missing attribute >> header resulted in a calculated message size that was larger than >> required. Therefore we never risked running out of skb tailroom. >> >> Signed-off-by: Thomas Graf <tgraf@infradead.org> >> Cc: Patrick McHardy <kaber@trash.net> > > Looks good to me, thanks Thomas. > > Acked-by: Patrick McHardy <kaber@trash.net> Applied, thanks. -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html
Index: net-2.6/net/core/rtnetlink.c =================================================================== --- net-2.6.orig/net/core/rtnetlink.c +++ net-2.6/net/core/rtnetlink.c @@ -347,16 +347,17 @@ static size_t rtnl_link_get_size(const s if (!ops) return 0; - size = nlmsg_total_size(sizeof(struct nlattr)) + /* IFLA_LINKINFO */ - nlmsg_total_size(strlen(ops->kind) + 1); /* IFLA_INFO_KIND */ + size = nla_total_size(sizeof(struct nlattr)) + /* IFLA_LINKINFO */ + nla_total_size(strlen(ops->kind) + 1); /* IFLA_INFO_KIND */ if (ops->get_size) /* IFLA_INFO_DATA + nested data */ - size += nlmsg_total_size(sizeof(struct nlattr)) + + size += nla_total_size(sizeof(struct nlattr)) + ops->get_size(dev); if (ops->get_xstats_size) - size += ops->get_xstats_size(dev); /* IFLA_INFO_XSTATS */ + /* IFLA_INFO_XSTATS */ + size += nla_total_size(ops->get_xstats_size(dev)); return size; }
nlmsg_total_size() calculates the length of a netlink message including header and alignment. nla_total_size() calculates the space an individual attribute consumes which was meant to be used in this context. Also, ensure to account for the attribute header for the IFLA_INFO_XSTATS attribute as implementations of get_xstats_size() seem to assume that we do so. The addition of two message headers minus the missing attribute header resulted in a calculated message size that was larger than required. Therefore we never risked running out of skb tailroom. Signed-off-by: Thomas Graf <tgraf@infradead.org> Cc: Patrick McHardy <kaber@trash.net> -- To unsubscribe from this list: send the line "unsubscribe netdev" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html