Fix test of first of 255 CBC padding bytes.
authorAdam Langley <agl@chromium.org>
Mon, 8 Aug 2016 20:36:55 +0000 (13:36 -0700)
committerAdam Langley <agl@chromium.org>
Mon, 8 Aug 2016 20:36:55 +0000 (13:36 -0700)
Thanks to Peter Gijsels for pointing out that if a CBC record has 255
bytes of padding, the first was not being checked.

(This is an import of change 80842bdb from BoringSSL.)

Reviewed-by: Emilia Käsper <emilia@openssl.org>
Reviewed-by: Rich Salz <rsalz@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/1431)

ssl/record/ssl3_record.c

index ad240bc52d2a3e6b97759adbb3c60102f1505f23..49c6756376a5d42f983e93f33653ad5db8887f92 100644 (file)
@@ -1149,9 +1149,9 @@ int tls1_cbc_remove_padding(const SSL *s,
      * maximum amount of padding possible. (Again, the length of the record
      * is public information so we can use it.)
      */
-    to_check = 255;             /* maximum amount of padding. */
-    if (to_check > rec->length - 1)
-        to_check = rec->length - 1;
+    to_check = 256;            /* maximum amount of padding, inc length byte. */
+    if (to_check > rec->length)
+        to_check = rec->length;
 
     for (i = 0; i < to_check; i++) {
         unsigned char mask = constant_time_ge_8(padding_length, i);