summaryrefslogtreecommitdiff
BranchCommit messageAuthorAge
masterRemove TimeQuest optionsTobias Klauser12 years
 
f2a73dd2995b948e7'>types.h
diff options
context:
space:
mode:
authorSven Eckelmann <sven@narfation.org>2016-03-11 16:44:06 +0100
committerAntonio Quartulli <a@unstable.cc>2016-04-29 19:46:11 +0800
commitabe59c65225ccd63a5964e2f2a73dd2995b948e7 (patch)
treec4d0400fc0300e70782296e1ac8375a98625d2ac /net/batman-adv/types.h
parenta33d970d0b54b09746d5540af8271fad4eb10229 (diff)
batman-adv: Fix reference counting of hardif_neigh_node object for neigh_node
The batadv_neigh_node was specific to a batadv_hardif_neigh_node and held an implicit reference to it. But this reference was never stored in form of a pointer in the batadv_neigh_node itself. Instead batadv_neigh_node_release depends on a consistent state of hard_iface->neigh_list and that batadv_hardif_neigh_get always returns the batadv_hardif_neigh_node object which it has a reference for. But batadv_hardif_neigh_get cannot guarantee that because it is working only with rcu_read_lock on this list. It can therefore happen that a neigh_addr is in this list twice or that batadv_hardif_neigh_get cannot find the batadv_hardif_neigh_node for an neigh_addr due to some other list operations taking place at the same time. Instead add a batadv_hardif_neigh_node pointer directly in batadv_neigh_node which will be used for the reference counter decremented on release of batadv_neigh_node. Fixes: cef63419f7db ("batman-adv: add list of unique single hop neighbors per hard-interface") Signed-off-by: Sven Eckelmann <sven@narfation.org> Signed-off-by: Marek Lindner <mareklindner@neomailbox.ch> Signed-off-by: Antonio Quartulli <a@unstable.cc>
Diffstat (limited to 'net/batman-adv/types.h')