netlink: Warn on unordered or illegal nla_nest_cancel() or nlmsg_cancel()
authorThomas Graf <tgraf@suug.ch>
Tue, 6 Jan 2015 00:04:21 +0000 (01:04 +0100)
committerDavid S. Miller <davem@davemloft.net>
Tue, 6 Jan 2015 03:38:22 +0000 (22:38 -0500)
Calling nla_nest_cancel() in a different order as the nesting was
built up can lead to negative offsets being calculated which
results in skb_trim() being called with an underflowed unsigned
int. Warn if mark < skb->data as it's definitely a bug.

Signed-off-by: Thomas Graf <tgraf@suug.ch>
Signed-off-by: David S. Miller <davem@davemloft.net>
include/net/netlink.h

index 64158353ecb2750a3165dc07e915755ccb801522..d5869b90bfbb96108d35cee19eb9642b70bb4c63 100644 (file)
@@ -520,8 +520,10 @@ static inline void *nlmsg_get_pos(struct sk_buff *skb)
  */
 static inline void nlmsg_trim(struct sk_buff *skb, const void *mark)
 {
-       if (mark)
+       if (mark) {
+               WARN_ON((unsigned char *) mark < skb->data);
                skb_trim(skb, (unsigned char *) mark - skb->data);
+       }
 }
 
 /**