mirror of
https://github.com/rd-stuffs/msm-4.14.git
synced 2025-02-20 11:45:48 +08:00
6lowpan_rtnl: fix fragmentation with two fragments
This patch fix the 6LoWPAN fragmentation for the case if we have exactly two fragments. The problem is that the (skb_unprocessed >= frag_cap) condition is always false on the second fragment after sending the first fragment. A fragmentation with only one fragment doesn't make any sense. The solution is that we use a do while loop here, that ensures we sending always a minimum of two fragments if we need a fragmentation. This issue was introduced by commit d4b2816d67d6e07b2f27037f282d8db03a5829d7 ("6lowpan: fix fragmentation"). Signed-off-by: Alexander Aring <alex.aring@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
86c92ee3a2
commit
51263fffad
@ -312,7 +312,7 @@ lowpan_xmit_fragmented(struct sk_buff *skb, struct net_device *dev,
|
||||
frag_hdr[0] |= LOWPAN_DISPATCH_FRAGN;
|
||||
frag_cap = round_down(payload_cap - LOWPAN_FRAGN_HEAD_SIZE, 8);
|
||||
|
||||
while (skb_unprocessed >= frag_cap) {
|
||||
do {
|
||||
dgram_offset += frag_len;
|
||||
skb_offset += frag_len;
|
||||
skb_unprocessed -= frag_len;
|
||||
@ -328,7 +328,7 @@ lowpan_xmit_fragmented(struct sk_buff *skb, struct net_device *dev,
|
||||
__func__, frag_tag, skb_offset);
|
||||
goto err;
|
||||
}
|
||||
}
|
||||
} while (skb_unprocessed >= frag_cap);
|
||||
|
||||
consume_skb(skb);
|
||||
return NET_XMIT_SUCCESS;
|
||||
|
Loading…
x
Reference in New Issue
Block a user