libtls: Check for CHANGE_CIPHER_SPEC type only if upper layer returns NEED_MORE
A type is returned only if upper layers successfully created a record, that is returns NEED_MORE. If we do not check for the return value, we might check a previous record or the uninitialized type variable and falsely reset the sequence number.
This commit is contained in:
@@ -101,14 +101,13 @@ METHOD(tls_protection_t, build, status_t,
|
||||
status_t status;
|
||||
|
||||
status = this->compression->build(this->compression, type, data);
|
||||
if (*type == TLS_CHANGE_CIPHER_SPEC)
|
||||
{
|
||||
this->seq_out = 0;
|
||||
return status;
|
||||
}
|
||||
|
||||
if (status == NEED_MORE)
|
||||
{
|
||||
if (*type == TLS_CHANGE_CIPHER_SPEC)
|
||||
{
|
||||
this->seq_out = 0;
|
||||
return status;
|
||||
}
|
||||
if (this->aead_out)
|
||||
{
|
||||
if (!this->aead_out->encrypt(this->aead_out, this->version,
|
||||
|
||||
Reference in New Issue
Block a user