qemu/crypto
Daniel P. Berrangé a2458b6f69 io: return 0 for EOF in TLS session read after shutdown
GNUTLS takes a paranoid approach when seeing 0 bytes returned by the
underlying OS read() function. It will consider this an error and
return GNUTLS_E_PREMATURE_TERMINATION instead of propagating the 0
return value. It expects apps to arrange for clean termination at
the protocol level and not rely on seeing EOF from a read call to
detect shutdown. This is to harden apps against a malicious 3rd party
causing termination of the sockets layer.

This is unhelpful for the QEMU NBD code which does have a clean
protocol level shutdown, but still relies on seeing 0 from the I/O
channel read in the coroutine handling incoming replies.

The upshot is that when using a plain NBD connection shutdown is
silent, but when using TLS, the client spams the console with

  Cannot read from TLS channel: Broken pipe

The NBD connection has, however, called qio_channel_shutdown()
at this point to indicate that it is done with I/O. This gives
the opportunity to optimize the code such that when the channel
has been shutdown in the read direction, the error code
GNUTLS_E_PREMATURE_TERMINATION gets turned into a '0' return
instead of an error.

Signed-off-by: Daniel P. Berrangé <berrange@redhat.com>
Message-Id: <20181119134228.11031-1-berrange@redhat.com>
Reviewed-by: Eric Blake <eblake@redhat.com>
Signed-off-by: Eric Blake <eblake@redhat.com>
2018-11-19 11:16:46 -06:00
..
aes.c
afalg.c
afalgpriv.h crypto: hash: add afalg-backend hash support 2017-07-19 10:11:05 +01:00
afsplit.c
block-luks.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
block-luks.h crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
block-qcow.c crypto: initialize sector size even when opening with no IO flag 2018-11-05 15:09:54 +01:00
block-qcow.h crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
block.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
blockpriv.h block: convert qcrypto_block_encrypt|decrypt to take bytes offset 2017-10-06 16:30:47 +02:00
cipher-afalg.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
cipher-builtin.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
cipher-gcrypt.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
cipher-nettle.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
cipher.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
cipherpriv.h Include less of the generated modular QAPI headers 2018-03-02 13:45:50 -06:00
desrfb.c
hash-afalg.c crypto: hmac: add af_alg-backend hmac support 2017-07-19 10:11:05 +01:00
hash-gcrypt.c
hash-glib.c glib: bump min required glib library version to 2.40 2018-06-29 12:22:28 +01:00
hash-nettle.c
hash.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
hashpriv.h crypto: hash: add afalg-backend hash support 2017-07-19 10:11:05 +01:00
hmac-gcrypt.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
hmac-glib.c glib: bump min required glib library version to 2.40 2018-06-29 12:22:28 +01:00
hmac-nettle.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
hmac.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
hmacpriv.h crypto: hmac: add af_alg-backend hmac support 2017-07-19 10:11:05 +01:00
init.c crypto: require libgcrypt >= 1.5.0 for building QEMU 2018-10-19 12:26:57 +01:00
ivgen-essiv.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
ivgen-essiv.h crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
ivgen-plain64.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
ivgen-plain64.h crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
ivgen-plain.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
ivgen-plain.h crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
ivgen.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
ivgenpriv.h
Makefile.objs crypto: require nettle >= 2.7.1 for building QEMU 2018-10-19 14:41:47 +01:00
pbkdf-gcrypt.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
pbkdf-nettle.c qapi: Mechanically convert FOO_lookup[...] to FOO_str(...) 2017-09-04 13:09:13 +02:00
pbkdf-stub.c
pbkdf.c
random-gcrypt.c
random-gnutls.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
random-platform.c Include qapi/error.h exactly where needed 2018-02-09 13:50:17 +01:00
secret.c qapi: Change data type of the FOO_lookup generated for enum FOO 2017-09-04 13:09:13 +02:00
tlscreds.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
tlscredsanon.c crypto: use local path for local headers 2018-06-01 19:20:37 +03:00
tlscredspriv.h
tlscredspsk.c crypto: Implement TLS Pre-Shared Keys (PSK). 2018-07-03 13:04:38 +01:00
tlscredsx509.c crypto: require gnutls >= 3.1.18 for building QEMU 2018-10-19 12:26:57 +01:00
tlssession.c io: return 0 for EOF in TLS session read after shutdown 2018-11-19 11:16:46 -06:00
trace-events crypto: Implement TLS Pre-Shared Keys (PSK). 2018-07-03 13:04:38 +01:00
xts.c crypto: annotate xts_tweak_encdec as inlineable 2018-10-24 19:03:37 +01:00