Skip to content

Commit

Permalink
batman-adv: Decrease hardif refcnt on fragmentation send error
Browse files Browse the repository at this point in the history
An error before the hardif is found has to free the skb. But every error
after that has to free the skb + put the hard interface.

Fixes: 8def0be ("batman-adv: Consume skb in batadv_frag_send_packet")
Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
  • Loading branch information
ecsv authored and simonwunderlich committed Jan 4, 2017
1 parent 7ce7d89 commit 4ea33ef
Showing 1 changed file with 5 additions and 5 deletions.
10 changes: 5 additions & 5 deletions net/batman-adv/fragmentation.c
Original file line number Diff line number Diff line change
Expand Up @@ -474,7 +474,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
primary_if = batadv_primary_if_get_selected(bat_priv);
if (!primary_if) {
ret = -EINVAL;
goto put_primary_if;
goto free_skb;
}

/* Create one header to be copied to all fragments */
Expand Down Expand Up @@ -502,7 +502,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
skb_fragment = batadv_frag_create(skb, &frag_header, mtu);
if (!skb_fragment) {
ret = -ENOMEM;
goto free_skb;
goto put_primary_if;
}

batadv_inc_counter(bat_priv, BATADV_CNT_FRAG_TX);
Expand All @@ -511,23 +511,23 @@ int batadv_frag_send_packet(struct sk_buff *skb,
ret = batadv_send_unicast_skb(skb_fragment, neigh_node);
if (ret != NET_XMIT_SUCCESS) {
ret = NET_XMIT_DROP;
goto free_skb;
goto put_primary_if;
}

frag_header.no++;

/* The initial check in this function should cover this case */
if (frag_header.no == BATADV_FRAG_MAX_FRAGMENTS - 1) {
ret = -EINVAL;
goto free_skb;
goto put_primary_if;
}
}

/* Make room for the fragment header. */
if (batadv_skb_head_push(skb, header_size) < 0 ||
pskb_expand_head(skb, header_size + ETH_HLEN, 0, GFP_ATOMIC) < 0) {
ret = -ENOMEM;
goto free_skb;
goto put_primary_if;
}

memcpy(skb->data, &frag_header, header_size);
Expand Down

0 comments on commit 4ea33ef

Please sign in to comment.