RE: [RFC V2 PATCH] rtnetlink: Fix problem with buffer allocation
From: Rose, Gregory V <hidden>
Date: 2012-02-15 16:31:57
-----Original Message----- From: Thomas Graf [mailto:tgr@infradead.org] On Behalf Of Thomas Graf Sent: Wednesday, February 15, 2012 6:08 AM To: Ben Hutchings Cc: Rose, Gregory V; netdev@vger.kernel.org; davem@davemloft.net Subject: Re: [RFC V2 PATCH] rtnetlink: Fix problem with buffer allocation On Tue, Feb 14, 2012 at 09:13:13PM +0000, Ben Hutchings wrote:quoted
quoted
+ struct rtattr *ext_req; + u32 *ext_req_data; + req = (struct rtnl_req_extended *)cb->nlh; + ext_req = (struct rtattr *)&req->ext; + if (ext_req->rta_type == IFLA_EXT_MASK) { + ext_req_data = RTA_DATA(ext_req); + ext_filter_mask = *ext_req_data; + } + }We cannot trust a flag to tell us what the length of the message is. We have to check the value of nlmsg_len (which netlink has already validated as being within the skb length and >= our declared request header length). I think that makes the flag redundant. In fact, I think we should really use nlmsg_parse() here. That might be overkill when there's only a single valid attribute; I don't know.I think it's worth the effort. You get all the validation for free. And please use the netlink interface in <net/netlink.h>, the rtattr based interface has been deprecated a while ago.
Yes, I'm changing it to use nlmsg_parse. Didn't know about the deprecation of rtattr though, thanks for the tip. - Greg