af_key: Do not call xfrm_probe_algs in parallel
[ Upstream commit ba953a9d89a00c078b85f4b190bc1dde66fe16b5 ]
When namespace support was added to xfrm/afkey, it caused the
previously single-threaded call to xfrm_probe_algs to become
multi-threaded. This is buggy and needs to be fixed with a mutex.
Reported-by: Abhishek Shah <abhishek.shah@columbia.edu>
Fixes: 283bc9f35b
("xfrm: Namespacify xfrm state/policy locks")
Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au>
Signed-off-by: Steffen Klassert <steffen.klassert@secunet.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:

committed by
Greg Kroah-Hartman

parent
4379a10c1d
commit
c5c4d4c980
@@ -1701,9 +1701,12 @@ static int pfkey_register(struct sock *sk, struct sk_buff *skb, const struct sad
|
|||||||
pfk->registered |= (1<<hdr->sadb_msg_satype);
|
pfk->registered |= (1<<hdr->sadb_msg_satype);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
mutex_lock(&pfkey_mutex);
|
||||||
xfrm_probe_algs();
|
xfrm_probe_algs();
|
||||||
|
|
||||||
supp_skb = compose_sadb_supported(hdr, GFP_KERNEL | __GFP_ZERO);
|
supp_skb = compose_sadb_supported(hdr, GFP_KERNEL | __GFP_ZERO);
|
||||||
|
mutex_unlock(&pfkey_mutex);
|
||||||
|
|
||||||
if (!supp_skb) {
|
if (!supp_skb) {
|
||||||
if (hdr->sadb_msg_satype != SADB_SATYPE_UNSPEC)
|
if (hdr->sadb_msg_satype != SADB_SATYPE_UNSPEC)
|
||||||
pfk->registered &= ~(1<<hdr->sadb_msg_satype);
|
pfk->registered &= ~(1<<hdr->sadb_msg_satype);
|
||||||
|
Reference in New Issue
Block a user