diff options
Diffstat (limited to 'net/batman-adv')
-rw-r--r-- | net/batman-adv/bat_v_elp.c | 6 | ||||
-rw-r--r-- | net/batman-adv/fragmentation.c | 2 |
2 files changed, 5 insertions, 3 deletions
diff --git a/net/batman-adv/bat_v_elp.c b/net/batman-adv/bat_v_elp.c index 9f481cfdf77d..e8090f099eb8 100644 --- a/net/batman-adv/bat_v_elp.c +++ b/net/batman-adv/bat_v_elp.c | |||
@@ -352,19 +352,21 @@ out: | |||
352 | */ | 352 | */ |
353 | int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface) | 353 | int batadv_v_elp_iface_enable(struct batadv_hard_iface *hard_iface) |
354 | { | 354 | { |
355 | static const size_t tvlv_padding = sizeof(__be32); | ||
355 | struct batadv_elp_packet *elp_packet; | 356 | struct batadv_elp_packet *elp_packet; |
356 | unsigned char *elp_buff; | 357 | unsigned char *elp_buff; |
357 | u32 random_seqno; | 358 | u32 random_seqno; |
358 | size_t size; | 359 | size_t size; |
359 | int res = -ENOMEM; | 360 | int res = -ENOMEM; |
360 | 361 | ||
361 | size = ETH_HLEN + NET_IP_ALIGN + BATADV_ELP_HLEN; | 362 | size = ETH_HLEN + NET_IP_ALIGN + BATADV_ELP_HLEN + tvlv_padding; |
362 | hard_iface->bat_v.elp_skb = dev_alloc_skb(size); | 363 | hard_iface->bat_v.elp_skb = dev_alloc_skb(size); |
363 | if (!hard_iface->bat_v.elp_skb) | 364 | if (!hard_iface->bat_v.elp_skb) |
364 | goto out; | 365 | goto out; |
365 | 366 | ||
366 | skb_reserve(hard_iface->bat_v.elp_skb, ETH_HLEN + NET_IP_ALIGN); | 367 | skb_reserve(hard_iface->bat_v.elp_skb, ETH_HLEN + NET_IP_ALIGN); |
367 | elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb, BATADV_ELP_HLEN); | 368 | elp_buff = skb_put_zero(hard_iface->bat_v.elp_skb, |
369 | BATADV_ELP_HLEN + tvlv_padding); | ||
368 | elp_packet = (struct batadv_elp_packet *)elp_buff; | 370 | elp_packet = (struct batadv_elp_packet *)elp_buff; |
369 | 371 | ||
370 | elp_packet->packet_type = BATADV_ELP; | 372 | elp_packet->packet_type = BATADV_ELP; |
diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c index 0fddc17106bd..5b71a289d04f 100644 --- a/net/batman-adv/fragmentation.c +++ b/net/batman-adv/fragmentation.c | |||
@@ -275,7 +275,7 @@ batadv_frag_merge_packets(struct hlist_head *chain) | |||
275 | kfree(entry); | 275 | kfree(entry); |
276 | 276 | ||
277 | packet = (struct batadv_frag_packet *)skb_out->data; | 277 | packet = (struct batadv_frag_packet *)skb_out->data; |
278 | size = ntohs(packet->total_size); | 278 | size = ntohs(packet->total_size) + hdr_size; |
279 | 279 | ||
280 | /* Make room for the rest of the fragments. */ | 280 | /* Make room for the rest of the fragments. */ |
281 | if (pskb_expand_head(skb_out, 0, size - skb_out->len, GFP_ATOMIC) < 0) { | 281 | if (pskb_expand_head(skb_out, 0, size - skb_out->len, GFP_ATOMIC) < 0) { |