diff options
Diffstat (limited to 'net/batman-adv/unicast.c')
-rw-r--r-- | net/batman-adv/unicast.c | 5 |
1 files changed, 3 insertions, 2 deletions
diff --git a/net/batman-adv/unicast.c b/net/batman-adv/unicast.c index ee41fef04b21..811f7fc7932d 100644 --- a/net/batman-adv/unicast.c +++ b/net/batman-adv/unicast.c | |||
@@ -224,7 +224,7 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, | |||
224 | struct unicast_frag_packet *frag1, *frag2; | 224 | struct unicast_frag_packet *frag1, *frag2; |
225 | int uc_hdr_len = sizeof(struct unicast_packet); | 225 | int uc_hdr_len = sizeof(struct unicast_packet); |
226 | int ucf_hdr_len = sizeof(struct unicast_frag_packet); | 226 | int ucf_hdr_len = sizeof(struct unicast_frag_packet); |
227 | int data_len = skb->len; | 227 | int data_len = skb->len - uc_hdr_len; |
228 | 228 | ||
229 | if (!bat_priv->primary_if) | 229 | if (!bat_priv->primary_if) |
230 | goto dropped; | 230 | goto dropped; |
@@ -232,10 +232,11 @@ int frag_send_skb(struct sk_buff *skb, struct bat_priv *bat_priv, | |||
232 | frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len); | 232 | frag_skb = dev_alloc_skb(data_len - (data_len / 2) + ucf_hdr_len); |
233 | if (!frag_skb) | 233 | if (!frag_skb) |
234 | goto dropped; | 234 | goto dropped; |
235 | skb_reserve(frag_skb, ucf_hdr_len); | ||
235 | 236 | ||
236 | unicast_packet = (struct unicast_packet *) skb->data; | 237 | unicast_packet = (struct unicast_packet *) skb->data; |
237 | memcpy(&tmp_uc, unicast_packet, uc_hdr_len); | 238 | memcpy(&tmp_uc, unicast_packet, uc_hdr_len); |
238 | skb_split(skb, frag_skb, data_len / 2); | 239 | skb_split(skb, frag_skb, data_len / 2 + uc_hdr_len); |
239 | 240 | ||
240 | if (my_skb_head_push(skb, ucf_hdr_len - uc_hdr_len) < 0 || | 241 | if (my_skb_head_push(skb, ucf_hdr_len - uc_hdr_len) < 0 || |
241 | my_skb_head_push(frag_skb, ucf_hdr_len) < 0) | 242 | my_skb_head_push(frag_skb, ucf_hdr_len) < 0) |