Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit ac74f87c authored by Alexander Aring's avatar Alexander Aring Committed by Stefan Schmidt
Browse files

net: 6lowpan: fix reserved space for single frames

This patch fixes patch add handling to take care tail and headroom for
single 6lowpan frames. We need to be sure we have a skb with the right
head and tailroom for single frames. This patch do it by using
skb_copy_expand() if head and tailroom is not enough allocated by upper
layer.

Bugzilla: https://bugzilla.kernel.org/show_bug.cgi?id=195059


Reported-by: default avatarDavid Palma <david.palma@ntnu.no>
Reported-by: default avatarRabi Narayan Sahoo <rabinarayans0828@gmail.com>
Cc: stable@vger.kernel.org
Signed-off-by: default avatarAlexander Aring <aring@mojatatu.com>
Signed-off-by: default avatarStefan Schmidt <stefan@datenfreihafen.org>
parent a3046108
Loading
Loading
Loading
Loading
+18 −3
Original line number Diff line number Diff line
@@ -265,9 +265,24 @@ netdev_tx_t lowpan_xmit(struct sk_buff *skb, struct net_device *ldev)
	/* We must take a copy of the skb before we modify/replace the ipv6
	 * header as the header could be used elsewhere
	 */
	if (unlikely(skb_headroom(skb) < ldev->needed_headroom ||
		     skb_tailroom(skb) < ldev->needed_tailroom)) {
		struct sk_buff *nskb;

		nskb = skb_copy_expand(skb, ldev->needed_headroom,
				       ldev->needed_tailroom, GFP_ATOMIC);
		if (likely(nskb)) {
			consume_skb(skb);
			skb = nskb;
		} else {
			kfree_skb(skb);
			return NET_XMIT_DROP;
		}
	} else {
		skb = skb_unshare(skb, GFP_ATOMIC);
		if (!skb)
			return NET_XMIT_DROP;
	}

	ret = lowpan_header(skb, ldev, &dgram_size, &dgram_offset);
	if (ret < 0) {