In _gnutls13_recv_finished(), 'buf' is not initialized or set when
_gnutls13_compute_finished() returns an err, and goto cleanup may
cause a segfault crash as it frees the uninitialized buf.allocd in
_gnutls_buffer_clear().
So fix it by return if _gnutls13_compute_finished() returns an err
in _gnutls13_recv_finished().
Signed-off-by: Xin Long <lucien.xin@gmail.com>
ret = _gnutls13_compute_finished(
session->security_parameters.prf, base_key,
&session->internals.handshake_hash_buffer, verifier);
- if (ret < 0) {
- gnutls_assert();
- goto cleanup;
- }
+ if (ret < 0)
+ return gnutls_assert_val(ret);
ret = _gnutls_recv_handshake(session, GNUTLS_HANDSHAKE_FINISHED, 0,
&buf);