Skip to content

Commit

Permalink
batman-adv: Protect global TQ window with a spinlock
Browse files Browse the repository at this point in the history
Signed-off-by: Linus Lüssing <linus.luessing@web.de>
Signed-off-by: Marek Lindner <lindner_marek@yahoo.de>
Signed-off-by: Sven Eckelmann <sven@narfation.org>
  • Loading branch information
Linus Lüssing authored and Sven Eckelmann committed Apr 17, 2011
1 parent e1a5382 commit 6800390
Show file tree
Hide file tree
Showing 3 changed files with 6 additions and 0 deletions.
1 change: 1 addition & 0 deletions net/batman-adv/originator.c
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,7 @@ struct neigh_node *create_neighbor(struct orig_node *orig_node,

INIT_HLIST_NODE(&neigh_node->list);
INIT_LIST_HEAD(&neigh_node->bonding_list);
spin_lock_init(&neigh_node->tq_lock);

memcpy(neigh_node->addr, neigh, ETH_ALEN);
neigh_node->orig_node = orig_neigh_node;
Expand Down
4 changes: 4 additions & 0 deletions net/batman-adv/routing.c
Original file line number Diff line number Diff line change
Expand Up @@ -415,10 +415,12 @@ static void update_orig(struct bat_priv *bat_priv,
if (is_duplicate)
continue;

spin_lock_bh(&tmp_neigh_node->tq_lock);
ring_buffer_set(tmp_neigh_node->tq_recv,
&tmp_neigh_node->tq_index, 0);
tmp_neigh_node->tq_avg =
ring_buffer_avg(tmp_neigh_node->tq_recv);
spin_unlock_bh(&tmp_neigh_node->tq_lock);
}

if (!neigh_node) {
Expand All @@ -443,10 +445,12 @@ static void update_orig(struct bat_priv *bat_priv,
orig_node->flags = batman_packet->flags;
neigh_node->last_valid = jiffies;

spin_lock_bh(&neigh_node->tq_lock);
ring_buffer_set(neigh_node->tq_recv,
&neigh_node->tq_index,
batman_packet->tq);
neigh_node->tq_avg = ring_buffer_avg(neigh_node->tq_recv);
spin_unlock_bh(&neigh_node->tq_lock);

if (!is_duplicate) {
orig_node->last_ttl = batman_packet->ttl;
Expand Down
1 change: 1 addition & 0 deletions net/batman-adv/types.h
Original file line number Diff line number Diff line change
Expand Up @@ -125,6 +125,7 @@ struct neigh_node {
struct rcu_head rcu;
struct orig_node *orig_node;
struct hard_iface *if_incoming;
spinlock_t tq_lock; /* protects: tq_recv, tq_index */
};


Expand Down

0 comments on commit 6800390

Please sign in to comment.