On 2025-09-11 17:23, Peter Xu wrote: > QCryptoTLSSession allows TLS premature termination in two cases, one of the > case is when the channel shutdown() is invoked on READ side. > > It's possible the shutdown() happened after the read thread blocked at > gnutls_record_recv(). In this case, we should allow the premature > termination to happen. > > The problem is by the time qcrypto_tls_session_read() was invoked, > tioc->shutdown may not have been set, so this may instead be treated as an > error if there is concurrent shutdown() calls. > > To allow the flag to reflect the latest status of tioc->shutdown, move the > check upper into the QIOChannel level, so as to read the flag only after > QEMU gets an GNUTLS_E_PREMATURE_TERMINATION. > > When at it, introduce qio_channel_tls_allow_premature_termination() helper > to make the condition checks easier to read. > > This patch will fix a qemu qtest warning when running the preempt tls test, > reporting premature termination: > > QTEST_QEMU_BINARY=./qemu-system-x86_64 ./tests/qtest/migration-test --full -r > /x86_64/migration/postcopy/preempt/tls/psk > ... > qemu-kvm: Cannot read from TLS channel: The TLS connection was non-properly > terminated. > ... > > In this specific case, the error was set by postcopy_preempt_thread, which > normally will be concurrently shutdown()ed by the main thread. > > Signed-off-by: Peter Xu <[email protected]> > --- > include/crypto/tlssession.h | 7 +------ > crypto/tlssession.c | 7 ++----- > io/channel-tls.c | 21 +++++++++++++++++++-- > 3 files changed, 22 insertions(+), 13 deletions(-)
Reviewed-by: Juraj Marcin <[email protected]>
