Skip to content

Commit

Permalink
Don't apply max_frag_len checking if no Max Fragment Length extension
Browse files Browse the repository at this point in the history
Don't check the Max Fragment Length if the it hasn't been negotiated. We
were checking it anyway, and using the default value
(SSL3_RT_MAX_PLAIN_LENGTH). This works in most cases but KTLS can cause the
record length to actually exceed this in some cases.

Fixes #23169

Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Neil Horman <nhorman@openssl.org>
(Merged from #23182)
  • Loading branch information
mattcaswell committed Jan 18, 2024
1 parent 2cac2fe commit c1decd6
Showing 1 changed file with 10 additions and 4 deletions.
14 changes: 10 additions & 4 deletions ssl/record/methods/tls_common.c
Original file line number Diff line number Diff line change
Expand Up @@ -916,11 +916,17 @@ int tls_get_more_records(OSSL_RECORD_LAYER *rl)
}

/*
* Check if the received packet overflows the current
* Max Fragment Length setting.
* Note: rl->max_frag_len > 0 and KTLS are mutually exclusive.
* Record overflow checking (e.g. checking if
* thisrr->length > SSL3_RT_MAX_PLAIN_LENGTH) is the responsibility of
* the post_process_record() function above. However we check here if
* the received packet overflows the current Max Fragment Length setting
* if there is one.
* Note: rl->max_frag_len != SSL3_RT_MAX_PLAIN_LENGTH and KTLS are
* mutually exclusive. Also note that with KTLS thisrr->length can
* be > SSL3_RT_MAX_PLAIN_LENGTH (and rl->max_frag_len must be ignored)
*/
if (thisrr->length > rl->max_frag_len) {
if (rl->max_frag_len != SSL3_RT_MAX_PLAIN_LENGTH
&& thisrr->length > rl->max_frag_len) {
RLAYERfatal(rl, SSL_AD_RECORD_OVERFLOW, SSL_R_DATA_LENGTH_TOO_LONG);
goto end;
}
Expand Down

0 comments on commit c1decd6

Please sign in to comment.