ssl/record/ssl3_record.c:960: error: NULL_DEREFERENCE
  pointer `hmac` last assigned on line 897 could be null and is dereferenced by call to `EVP_MD_CTX_free()` at line 960, column 13.
Showing all 60 steps of the trace


ssl/record/ssl3_record.c:890:1: start of procedure tls1_mac()
888.   }
889.   
890. > int tls1_mac(SSL *ssl, unsigned char *md, int send)
891.   {
892.       SSL3_RECORD *rec;

ssl/record/ssl3_record.c:897:5: 
895.       size_t md_size;
896.       int i;
897. >     EVP_MD_CTX *hmac = NULL, *mac_ctx;
898.       unsigned char header[13];
899.       int stream_mac = (send ? (ssl->mac_flags & SSL_MAC_FLAG_WRITE_MAC_STREAM)

ssl/record/ssl3_record.c:899:23: Condition is false
897.       EVP_MD_CTX *hmac = NULL, *mac_ctx;
898.       unsigned char header[13];
899.       int stream_mac = (send ? (ssl->mac_flags & SSL_MAC_FLAG_WRITE_MAC_STREAM)
                             ^
900.                         : (ssl->mac_flags & SSL_MAC_FLAG_READ_MAC_STREAM));
901.       int t;

ssl/record/ssl3_record.c:899:5: 
897.       EVP_MD_CTX *hmac = NULL, *mac_ctx;
898.       unsigned char header[13];
899. >     int stream_mac = (send ? (ssl->mac_flags & SSL_MAC_FLAG_WRITE_MAC_STREAM)
900.                         : (ssl->mac_flags & SSL_MAC_FLAG_READ_MAC_STREAM));
901.       int t;

ssl/record/ssl3_record.c:903:9: Taking false branch
901.       int t;
902.   
903.       if (send) {
               ^
904.           rec = RECORD_LAYER_get_wrec(&ssl->rlayer);
905.           seq = RECORD_LAYER_get_write_sequence(&ssl->rlayer);

ssl/record/ssl3_record.c:908:9: 
906.           hash = ssl->write_hash;
907.       } else {
908. >         rec = RECORD_LAYER_get_rrec(&ssl->rlayer);
909.           seq = RECORD_LAYER_get_read_sequence(&ssl->rlayer);
910.           hash = ssl->read_hash;

ssl/record/ssl3_record.c:909:9: 
907.       } else {
908.           rec = RECORD_LAYER_get_rrec(&ssl->rlayer);
909. >         seq = RECORD_LAYER_get_read_sequence(&ssl->rlayer);
910.           hash = ssl->read_hash;
911.       }

ssl/record/ssl3_record.c:910:9: 
908.           rec = RECORD_LAYER_get_rrec(&ssl->rlayer);
909.           seq = RECORD_LAYER_get_read_sequence(&ssl->rlayer);
910. >         hash = ssl->read_hash;
911.       }
912.   

ssl/record/ssl3_record.c:913:5: 
911.       }
912.   
913. >     t = EVP_MD_CTX_size(hash);
914.       OPENSSL_assert(t >= 0);
915.       md_size = t;

crypto/evp/evp_lib.c:436:1: start of procedure EVP_MD_CTX_md()
  434.   }
  435.   
  436. > const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx)
  437.   {
  438.       if (!ctx)

crypto/evp/evp_lib.c:438:10: Taking false branch
  436.   const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx)
  437.   {
  438.       if (!ctx)
                  ^
  439.           return NULL;
  440.       return ctx->digest;

crypto/evp/evp_lib.c:440:5: 
  438.       if (!ctx)
  439.           return NULL;
  440. >     return ctx->digest;
  441.   }
  442.   

crypto/evp/evp_lib.c:441:1: return from a call to EVP_MD_CTX_md
  439.           return NULL;
  440.       return ctx->digest;
  441. > }
  442.   
  443.   EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx)

