]> git.ipfire.org Git - thirdparty/openssl.git/commitdiff
Drop empty app data records in DTLS
authorMatt Caswell <matt@openssl.org>
Tue, 29 Apr 2025 13:21:49 +0000 (14:21 +0100)
committerTomas Mraz <tomas@openssl.org>
Wed, 7 May 2025 12:35:47 +0000 (14:35 +0200)
App data records with 0 bytes of payload will confuse callers of SSL_read().
This will cause a successful read and return 0 bytes as read. Unfortunately
a 0 return from SSL_read() is considered a failure response. A subsequent
call to SSL_get_error() will then give the wrong result.

Zero length app data records are actually allowed by the spec, but have
never been handled correctly by OpenSSL. We already disallow creating such
empty app data records. Since the SSL_read() API does not have a good way to
handle this type of read, we simply ignore them.

Partial fix for #27316

Reviewed-by: Frederik Wedel-Heinen <fwh.openssl@gmail.com>
Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/27541)

ssl/record/methods/dtls_meth.c

index a69629b07b53ec7f5ecb2142dda93b270e7f4d3c..23715b2cc6adad38364ee4997cf405572ae94ca0 100644 (file)
@@ -571,6 +571,12 @@ int dtls_get_more_records(OSSL_RECORD_LAYER *rl)
         return OSSL_RECORD_RETURN_FATAL;
     }
 
+    if (rr->length == 0) {
+        /* No payload data in this record. Dump it */
+        rl->packet_length = 0;
+        goto again;
+    }
+
     rl->num_recs = 1;
     return OSSL_RECORD_RETURN_SUCCESS;
 }