tls: improve client/server hello parsing loops

Bug: #8795.
pull/15984/head
Victor Julien 3 months ago
parent 46880985ef
commit dde0d7295b

@ -1290,10 +1290,9 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
if (!(HAS_SPACE(extensions_len))) if (!(HAS_SPACE(extensions_len)))
goto invalid_length; goto invalid_length;
uint16_t processed_len = 0; uint32_t processed_len = 0;
/* coverity[tainted_data] */ /* coverity[tainted_data] */
while (processed_len < extensions_len) while (processed_len < (uint32_t)extensions_len) {
{
if (!(HAS_SPACE(2))) if (!(HAS_SPACE(2)))
goto invalid_length; goto invalid_length;
@ -1309,6 +1308,9 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
if (!(HAS_SPACE(ext_len))) if (!(HAS_SPACE(ext_len)))
goto invalid_length; goto invalid_length;
if (processed_len + 4UL + (uint32_t)ext_len > (uint32_t)extensions_len)
goto invalid_length;
switch (ext_type) { switch (ext_type) {
case SSL_EXTENSION_SNI: case SSL_EXTENSION_SNI:
{ {
@ -1318,7 +1320,7 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
if (ret < 0) if (ret < 0)
goto end; goto end;
input += ret; input += ext_len;
break; break;
} }
@ -1332,7 +1334,7 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
if (ret < 0) if (ret < 0)
goto end; goto end;
input += ret; input += ext_len;
break; break;
} }
@ -1346,7 +1348,7 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
if (ret < 0) if (ret < 0)
goto end; goto end;
input += ret; input += ext_len;
break; break;
} }
@ -1357,7 +1359,7 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
if (ret < 0) if (ret < 0)
goto end; goto end;
input += ret; input += ext_len;
break; break;
} }
@ -1393,7 +1395,7 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
if (ret < 0) if (ret < 0)
goto end; goto end;
input += ret; input += ext_len;
break; break;
} }
@ -1433,7 +1435,7 @@ static inline int TLSDecodeHSHelloExtensions(SSLState *ssl_state,
} }
} }
processed_len += ext_len + 4; processed_len += (uint32_t)ext_len + 4UL;
} }
end: end:

Loading…
Cancel
Save