diff options
-rw-r--r-- | net/6lowpan/iphc.c | 10 |
1 files changed, 9 insertions, 1 deletions
diff --git a/net/6lowpan/iphc.c b/net/6lowpan/iphc.c index 73a7065f0c6b..cd5f8b8e34cd 100644 --- a/net/6lowpan/iphc.c +++ b/net/6lowpan/iphc.c | |||
@@ -512,9 +512,17 @@ static u8 lowpan_compress_addr_64(u8 **hc_ptr, u8 shift, | |||
512 | 512 | ||
513 | static void compress_udp_header(u8 **hc_ptr, struct sk_buff *skb) | 513 | static void compress_udp_header(u8 **hc_ptr, struct sk_buff *skb) |
514 | { | 514 | { |
515 | struct udphdr *uh = udp_hdr(skb); | 515 | struct udphdr *uh; |
516 | u8 tmp; | 516 | u8 tmp; |
517 | 517 | ||
518 | /* In the case of RAW sockets the transport header is not set by | ||
519 | * the ip6 stack so we must set it ourselves | ||
520 | */ | ||
521 | if (skb->transport_header == skb->network_header) | ||
522 | skb_set_transport_header(skb, sizeof(struct ipv6hdr)); | ||
523 | |||
524 | uh = udp_hdr(skb); | ||
525 | |||
518 | if (((ntohs(uh->source) & LOWPAN_NHC_UDP_4BIT_MASK) == | 526 | if (((ntohs(uh->source) & LOWPAN_NHC_UDP_4BIT_MASK) == |
519 | LOWPAN_NHC_UDP_4BIT_PORT) && | 527 | LOWPAN_NHC_UDP_4BIT_PORT) && |
520 | ((ntohs(uh->dest) & LOWPAN_NHC_UDP_4BIT_MASK) == | 528 | ((ntohs(uh->dest) & LOWPAN_NHC_UDP_4BIT_MASK) == |