Clear error queue entries from bad DLTS records
authorBenjamin Kaduk <bkaduk@akamai.com>
Mon, 26 Oct 2020 19:30:16 +0000 (12:30 -0700)
committerBenjamin Kaduk <bkaduk@akamai.com>
Mon, 2 Nov 2020 19:28:24 +0000 (11:28 -0800)
commita92c9648cd96d293cf198652cda8f29cc84a9828
tree51bba1567f456c38cf5e8cb6258f9dc0a932a6d8
parent3d7e7e7c48210b515ef5e05f4acf6dc58377331c
Clear error queue entries from bad DLTS records

DTLS by design ignores records/packets with bad MAC or failed AEAD tag
validation.  However, recent changes to have provided cipher
implementations caused tls1_enc() to leave an entry on the error queue
for invalid GCM tags, e.g.:

800BEAEF487F0000:error::Provider routines:gcm_stream_update:cipher operation failed:providers/implementations/ciphers/ciphercommon_gcm.c:306

The BoringSSL tests check for entries on the error queue with
SSL_get_error() and so we were seeing spurious test failures
due to the additional item on the error queue.  To avoid leaving
such spurious entries on the error queue, set a mark before calling
the ssl3_enc 'enc' method, and pop to that mark before ignoring
invalid packets.

Reviewed-by: Tomas Mraz <tmraz@fedoraproject.org>
Reviewed-by: Matt Caswell <matt@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/13251)
ssl/record/ssl3_record.c