Files
linux/include/net
Frederic Weisbecker 2580d3f400 xfrm: Fix RCU vs hash_resize_mutex lock inversion
xfrm_bydst_resize() calls synchronize_rcu() while holding
hash_resize_mutex. But then on PREEMPT_RT configurations,
xfrm_policy_lookup_bytype() may acquire that mutex while running in an
RCU read side critical section. This results in a deadlock.

In fact the scope of hash_resize_mutex is way beyond the purpose of
xfrm_policy_lookup_bytype() to just fetch a coherent and stable policy
for a given destination/direction, along with other details.

The lower level net->xfrm.xfrm_policy_lock, which among other things
protects per destination/direction references to policy entries, is
enough to serialize and benefit from priority inheritance against the
write side. As a bonus, it makes it officially a per network namespace
synchronization business where a policy table resize on namespace A
shouldn't block a policy lookup on namespace B.

Fixes: 77cc278f7b (xfrm: policy: Use sequence counters with associated lock)
Cc: stable@vger.kernel.org
Cc: Ahmed S. Darwish <a.darwish@linutronix.de>
Cc: Peter Zijlstra (Intel) <peterz@infradead.org>
Cc: Varad Gautam <varad.gautam@suse.com>
Cc: Steffen Klassert <steffen.klassert@secunet.com>
Cc: Herbert Xu <herbert@gondor.apana.org.au>
Cc: David S. Miller <davem@davemloft.net>
Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
2021-07-02 09:27:55 +02:00
..
2021-06-03 15:05:06 -07:00
2019-01-23 11:18:00 -08:00
2020-05-05 13:23:29 -07:00
2021-04-19 12:25:11 +02:00
2019-12-09 10:36:44 -08:00
2020-06-22 21:12:44 -07:00
2021-03-30 13:29:39 -07:00
2018-09-13 09:04:58 -07:00
2019-12-09 10:36:44 -08:00
2020-03-04 13:25:55 -08:00
2018-05-16 07:23:35 +02:00
2019-04-22 21:47:25 -07:00
2019-10-05 16:29:00 -07:00
2020-06-18 20:46:23 -07:00
2019-12-09 10:28:43 -08:00
2021-06-01 07:54:09 +02:00