batman-adv: Increase hard_iface refcnt for ptype
authorSven Eckelmann <sven@narfation.org>
Sat, 5 Mar 2016 15:09:18 +0000 (16:09 +0100)
committerAntonio Quartulli <a@unstable.cc>
Tue, 10 May 2016 10:28:29 +0000 (18:28 +0800)
The hard_iface is referenced in the packet_type for batman-adv. Increase
the refcounter of the hard_interface for it to have an explicit reference
for it in case this functionality gets refactorted and the currently
used implicit reference for it will be removed.

Signed-off-by: Sven Eckelmann <sven@narfation.org>
Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch>
Signed-off-by: Antonio Quartulli <a@unstable.cc>
net/batman-adv/hard-interface.c

index f0e1899e5b6b0b9c59c3cdce52ef9a15a08f100c..d3d37f3f99cf4f27afe13eeaffc8044d8c3df036 100644 (file)
@@ -522,6 +522,7 @@ int batadv_hardif_enable_interface(struct batadv_hard_iface *hard_iface,
                goto err_upper;
        }
 
+       kref_get(&hard_iface->refcount);
        hard_iface->batman_adv_ptype.type = ethertype;
        hard_iface->batman_adv_ptype.func = batadv_batman_skb_recv;
        hard_iface->batman_adv_ptype.dev = hard_iface->net_dev;
@@ -583,6 +584,7 @@ void batadv_hardif_disable_interface(struct batadv_hard_iface *hard_iface,
        batadv_info(hard_iface->soft_iface, "Removing interface: %s\n",
                    hard_iface->net_dev->name);
        dev_remove_pack(&hard_iface->batman_adv_ptype);
+       batadv_hardif_put(hard_iface);
 
        bat_priv->num_ifaces--;
        batadv_orig_hash_del_if(hard_iface, bat_priv->num_ifaces);