crypto/evp/evp_lib.c:300:1: start of procedure EVP_MD_size()
  298.   }
  299.   
  300. > int EVP_MD_size(const EVP_MD *md)
  301.   {
  302.       if (!md) {

crypto/evp/evp_lib.c:302:10: Taking false branch
  300.   int EVP_MD_size(const EVP_MD *md)
  301.   {
  302.       if (!md) {
                  ^
  303.           EVPerr(EVP_F_EVP_MD_SIZE, EVP_R_MESSAGE_DIGEST_IS_NULL);
  304.           return -1;

crypto/evp/evp_lib.c:306:5: 
  304.           return -1;
  305.       }
  306. >     return md->md_size;
  307.   }
  308.   

crypto/evp/evp_lib.c:307:1: return from a call to EVP_MD_size
  305.       }
  306.       return md->md_size;
  307. > }
  308.   
  309.   unsigned long EVP_MD_flags(const EVP_MD *md)

ssl/record/ssl3_record.c:914:5: Condition is true
912.   
913.       t = EVP_MD_CTX_size(hash);
914.       OPENSSL_assert(t >= 0);
           ^
915.       md_size = t;
916.   

ssl/record/ssl3_record.c:915:5: 
913.       t = EVP_MD_CTX_size(hash);
914.       OPENSSL_assert(t >= 0);
915. >     md_size = t;
916.   
917.       /* I should fix this up TLS TLS TLS TLS TLS XXXXXXXX */

