Files
linux/net
Eric Dumazet 5d944c640b gen_estimator: deadlock fix
One of my test machine got a deadlock during "tc" sessions,
adding/deleting classes & filters, using traffic estimators.

After some analysis, I believe we have a potential use after free case
in est_timer() :

spin_lock(e->stats_lock); << HERE >>
read_lock(&est_lock);
if (e->bstats == NULL)   << TEST >>
	goto skip;

Test is done a bit late, because after estimator is killed, and before
rcu grace period elapsed, we might already have freed/reuse memory where
e->stats_locks points to (some qdisc->q.lock)

A possible fix is to respect a rcu grace period at Qdisc dismantle time.

On 64bit, sizeof(struct Qdisc) is exactly 192 bytes. Adding 16 bytes to
it (for struct rcu_head) is a problem because it might change
performance, given QDISC_ALIGNTO is 32 bytes.

This is why I also change QDISC_ALIGNTO to 64 bytes, to satisfy most
current alignment requirements.

Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
2010-04-01 18:38:48 -07:00
..
…
2010-03-21 18:34:15 -07:00
2010-02-18 14:30:18 -08:00
…
2010-02-10 12:31:10 -08:00
…
2010-02-22 16:21:12 -08:00
…
2010-03-15 16:00:47 -07:00
2010-03-19 15:48:25 -04:00
2010-04-01 18:38:48 -07:00
2010-03-30 23:58:22 -07:00
2010-02-18 14:12:06 -08:00
2010-03-24 13:34:09 -07:00
2010-03-05 13:34:03 -08:00
2010-03-03 01:04:37 -08:00
…
…
…
…