aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSven Eckelmann <sven@narfation.org>2018-06-02 11:26:35 -0400
committerSimon Wunderlich <sw@simonwunderlich.de>2018-06-23 04:29:33 -0400
commit9713cb0cf19f1cec6c007e3b37be0697042b6720 (patch)
tree57b5567dee1aa50a8d5c361d3dffefb1b188b5fa
parentb5685d2687d6612adf5eac519eb7008f74dfd1ec (diff)
batman-adv: Fix bat_v best gw refcnt after netlink dump
A reference for the best gateway is taken when the list of gateways in the mesh is sent via netlink. This is necessary to check whether the currently dumped entry is the currently selected gateway or not. This information is then transferred as flag BATADV_ATTR_FLAG_BEST. After the comparison of the current entry is done, batadv_v_gw_dump_entry() has to decrease the reference counter again. Otherwise the reference will be held and thus prevents a proper shutdown of the batman-adv interfaces (and some of the interfaces enslaved in it). Fixes: b71bb6f924fe ("batman-adv: add B.A.T.M.A.N. V bat_gw_dump implementations") Signed-off-by: Sven Eckelmann <sven@narfation.org> Acked-by: Marek Lindner <mareklindner@neomailbox.ch> Signed-off-by: Simon Wunderlich <sw@simonwunderlich.de>
-rw-r--r--net/batman-adv/bat_v.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/net/batman-adv/bat_v.c b/net/batman-adv/bat_v.c
index ec93337ee259..6baec4e68898 100644
--- a/net/batman-adv/bat_v.c
+++ b/net/batman-adv/bat_v.c
@@ -927,7 +927,7 @@ static int batadv_v_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
927{ 927{
928 struct batadv_neigh_ifinfo *router_ifinfo = NULL; 928 struct batadv_neigh_ifinfo *router_ifinfo = NULL;
929 struct batadv_neigh_node *router; 929 struct batadv_neigh_node *router;
930 struct batadv_gw_node *curr_gw; 930 struct batadv_gw_node *curr_gw = NULL;
931 int ret = 0; 931 int ret = 0;
932 void *hdr; 932 void *hdr;
933 933
@@ -995,6 +995,8 @@ static int batadv_v_gw_dump_entry(struct sk_buff *msg, u32 portid, u32 seq,
995 ret = 0; 995 ret = 0;
996 996
997out: 997out:
998 if (curr_gw)
999 batadv_gw_node_put(curr_gw);
998 if (router_ifinfo) 1000 if (router_ifinfo)
999 batadv_neigh_ifinfo_put(router_ifinfo); 1001 batadv_neigh_ifinfo_put(router_ifinfo);
1000 if (router) 1002 if (router)