|
@@ -461,6 +461,12 @@ batadv_neigh_node_new(struct batadv_hard_iface *hard_iface,
|
|
if (!neigh_node)
|
|
if (!neigh_node)
|
|
goto out;
|
|
goto out;
|
|
|
|
|
|
|
|
+ if (!atomic_inc_not_zero(&hard_iface->refcount)) {
|
|
|
|
+ kfree(neigh_node);
|
|
|
|
+ neigh_node = NULL;
|
|
|
|
+ goto out;
|
|
|
|
+ }
|
|
|
|
+
|
|
INIT_HLIST_NODE(&neigh_node->list);
|
|
INIT_HLIST_NODE(&neigh_node->list);
|
|
INIT_HLIST_HEAD(&neigh_node->ifinfo_list);
|
|
INIT_HLIST_HEAD(&neigh_node->ifinfo_list);
|
|
spin_lock_init(&neigh_node->ifinfo_lock);
|
|
spin_lock_init(&neigh_node->ifinfo_lock);
|