mirror of https://github.com/torvalds/linux.git
tls: don't rely on tx_work during send()
With async crypto, we rely on tx_work to actually transmit records
once encryption completes. But while send() is running, both the
tx_lock and socket lock are held, so tx_work_handler cannot process
the queue of encrypted records, and simply reschedules itself. During
a large send(), this could last a long time, and use a lot of memory.
Transmit any pending encrypted records before restarting the main
loop of tls_sw_sendmsg_locked.
Fixes: a42055e8d2 ("net/tls: Add support for async encryption of records for performance")
Reported-by: Jann Horn <jannh@google.com>
Signed-off-by: Sabrina Dubroca <sd@queasysnail.net>
Link: https://patch.msgid.link/8396631478f70454b44afb98352237d33f48d34d.1760432043.git.sd@queasysnail.net
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
b8a6ff84ab
commit
7f846c65ca
|
|
@ -1152,6 +1152,13 @@ static int tls_sw_sendmsg_locked(struct sock *sk, struct msghdr *msg,
|
||||||
} else if (ret != -EAGAIN)
|
} else if (ret != -EAGAIN)
|
||||||
goto send_end;
|
goto send_end;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Transmit if any encryptions have completed */
|
||||||
|
if (test_and_clear_bit(BIT_TX_SCHEDULED, &ctx->tx_bitmask)) {
|
||||||
|
cancel_delayed_work(&ctx->tx_work.work);
|
||||||
|
tls_tx_records(sk, msg->msg_flags);
|
||||||
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
rollback_iter:
|
rollback_iter:
|
||||||
copied -= try_to_copy;
|
copied -= try_to_copy;
|
||||||
|
|
@ -1207,6 +1214,12 @@ static int tls_sw_sendmsg_locked(struct sock *sk, struct msghdr *msg,
|
||||||
goto send_end;
|
goto send_end;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Transmit if any encryptions have completed */
|
||||||
|
if (test_and_clear_bit(BIT_TX_SCHEDULED, &ctx->tx_bitmask)) {
|
||||||
|
cancel_delayed_work(&ctx->tx_work.work);
|
||||||
|
tls_tx_records(sk, msg->msg_flags);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
continue;
|
continue;
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue