dtls/connection: fix EOF handling with openssl 1.1.1e

openssl 1.1.1e does some stricker EOF handling and will throw an error
if the EOF is unexpected (like in the middle of a record).  As we are
streaming data into openssl here, it is entirely possible that we push
data from multiple buffers/packets into openssl separately.

From the openssl changelog:

 Changes between 1.1.1d and 1.1.1e [17 Mar 2020]
  *) Properly detect EOF while reading in libssl. Previously if we hit an EOF
     while reading in libssl then we would report an error back to the
     application (SSL_ERROR_SYSCALL) but errno would be 0. We now add
     an error to the stack (which means we instead return SSL_ERROR_SSL) and
     therefore give a hint as to what went wrong.
     [Matt Caswell]

We can relax the EOF signalling to only return TRUE when we have stopped
for any reason (EOS, error).

Will also remove a spurious EOF error from previous openssl version.
This commit is contained in:
Matthew Waters 2020-03-27 10:34:25 +11:00
parent 319a5e5779
commit 8da177c0bf

View file

@ -1251,7 +1251,7 @@ bio_method_ctrl (BIO * bio, int cmd, long arg1, void *arg2)
GST_LOG_OBJECT (self, "BIO: EOF reset"); GST_LOG_OBJECT (self, "BIO: EOF reset");
return 1; return 1;
case BIO_CTRL_EOF:{ case BIO_CTRL_EOF:{
gint eof = !(priv->bio_buffer_len - priv->bio_buffer_offset); gint eof = priv->is_alive == FALSE;
GST_LOG_OBJECT (self, "BIO: EOF query returned %d", eof); GST_LOG_OBJECT (self, "BIO: EOF query returned %d", eof);
return eof; return eof;
} }