If skb_unshare() returns NULL, then we leak the original skb.
Solution is to use temp variable to hold the new skb.
Signed-off-by: Jukka Rissanen <jukka.rissanen@linux.intel.com>
Signed-off-by: Johan Hedberg <johan.hedberg@intel.com>
        int err = 0;
        bdaddr_t addr;
        u8 addr_type;
+       struct sk_buff *tmpskb;
 
        /* We must take a copy of the skb before we modify/replace the ipv6
         * header as the header could be used elsewhere
         */
-       skb = skb_unshare(skb, GFP_ATOMIC);
-       if (!skb)
+       tmpskb = skb_unshare(skb, GFP_ATOMIC);
+       if (!tmpskb) {
+               kfree_skb(skb);
                return NET_XMIT_DROP;
+       }
+       skb = tmpskb;
 
        /* Return values from setup_header()
         *  <0 - error, packet is dropped