qemu/io
Eric Blake 199e84de1c qio: Inherit follow_coroutine_ctx across TLS
Since qemu 8.2, the combination of NBD + TLS + iothread crashes on an
assertion failure:

qemu-kvm: ../io/channel.c:534: void qio_channel_restart_read(void *): Assertion `qemu_get_current_aio_context() == qemu_coroutine_get_aio_context(co)' failed.

It turns out that when we removed AioContext locking, we did so by
having NBD tell its qio channels that it wanted to opt in to
qio_channel_set_follow_coroutine_ctx(); but while we opted in on the
main channel, we did not opt in on the TLS wrapper channel.
qemu-iotests has coverage of NBD+iothread and NBD+TLS, but apparently
no coverage of NBD+TLS+iothread, or we would have noticed this
regression sooner.  (I'll add that in the next patch)

But while we could manually opt in to the TLS channel in nbd/server.c
(a one-line change), it is more generic if all qio channels that wrap
other channels inherit the follow status, in the same way that they
inherit feature bits.

CC: Stefan Hajnoczi <stefanha@redhat.com>
CC: Daniel P. Berrangé <berrange@redhat.com>
CC: qemu-stable@nongnu.org
Fixes: https://issues.redhat.com/browse/RHEL-34786
Fixes: 06e0f098 ("io: follow coroutine AioContext in qio_channel_yield()", v8.2.0)
Signed-off-by: Eric Blake <eblake@redhat.com>
Reviewed-by: Stefan Hajnoczi <stefanha@redhat.com>
Reviewed-by: Daniel P. Berrangé <berrange@redhat.com>
Message-ID: <20240518025246.791593-5-eblake@redhat.com>
2024-05-29 18:30:31 -05:00
..
channel-buffer.c io: Add support for MSG_PEEK for socket channel 2023-02-06 19:22:56 +01:00
channel-command.c io: follow coroutine AioContext in qio_channel_yield() 2023-09-07 20:32:11 -05:00
channel-file.c io: Introduce qio_channel_file_new_dupfd 2024-03-12 15:22:23 -04:00
channel-null.c io: follow coroutine AioContext in qio_channel_yield() 2023-09-07 20:32:11 -05:00
channel-socket.c io/channel-socket: qio_channel_socket_flush(): improve msg validation 2023-11-06 15:00:28 +00:00
channel-tls.c qio: Inherit follow_coroutine_ctx across TLS 2024-05-29 18:30:31 -05:00
channel-util.c io: follow coroutine AioContext in qio_channel_yield() 2023-09-07 20:32:11 -05:00
channel-watch.c win32: avoid mixing SOCKET and file descriptor space 2023-03-13 15:39:31 +04:00
channel-websock.c qio: Inherit follow_coroutine_ctx across TLS 2024-05-29 18:30:31 -05:00
channel.c io: Add generic pwritev/preadv interface 2024-03-01 15:42:04 +08:00
dns-resolver.c build-sys: add HAVE_IPPROTO_MPTCP 2021-09-30 15:30:25 +02:00
meson.build io: add a QIOChannelNull equivalent to /dev/null 2022-06-22 18:11:21 +01:00
net-listener.c io: Stop appending -listen to net listeners 2023-11-07 14:54:56 +00:00
task.c io: Fix Lesser GPL version number 2020-10-29 09:57:37 +00:00
trace-events io: add trace event when cancelling TLS handshake 2024-02-09 12:50:31 +00:00
trace.h trace: switch position of headers to what Meson requires 2020-08-21 06:18:24 -04:00