mirror of
https://github.com/curl/curl.git
synced 2026-08-24 23:03:42 +03:00
keylog: add a random size argument to Curl_tls_keylog_write()
To allow the function to verify that the buffer is large enough. Avoids possible future internal mishaps. Closes #22560
This commit is contained in:
parent
d064bc2adb
commit
fbfb2499f0
6 changed files with 20 additions and 16 deletions
|
|
@ -1043,7 +1043,8 @@ static int keylog_callback(gnutls_session_t session, const char *label,
|
|||
return -1;
|
||||
}
|
||||
|
||||
Curl_tls_keylog_write(label, crandom.data, secret->data, secret->size);
|
||||
Curl_tls_keylog_write(label, crandom.data, crandom.size,
|
||||
secret->data, secret->size);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -102,19 +102,20 @@ bool Curl_tls_keylog_write_line(const char *line)
|
|||
return TRUE;
|
||||
}
|
||||
|
||||
bool Curl_tls_keylog_write(
|
||||
const char *label,
|
||||
const unsigned char client_random[CLIENT_RANDOM_SIZE],
|
||||
const unsigned char *secret, size_t secretlen)
|
||||
bool Curl_tls_keylog_write(const char *label,
|
||||
const unsigned char *client_random,
|
||||
size_t random_size,
|
||||
const unsigned char *secret, size_t secretlen)
|
||||
{
|
||||
size_t pos, i;
|
||||
unsigned char line[KEYLOG_LABEL_MAXLEN + 1 +
|
||||
(2 * CLIENT_RANDOM_SIZE) + 1 +
|
||||
(2 * SECRET_MAXLEN) + 1 + 1];
|
||||
|
||||
if(!keylog_file_fp) {
|
||||
DEBUGASSERT(random_size >= CLIENT_RANDOM_SIZE);
|
||||
if(random_size < CLIENT_RANDOM_SIZE)
|
||||
return FALSE;
|
||||
if(!keylog_file_fp)
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
pos = strlen(label);
|
||||
if(pos > KEYLOG_LABEL_MAXLEN || !secretlen || secretlen > SECRET_MAXLEN) {
|
||||
|
|
|
|||
|
|
@ -61,10 +61,10 @@ const char *Curl_tls_keylog_file_name(void);
|
|||
* Appends a key log file entry.
|
||||
* Returns true iff the key log file is open and a valid entry was provided.
|
||||
*/
|
||||
bool Curl_tls_keylog_write(
|
||||
const char *label,
|
||||
const unsigned char client_random[CLIENT_RANDOM_SIZE],
|
||||
const unsigned char *secret, size_t secretlen);
|
||||
bool Curl_tls_keylog_write(const char *label,
|
||||
const unsigned char *client_random,
|
||||
size_t random_size,
|
||||
const unsigned char *secret, size_t secretlen);
|
||||
|
||||
/*
|
||||
* Appends a line to the key log file, ensure it is terminated by an LF.
|
||||
|
|
|
|||
|
|
@ -700,6 +700,7 @@ static void ossl_log_tls12_secret(const SSL *ssl, bool *keylog_done)
|
|||
|
||||
*keylog_done = TRUE;
|
||||
Curl_tls_keylog_write("CLIENT_RANDOM", client_random,
|
||||
sizeof(client_random),
|
||||
master_key, master_key_length);
|
||||
}
|
||||
#endif /* !HAVE_KEYLOG_CALLBACK */
|
||||
|
|
|
|||
|
|
@ -517,11 +517,11 @@ static void cr_keylog_log_cb(struct rustls_str label,
|
|||
size_t secret_len)
|
||||
{
|
||||
char clabel[KEYLOG_LABEL_MAXLEN];
|
||||
(void)client_random_len;
|
||||
DEBUGASSERT(client_random_len == CLIENT_RANDOM_SIZE);
|
||||
/* Turning a "rustls_str" into a null delimited "c" string */
|
||||
curl_msnprintf(clabel, sizeof(clabel), "%.*s", (int)label.len, label.data);
|
||||
Curl_tls_keylog_write(clabel, client_random, secret, secret_len);
|
||||
Curl_tls_keylog_write(clabel, client_random, client_random_len,
|
||||
secret, secret_len);
|
||||
}
|
||||
|
||||
static CURLcode
|
||||
|
|
|
|||
|
|
@ -162,7 +162,8 @@ static int wssl_tls13_secret_callback(SSL *ssl, int id,
|
|||
return 0;
|
||||
}
|
||||
|
||||
Curl_tls_keylog_write(label, client_random, secret, secretSz);
|
||||
Curl_tls_keylog_write(label, client_random, sizeof(client_random),
|
||||
secret, secretSz);
|
||||
return 0;
|
||||
}
|
||||
#endif /* HAVE_SECRET_CALLBACK && WOLFSSL_TLS13 */
|
||||
|
|
@ -203,7 +204,7 @@ static void wssl_log_tls12_secret(WOLFSSL *ssl)
|
|||
return;
|
||||
}
|
||||
|
||||
Curl_tls_keylog_write("CLIENT_RANDOM", cr, ms, msLen);
|
||||
Curl_tls_keylog_write("CLIENT_RANDOM", cr, crLen, ms, msLen);
|
||||
}
|
||||
#endif /* OPENSSL_EXTRA */
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue