]> git.ipfire.org Git - thirdparty/qemu.git/commit
ssh: Do not switch session to non-blocking mode
authorJakub Jelen <jjelen@redhat.com>
Wed, 13 Nov 2024 12:55:23 +0000 (12:55 +0000)
committerMichael Tokarev <mjt@tls.msk.ru>
Tue, 26 Nov 2024 16:06:39 +0000 (19:06 +0300)
commit686ece6ad46e98a98e13110e17c47c1fa5d3ac57
tree0d04fcaa6bd0f16f5d2d59ef2f8b9f07974112a8
parentea1f958b4e54acbc26a25fd4b5d14daadda99f7d
ssh: Do not switch session to non-blocking mode

The libssh does not handle non-blocking mode in SFTP correctly. The
driver code already changes the mode to blocking for the SFTP
initialization, but for some reason changes to non-blocking mode.
This used to work accidentally until libssh in 0.11 branch merged
the patch to avoid infinite looping in case of network errors:

https://gitlab.com/libssh/libssh-mirror/-/merge_requests/498

Since then, the ssh driver in qemu fails to read files over SFTP
as the first SFTP messages exchanged after switching the session
to non-blocking mode return SSH_AGAIN, but that message is lost
int the SFTP internals and interpretted as SSH_ERROR, which is
returned to the caller:

https://gitlab.com/libssh/libssh-mirror/-/issues/280

This is indeed an issue in libssh that we should address in the
long term, but it will require more work on the internals. For
now, the SFTP is not supported in non-blocking mode.

Fixes: https://gitlab.com/libssh/libssh-mirror/-/issues/280
Signed-off-by: Jakub Jelen <jjelen@redhat.com>
Signed-off-by: Richard W.M. Jones <rjones@redhat.com>
Message-ID: <20241113125526.2495731-1-rjones@redhat.com>
Reviewed-by: Kevin Wolf <kwolf@redhat.com>
Signed-off-by: Kevin Wolf <kwolf@redhat.com>
(cherry picked from commit fbdea3d6c13d5a75895c287a004c6f1a6bf6c164)
Signed-off-by: Michael Tokarev <mjt@tls.msk.ru>
block/ssh.c