ssl/record/ssl3_record.c:918:9: Taking true branch
916.   
917.       /* I should fix this up TLS TLS TLS TLS TLS XXXXXXXX */
918.       if (stream_mac) {
               ^
919.           mac_ctx = hash;
920.       } else {

ssl/record/ssl3_record.c:919:9: 
917.       /* I should fix this up TLS TLS TLS TLS TLS XXXXXXXX */
918.       if (stream_mac) {
919. >         mac_ctx = hash;
920.       } else {
921.           hmac = EVP_MD_CTX_new();

ssl/record/ssl3_record.c:928:9: Taking true branch
926.       }
927.   
928.       if (SSL_IS_DTLS(ssl)) {
               ^
929.           unsigned char dtlsseq[8], *p = dtlsseq;
930.   

ssl/record/ssl3_record.c:929:9: 
927.   
928.       if (SSL_IS_DTLS(ssl)) {
929. >         unsigned char dtlsseq[8], *p = dtlsseq;
930.   
931.           s2n(send ? DTLS_RECORD_LAYER_get_w_epoch(&ssl->rlayer) :

ssl/record/ssl3_record.c:931:9: Condition is false
929.           unsigned char dtlsseq[8], *p = dtlsseq;
930.   
931.           s2n(send ? DTLS_RECORD_LAYER_get_w_epoch(&ssl->rlayer) :
               ^
932.               DTLS_RECORD_LAYER_get_r_epoch(&ssl->rlayer), p);
933.           memcpy(p, &seq[2], 6);

ssl/record/ssl3_record.c:931:9: Condition is false
929.           unsigned char dtlsseq[8], *p = dtlsseq;
930.   
931.           s2n(send ? DTLS_RECORD_LAYER_get_w_epoch(&ssl->rlayer) :
               ^
932.               DTLS_RECORD_LAYER_get_r_epoch(&ssl->rlayer), p);
933.           memcpy(p, &seq[2], 6);

ssl/record/ssl3_record.c:933:9: 
931.           s2n(send ? DTLS_RECORD_LAYER_get_w_epoch(&ssl->rlayer) :
932.               DTLS_RECORD_LAYER_get_r_epoch(&ssl->rlayer), p);
933. >         memcpy(p, &seq[2], 6);
934.   
935.           memcpy(header, dtlsseq, 8);

ssl/record/ssl3_record.c:935:9: 
933.           memcpy(p, &seq[2], 6);
934.   
935. >         memcpy(header, dtlsseq, 8);
936.       } else
937.           memcpy(header, seq, 8);

ssl/record/ssl3_record.c:939:5: 
937.           memcpy(header, seq, 8);
938.   
939. >     header[8] = rec->type;
940.       header[9] = (unsigned char)(ssl->version >> 8);
941.       header[10] = (unsigned char)(ssl->version);

ssl/record/ssl3_record.c:940:5: 
938.   
939.       header[8] = rec->type;
940. >     header[9] = (unsigned char)(ssl->version >> 8);
941.       header[10] = (unsigned char)(ssl->version);
942.       header[11] = (rec->length) >> 8;

ssl/record/ssl3_record.c:941:5: 
939.       header[8] = rec->type;
940.       header[9] = (unsigned char)(ssl->version >> 8);
941. >     header[10] = (unsigned char)(ssl->version);
942.       header[11] = (rec->length) >> 8;
943.       header[12] = (rec->length) & 0xff;

ssl/record/ssl3_record.c:942:5: 
940.       header[9] = (unsigned char)(ssl->version >> 8);
941.       header[10] = (unsigned char)(ssl->version);
942. >     header[11] = (rec->length) >> 8;
943.       header[12] = (rec->length) & 0xff;
944.   

ssl/record/ssl3_record.c:943:5: 
941.       header[10] = (unsigned char)(ssl->version);
942.       header[11] = (rec->length) >> 8;
943. >     header[12] = (rec->length) & 0xff;
944.   
945.       if (!send && !SSL_USE_ETM(ssl) &&

ssl/record/ssl3_record.c:945:10: Taking true branch
943.       header[12] = (rec->length) & 0xff;
944.   
945.       if (!send && !SSL_USE_ETM(ssl) &&
                ^
946.           EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
947.           ssl3_cbc_record_digest_supported(mac_ctx)) {

ssl/record/ssl3_record.c:945:19: Taking true branch
943.       header[12] = (rec->length) & 0xff;
944.   
945.       if (!send && !SSL_USE_ETM(ssl) &&
                         ^
946.           EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
947.           ssl3_cbc_record_digest_supported(mac_ctx)) {

ssl/record/ssl3_record.c:946:9: 
944.   
945.       if (!send && !SSL_USE_ETM(ssl) &&
946. >         EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
947.           ssl3_cbc_record_digest_supported(mac_ctx)) {
948.           /*

crypto/evp/evp_lib.c:240:1: start of procedure EVP_CIPHER_CTX_flags()
  238.   }
  239.   
  240. > unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx)
  241.   {
  242.       return ctx->cipher->flags;

crypto/evp/evp_lib.c:242:5: 
  240.   unsigned long EVP_CIPHER_CTX_flags(const EVP_CIPHER_CTX *ctx)
  241.   {
  242. >     return ctx->cipher->flags;
  243.   }
  244.   

crypto/evp/evp_lib.c:243:1: return from a call to EVP_CIPHER_CTX_flags
  241.   {
  242.       return ctx->cipher->flags;
  243. > }
  244.   
  245.   void *EVP_CIPHER_CTX_get_app_data(const EVP_CIPHER_CTX *ctx)

ssl/record/ssl3_record.c:946:9: Taking true branch
944.   
945.       if (!send && !SSL_USE_ETM(ssl) &&
946.           EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
               ^
947.           ssl3_cbc_record_digest_supported(mac_ctx)) {
948.           /*

ssl/record/ssl3_record.c:947:9: 
945.       if (!send && !SSL_USE_ETM(ssl) &&
946.           EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
947. >         ssl3_cbc_record_digest_supported(mac_ctx)) {
948.           /*
949.            * This is a CBC-encrypted record. We must avoid leaking any

ssl/s3_cbc.c:138:1: start of procedure ssl3_cbc_record_digest_supported()
  136.    * which ssl3_cbc_digest_record supports.
  137.    */
  138. > char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx)
  139.   {
  140.       if (FIPS_mode())

ssl/s3_cbc.c:140:9: 
  138.   char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx)
  139.   {
  140. >     if (FIPS_mode())
  141.           return 0;
  142.       switch (EVP_MD_CTX_type(ctx)) {

crypto/o_fips.c:64:1: start of procedure FIPS_mode()
    62.   #endif
    63.   
    64. > int FIPS_mode(void)
    65.   {
    66.   #ifdef OPENSSL_FIPS

crypto/o_fips.c:69:5: 
    67.       return FIPS_module_mode();
    68.   #else
    69. >     return 0;
    70.   #endif
    71.   }

crypto/o_fips.c:71:1: return from a call to FIPS_mode
    69.       return 0;
    70.   #endif
    71. > }
    72.   
    73.   int FIPS_mode_set(int r)

ssl/s3_cbc.c:140:9: Taking false branch
  138.   char ssl3_cbc_record_digest_supported(const EVP_MD_CTX *ctx)
  139.   {
  140.       if (FIPS_mode())
                 ^
  141.           return 0;
  142.       switch (EVP_MD_CTX_type(ctx)) {

ssl/s3_cbc.c:142:5: 
  140.       if (FIPS_mode())
  141.           return 0;
  142. >     switch (EVP_MD_CTX_type(ctx)) {
  143.       case NID_md5:
  144.       case NID_sha1:

crypto/evp/evp_lib.c:436:1: start of procedure EVP_MD_CTX_md()
    434.   }
    435.   
    436. > const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx)
    437.   {
    438.       if (!ctx)

crypto/evp/evp_lib.c:438:10: Taking false branch
    436.   const EVP_MD *EVP_MD_CTX_md(const EVP_MD_CTX *ctx)
    437.   {
    438.       if (!ctx)
                    ^
    439.           return NULL;
    440.       return ctx->digest;

crypto/evp/evp_lib.c:440:5: 
    438.       if (!ctx)
    439.           return NULL;
    440. >     return ctx->digest;
    441.   }
    442.   

crypto/evp/evp_lib.c:441:1: return from a call to EVP_MD_CTX_md
    439.           return NULL;
    440.       return ctx->digest;
    441. > }
    442.   
    443.   EVP_PKEY_CTX *EVP_MD_CTX_pkey_ctx(const EVP_MD_CTX *ctx)

crypto/evp/evp_lib.c:290:1: start of procedure EVP_MD_type()
    288.   }
    289.   
    290. > int EVP_MD_type(const EVP_MD *md)
    291.   {
    292.       return md->type;

crypto/evp/evp_lib.c:292:5: 
    290.   int EVP_MD_type(const EVP_MD *md)
    291.   {
    292. >     return md->type;
    293.   }
    294.   

crypto/evp/evp_lib.c:293:1: return from a call to EVP_MD_type
    291.   {
    292.       return md->type;
    293. > }
    294.   
    295.   int EVP_MD_pkey_type(const EVP_MD *md)

ssl/s3_cbc.c:143:5: Switch condition is true. Entering switch case
  141.           return 0;
  142.       switch (EVP_MD_CTX_type(ctx)) {
  143.       case NID_md5:
             ^
  144.       case NID_sha1:
  145.       case NID_sha224:

ssl/s3_cbc.c:149:9: 
  147.       case NID_sha384:
  148.       case NID_sha512:
  149. >         return 1;
  150.       default:
  151.           return 0;

ssl/s3_cbc.c:153:1: return from a call to ssl3_cbc_record_digest_supported
  151.           return 0;
  152.       }
  153. > }
  154.   
  155.   /*-

ssl/record/ssl3_record.c:947:9: Taking true branch
945.       if (!send && !SSL_USE_ETM(ssl) &&
946.           EVP_CIPHER_CTX_mode(ssl->enc_read_ctx) == EVP_CIPH_CBC_MODE &&
947.           ssl3_cbc_record_digest_supported(mac_ctx)) {
               ^
948.           /*
949.            * This is a CBC-encrypted record. We must avoid leaking any

ssl/record/ssl3_record.c:954:13: Taking true branch
952.            */
953.           /* Final param == not SSLv3 */
954.           if (ssl3_cbc_digest_record(mac_ctx,
                   ^
955.                                      md, &md_size,
956.                                      header, rec->input,

ssl/record/ssl3_record.c:960:13: 
958.                                      ssl->s3->read_mac_secret,
959.                                      ssl->s3->read_mac_secret_size, 0) <= 0) {
960. >             EVP_MD_CTX_free(hmac);
961.               return -1;
962.           }
