Merge pull request #443 from ecsv/batadv-17.01
[feed/routing.git] / batman-adv / patches / 0002-batman-adv-Decrease-hardif-refcnt-on-fragmentation-s.patch
1 From: Sven Eckelmann <sven@narfation.org>
2 Date: Tue, 27 Dec 2016 08:51:17 +0100
3 Subject: [PATCH] batman-adv: Decrease hardif refcnt on fragmentation send error
4
5 An error before the hardif is found has to free the skb. But every error
6 after that has to free the skb + put the hard interface.
7
8 Fixes: 8b4132b1447a ("batman-adv: Consume skb in batadv_frag_send_packet")
9 Signed-off-by: Sven Eckelmann <sven@narfation.org>
10 Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
11
12 Origin: upstream, https://git.open-mesh.org/batman-adv.git/commit/205dc8385dc863467f4f6ccec2e63254e6baf831
13 ---
14 net/batman-adv/fragmentation.c | 10 +++++-----
15 1 file changed, 5 insertions(+), 5 deletions(-)
16
17 diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
18 index 9c561e683f4b8b68642b626b51a0dcda30260e97..0854ebd8613e9bf9044b04099b11341325d6e194 100644
19 --- a/net/batman-adv/fragmentation.c
20 +++ b/net/batman-adv/fragmentation.c
21 @@ -474,7 +474,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
22 primary_if = batadv_primary_if_get_selected(bat_priv);
23 if (!primary_if) {
24 ret = -EINVAL;
25 - goto put_primary_if;
26 + goto free_skb;
27 }
28
29 /* Create one header to be copied to all fragments */
30 @@ -502,7 +502,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
31 skb_fragment = batadv_frag_create(skb, &frag_header, mtu);
32 if (!skb_fragment) {
33 ret = -ENOMEM;
34 - goto free_skb;
35 + goto put_primary_if;
36 }
37
38 batadv_inc_counter(bat_priv, BATADV_CNT_FRAG_TX);
39 @@ -511,7 +511,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
40 ret = batadv_send_unicast_skb(skb_fragment, neigh_node);
41 if (ret != NET_XMIT_SUCCESS) {
42 ret = NET_XMIT_DROP;
43 - goto free_skb;
44 + goto put_primary_if;
45 }
46
47 frag_header.no++;
48 @@ -519,7 +519,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
49 /* The initial check in this function should cover this case */
50 if (frag_header.no == BATADV_FRAG_MAX_FRAGMENTS - 1) {
51 ret = -EINVAL;
52 - goto free_skb;
53 + goto put_primary_if;
54 }
55 }
56
57 @@ -527,7 +527,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
58 if (batadv_skb_head_push(skb, header_size) < 0 ||
59 pskb_expand_head(skb, header_size + ETH_HLEN, 0, GFP_ATOMIC) < 0) {
60 ret = -ENOMEM;
61 - goto free_skb;
62 + goto put_primary_if;
63 }
64
65 memcpy(skb->data, &frag_header, header_size);