92da39457c155eeecd6d84d52971fa65eab7dda8
[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 net/batman-adv/fragmentation.c | 10 +++++-----
13 1 file changed, 5 insertions(+), 5 deletions(-)
14
15 diff --git a/net/batman-adv/fragmentation.c b/net/batman-adv/fragmentation.c
16 index 9c561e6..0854ebd 100644
17 --- a/net/batman-adv/fragmentation.c
18 +++ b/net/batman-adv/fragmentation.c
19 @@ -474,7 +474,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
20 primary_if = batadv_primary_if_get_selected(bat_priv);
21 if (!primary_if) {
22 ret = -EINVAL;
23 - goto put_primary_if;
24 + goto free_skb;
25 }
26
27 /* Create one header to be copied to all fragments */
28 @@ -502,7 +502,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
29 skb_fragment = batadv_frag_create(skb, &frag_header, mtu);
30 if (!skb_fragment) {
31 ret = -ENOMEM;
32 - goto free_skb;
33 + goto put_primary_if;
34 }
35
36 batadv_inc_counter(bat_priv, BATADV_CNT_FRAG_TX);
37 @@ -511,7 +511,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
38 ret = batadv_send_unicast_skb(skb_fragment, neigh_node);
39 if (ret != NET_XMIT_SUCCESS) {
40 ret = NET_XMIT_DROP;
41 - goto free_skb;
42 + goto put_primary_if;
43 }
44
45 frag_header.no++;
46 @@ -519,7 +519,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
47 /* The initial check in this function should cover this case */
48 if (frag_header.no == BATADV_FRAG_MAX_FRAGMENTS - 1) {
49 ret = -EINVAL;
50 - goto free_skb;
51 + goto put_primary_if;
52 }
53 }
54
55 @@ -527,7 +527,7 @@ int batadv_frag_send_packet(struct sk_buff *skb,
56 if (batadv_skb_head_push(skb, header_size) < 0 ||
57 pskb_expand_head(skb, header_size + ETH_HLEN, 0, GFP_ATOMIC) < 0) {
58 ret = -ENOMEM;
59 - goto free_skb;
60 + goto put_primary_if;
61 }
62
63 memcpy(skb->data, &frag_header, header_size);