ssl/tls13_enc.c:370: error: UNINITIALIZED_VALUE
  The value read from finsecretlen was never initialized.
Showing all 1 steps of the trace


ssl/tls13_enc.c:370:39: 
368.       if (!tls13_derive_key(s, secret, key, keylen)
369.               || !tls13_derive_iv(s, secret, iv, ivlen)
370. >             || (finsecret != NULL && !tls13_derive_finishedkey(s, secret,
371.                                                                  finsecret,
372.                                                                  finsecretlen))) {

int tls13_change_cipher_state(SSL *s, int which)
{
    static const unsigned char client_handshake_traffic[] =
        "client handshake traffic secret";
    static const unsigned char client_application_traffic[] =
        "client application traffic secret";
    static const unsigned char server_handshake_traffic[] =
        "server handshake traffic secret";
    static const unsigned char server_application_traffic[] =
        "server application traffic secret";
    unsigned char key[EVP_MAX_KEY_LENGTH];
    unsigned char iv[EVP_MAX_IV_LENGTH];
    unsigned char secret[EVP_MAX_MD_SIZE];
    unsigned char *insecret;
    unsigned char *finsecret = NULL;
    EVP_CIPHER_CTX *ciph_ctx;
    const EVP_CIPHER *ciph = s->s3->tmp.new_sym_enc;;
    size_t ivlen, keylen, finsecretlen;
    const unsigned char *label;
    size_t labellen;
    int ret = 0;
    if (which & SSL3_CC_READ) {
        if (s->enc_read_ctx != NULL) {
            EVP_CIPHER_CTX_reset(s->enc_read_ctx);
        } else {
            s->enc_read_ctx = EVP_CIPHER_CTX_new();
            if (s->enc_read_ctx == NULL) {
                SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE);
                goto err;
            }
        }
        ciph_ctx = s->enc_read_ctx;
        RECORD_LAYER_reset_read_sequence(&s->rlayer);
    } else {
        if (s->enc_write_ctx != NULL) {
            EVP_CIPHER_CTX_reset(s->enc_write_ctx);
        } else {
            s->enc_write_ctx = EVP_CIPHER_CTX_new();
            if (s->enc_write_ctx == NULL) {
                SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE);
                goto err;
            }
        }
        ciph_ctx = s->enc_write_ctx;
        RECORD_LAYER_reset_write_sequence(&s->rlayer);
    }
    if (((which & SSL3_CC_CLIENT) && (which & SSL3_CC_WRITE))
            || ((which & SSL3_CC_SERVER) && (which & SSL3_CC_READ))) {
        if (which & SSL3_CC_HANDSHAKE) {
            insecret = s->handshake_secret;
            finsecret = s->client_finished_secret;
            finsecretlen = sizeof(s->client_finished_secret);
            label = client_handshake_traffic;
            labellen = sizeof(client_handshake_traffic) - 1;
        } else {
            insecret = s->session->master_key;
            label = client_application_traffic;
            labellen = sizeof(client_application_traffic) - 1;
        }
    } else {
        if (which & SSL3_CC_HANDSHAKE) {
            insecret = s->handshake_secret;
            finsecret = s->server_finished_secret;
            finsecretlen = sizeof(s->server_finished_secret);
            label = server_handshake_traffic;
            labellen = sizeof(server_handshake_traffic) - 1;
        } else {
            insecret = s->session->master_key;
            label = server_application_traffic;
            labellen = sizeof(server_application_traffic) - 1;
        }
    }
    if (!tls13_derive_secret(s, insecret, label, labellen, secret)) {
        SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR);
        goto err;
    }
    keylen = EVP_CIPHER_key_length(ciph);
    if (EVP_CIPHER_mode(ciph) == EVP_CIPH_GCM_MODE)
        ivlen = EVP_GCM_TLS_FIXED_IV_LEN;
    else if (EVP_CIPHER_mode(ciph) == EVP_CIPH_CCM_MODE)
        ivlen = EVP_CCM_TLS_FIXED_IV_LEN;
    else
        ivlen = EVP_CIPHER_iv_length(ciph);
    if (!tls13_derive_key(s, secret, key, keylen)
            || !tls13_derive_iv(s, secret, iv, ivlen)
            || (finsecret != NULL && !tls13_derive_finishedkey(s, secret,
                                                               finsecret,
                                                               finsecretlen))) {
        SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR);
        goto err;
    }
    if (EVP_CIPHER_mode(ciph) == EVP_CIPH_GCM_MODE) {
        if (!EVP_CipherInit_ex(ciph_ctx, ciph, NULL, key, NULL,
                               (which & SSL3_CC_WRITE))
                || !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_GCM_SET_IV_FIXED,
                                        (int)ivlen, iv)) {
            SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_EVP_LIB);
            goto err;
        }
    } else if (EVP_CIPHER_mode(ciph) == EVP_CIPH_CCM_MODE) {
        int taglen;
        if (s->s3->tmp.new_cipher->algorithm_enc
                & (SSL_AES128CCM8 | SSL_AES256CCM8))
            taglen = 8;
        else
            taglen = 16;
        if (!EVP_CipherInit_ex(ciph_ctx, ciph, NULL, NULL, NULL,
                               (which & SSL3_CC_WRITE))
                || !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_AEAD_SET_IVLEN, 12,
                                        NULL)
                || !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_AEAD_SET_TAG, taglen,
                                        NULL)
                || !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_CCM_SET_IV_FIXED,
                                        (int)ivlen, iv)
                || !EVP_CipherInit_ex(ciph_ctx, NULL, NULL, key, NULL, -1)) {
            SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_EVP_LIB);
            goto err;
        }
    } else {
        if (!EVP_CipherInit_ex(ciph_ctx, ciph, NULL, key, iv,
                               (which & SSL3_CC_WRITE))) {
            SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_EVP_LIB);
            goto err;
        }
    }
