Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 10231213 authored by Dave Watson's avatar Dave Watson Committed by David S. Miller
Browse files

net: tls: Fix deadlock in free_resources tx



If there are outstanding async tx requests (when crypto returns EINPROGRESS),
there is a potential deadlock: the tx work acquires the lock, while we
cancel_delayed_work_sync() while holding the lock.  Drop the lock while waiting
for the work to complete.

Fixes: a42055e8 ("Add support for async encryption of records...")
Signed-off-by: default avatarDave Watson <davejwatson@fb.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent 32eb67b9
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -1794,7 +1794,9 @@ void tls_sw_free_resources_tx(struct sock *sk)
	if (atomic_read(&ctx->encrypt_pending))
		crypto_wait_req(-EINPROGRESS, &ctx->async_wait);

	release_sock(sk);
	cancel_delayed_work_sync(&ctx->tx_work.work);
	lock_sock(sk);

	/* Tx whatever records we can transmit and abandon the rest */
	tls_tx_records(sk, -1);