#ifdef OPENSSL_SSL_TRACE_CRYPTO
    if (s->msg_callback) {
        int wh = which & SSL3_CC_WRITE ? TLS1_RT_CRYPTO_WRITE : 0;
        if (ciph->key_len)
            s->msg_callback(2, s->version, wh | TLS1_RT_CRYPTO_KEY,
                            key, ciph->key_len, s, s->msg_callback_arg);
        if (ivlen) {
            if (EVP_CIPHER_mode(ciph) == EVP_CIPH_GCM_MODE)
                wh |= TLS1_RT_CRYPTO_FIXED_IV;
            else
                wh |= TLS1_RT_CRYPTO_IV;
            s->msg_callback(2, s->version, wh, iv, ivlen, s,
                            s->msg_callback_arg);
        }
    }
#endif
    ret = 1;
 err:
    OPENSSL_cleanse(secret, sizeof(secret));
    OPENSSL_cleanse(key, sizeof(key));
    OPENSSL_cleanse(iv, sizeof(iv));
    return ret;
}
['int tls13_change_cipher_state(SSL *s, int which)\n{\n    static const unsigned char client_handshake_traffic[] =\n        "client handshake traffic secret";\n    static const unsigned char client_application_traffic[] =\n        "client application traffic secret";\n    static const unsigned char server_handshake_traffic[] =\n        "server handshake traffic secret";\n    static const unsigned char server_application_traffic[] =\n        "server application traffic secret";\n    unsigned char key[EVP_MAX_KEY_LENGTH];\n    unsigned char iv[EVP_MAX_IV_LENGTH];\n    unsigned char secret[EVP_MAX_MD_SIZE];\n    unsigned char *insecret;\n    unsigned char *finsecret = NULL;\n    EVP_CIPHER_CTX *ciph_ctx;\n    const EVP_CIPHER *ciph = s->s3->tmp.new_sym_enc;;\n    size_t ivlen, keylen, finsecretlen;\n    const unsigned char *label;\n    size_t labellen;\n    int ret = 0;\n    if (which & SSL3_CC_READ) {\n        if (s->enc_read_ctx != NULL) {\n            EVP_CIPHER_CTX_reset(s->enc_read_ctx);\n        } else {\n            s->enc_read_ctx = EVP_CIPHER_CTX_new();\n            if (s->enc_read_ctx == NULL) {\n                SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE);\n                goto err;\n            }\n        }\n        ciph_ctx = s->enc_read_ctx;\n        RECORD_LAYER_reset_read_sequence(&s->rlayer);\n    } else {\n        if (s->enc_write_ctx != NULL) {\n            EVP_CIPHER_CTX_reset(s->enc_write_ctx);\n        } else {\n            s->enc_write_ctx = EVP_CIPHER_CTX_new();\n            if (s->enc_write_ctx == NULL) {\n                SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_MALLOC_FAILURE);\n                goto err;\n            }\n        }\n        ciph_ctx = s->enc_write_ctx;\n        RECORD_LAYER_reset_write_sequence(&s->rlayer);\n    }\n    if (((which & SSL3_CC_CLIENT) && (which & SSL3_CC_WRITE))\n            || ((which & SSL3_CC_SERVER) && (which & SSL3_CC_READ))) {\n        if (which & SSL3_CC_HANDSHAKE) {\n            insecret = s->handshake_secret;\n            finsecret = s->client_finished_secret;\n            finsecretlen = sizeof(s->client_finished_secret);\n            label = client_handshake_traffic;\n            labellen = sizeof(client_handshake_traffic) - 1;\n        } else {\n            insecret = s->session->master_key;\n            label = client_application_traffic;\n            labellen = sizeof(client_application_traffic) - 1;\n        }\n    } else {\n        if (which & SSL3_CC_HANDSHAKE) {\n            insecret = s->handshake_secret;\n            finsecret = s->server_finished_secret;\n            finsecretlen = sizeof(s->server_finished_secret);\n            label = server_handshake_traffic;\n            labellen = sizeof(server_handshake_traffic) - 1;\n        } else {\n            insecret = s->session->master_key;\n            label = server_application_traffic;\n            labellen = sizeof(server_application_traffic) - 1;\n        }\n    }\n    if (!tls13_derive_secret(s, insecret, label, labellen, secret)) {\n        SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR);\n        goto err;\n    }\n    keylen = EVP_CIPHER_key_length(ciph);\n    if (EVP_CIPHER_mode(ciph) == EVP_CIPH_GCM_MODE)\n        ivlen = EVP_GCM_TLS_FIXED_IV_LEN;\n    else if (EVP_CIPHER_mode(ciph) == EVP_CIPH_CCM_MODE)\n        ivlen = EVP_CCM_TLS_FIXED_IV_LEN;\n    else\n        ivlen = EVP_CIPHER_iv_length(ciph);\n    if (!tls13_derive_key(s, secret, key, keylen)\n            || !tls13_derive_iv(s, secret, iv, ivlen)\n            || (finsecret != NULL && !tls13_derive_finishedkey(s, secret,\n                                                               finsecret,\n                                                               finsecretlen))) {\n        SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_INTERNAL_ERROR);\n        goto err;\n    }\n    if (EVP_CIPHER_mode(ciph) == EVP_CIPH_GCM_MODE) {\n        if (!EVP_CipherInit_ex(ciph_ctx, ciph, NULL, key, NULL,\n                               (which & SSL3_CC_WRITE))\n                || !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_GCM_SET_IV_FIXED,\n                                        (int)ivlen, iv)) {\n            SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_EVP_LIB);\n            goto err;\n        }\n    } else if (EVP_CIPHER_mode(ciph) == EVP_CIPH_CCM_MODE) {\n        int taglen;\n        if (s->s3->tmp.new_cipher->algorithm_enc\n                & (SSL_AES128CCM8 | SSL_AES256CCM8))\n            taglen = 8;\n        else\n            taglen = 16;\n        if (!EVP_CipherInit_ex(ciph_ctx, ciph, NULL, NULL, NULL,\n                               (which & SSL3_CC_WRITE))\n                || !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_AEAD_SET_IVLEN, 12,\n                                        NULL)\n                || !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_AEAD_SET_TAG, taglen,\n                                        NULL)\n                || !EVP_CIPHER_CTX_ctrl(ciph_ctx, EVP_CTRL_CCM_SET_IV_FIXED,\n                                        (int)ivlen, iv)\n                || !EVP_CipherInit_ex(ciph_ctx, NULL, NULL, key, NULL, -1)) {\n            SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_EVP_LIB);\n            goto err;\n        }\n    } else {\n        if (!EVP_CipherInit_ex(ciph_ctx, ciph, NULL, key, iv,\n                               (which & SSL3_CC_WRITE))) {\n            SSLerr(SSL_F_TLS13_CHANGE_CIPHER_STATE, ERR_R_EVP_LIB);\n            goto err;\n        }\n    }\n#ifdef OPENSSL_SSL_TRACE_CRYPTO\n    if (s->msg_callback) {\n        int wh = which & SSL3_CC_WRITE ? TLS1_RT_CRYPTO_WRITE : 0;\n        if (ciph->key_len)\n            s->msg_callback(2, s->version, wh | TLS1_RT_CRYPTO_KEY,\n                            key, ciph->key_len, s, s->msg_callback_arg);\n        if (ivlen) {\n            if (EVP_CIPHER_mode(ciph) == EVP_CIPH_GCM_MODE)\n                wh |= TLS1_RT_CRYPTO_FIXED_IV;\n            else\n                wh |= TLS1_RT_CRYPTO_IV;\n            s->msg_callback(2, s->version, wh, iv, ivlen, s,\n                            s->msg_callback_arg);\n        }\n    }\n#endif\n    ret = 1;\n err:\n    OPENSSL_cleanse(secret, sizeof(secret));\n    OPENSSL_cleanse(key, sizeof(key));\n    OPENSSL_cleanse(iv, sizeof(iv));\n    return ret;\n}']