apps/s_server.c:3111: error: NULL_DEREFERENCE
  pointer `rsa_tmp` last assigned on line 3109 could be null and is dereferenced by call to `RSA_free()` at line 3111, column 13.
Showing all 26 steps of the trace


apps/s_server.c:3096:1: start of procedure tmp_rsa_cb()
3094.   
3095.   #ifndef OPENSSL_NO_RSA
3096. > static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength)
3097.   {
3098.       BIGNUM *bn = NULL;

apps/s_server.c:3098:5: 
3096.   static RSA *tmp_rsa_cb(SSL *s, int is_export, int keylength)
3097.   {
3098. >     BIGNUM *bn = NULL;
3099.       static RSA *rsa_tmp = NULL;
3100.   

apps/s_server.c:3099:5: 
3097.   {
3098.       BIGNUM *bn = NULL;
3099. >     static RSA *rsa_tmp = NULL;
3100.   
3101.       if (!rsa_tmp && ((bn = BN_new()) == NULL))

apps/s_server.c:3101:10: Taking true branch
3099.       static RSA *rsa_tmp = NULL;
3100.   
3101.       if (!rsa_tmp && ((bn = BN_new()) == NULL))
                 ^
3102.           BIO_printf(bio_err, "Allocation error in generating RSA key\n");
3103.       if (!rsa_tmp && bn) {

apps/s_server.c:3101:22: Taking false branch
3099.       static RSA *rsa_tmp = NULL;
3100.   
3101.       if (!rsa_tmp && ((bn = BN_new()) == NULL))
                             ^
3102.           BIO_printf(bio_err, "Allocation error in generating RSA key\n");
3103.       if (!rsa_tmp && bn) {

apps/s_server.c:3103:10: Taking true branch
3101.       if (!rsa_tmp && ((bn = BN_new()) == NULL))
3102.           BIO_printf(bio_err, "Allocation error in generating RSA key\n");
3103.       if (!rsa_tmp && bn) {
                 ^
3104.           if (!s_quiet) {
3105.               BIO_printf(bio_err, "Generating temp (%d bit) RSA key...",

apps/s_server.c:3103:21: Taking true branch
3101.       if (!rsa_tmp && ((bn = BN_new()) == NULL))
3102.           BIO_printf(bio_err, "Allocation error in generating RSA key\n");
3103.       if (!rsa_tmp && bn) {
                            ^
3104.           if (!s_quiet) {
3105.               BIO_printf(bio_err, "Generating temp (%d bit) RSA key...",

apps/s_server.c:3104:14: Taking false branch
3102.           BIO_printf(bio_err, "Allocation error in generating RSA key\n");
3103.       if (!rsa_tmp && bn) {
3104.           if (!s_quiet) {
                     ^
3105.               BIO_printf(bio_err, "Generating temp (%d bit) RSA key...",
3106.                          keylength);

apps/s_server.c:3109:14: 
3107.               (void)BIO_flush(bio_err);
3108.           }
3109. >         if (!BN_set_word(bn, RSA_F4) || ((rsa_tmp = RSA_new()) == NULL) ||
3110.               !RSA_generate_key_ex(rsa_tmp, keylength, bn, NULL)) {
3111.               RSA_free(rsa_tmp);

crypto/bn/bn_lib.c:527:1: start of procedure BN_set_word()
  525.   }
  526.   
  527. > int BN_set_word(BIGNUM *a, BN_ULONG w)
  528.   {
  529.       bn_check_top(a);

crypto/bn/bn_lib.c:530:9: Condition is true
  528.   {
  529.       bn_check_top(a);
  530.       if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL)
                 ^
  531.           return (0);
  532.       a->neg = 0;

crypto/bn/bn_lib.c:530:9: Taking false branch
  528.   {
  529.       bn_check_top(a);
  530.       if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL)
                 ^
  531.           return (0);
  532.       a->neg = 0;

crypto/bn/bn_lib.c:532:5: 
  530.       if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL)
  531.           return (0);
  532. >     a->neg = 0;
  533.       a->d[0] = w;
  534.       a->top = (w ? 1 : 0);

crypto/bn/bn_lib.c:533:5: 
  531.           return (0);
  532.       a->neg = 0;
  533. >     a->d[0] = w;
  534.       a->top = (w ? 1 : 0);
  535.       bn_check_top(a);

crypto/bn/bn_lib.c:534:15: Condition is true
  532.       a->neg = 0;
  533.       a->d[0] = w;
  534.       a->top = (w ? 1 : 0);
                       ^
  535.       bn_check_top(a);
  536.       return (1);

crypto/bn/bn_lib.c:534:5: 
  532.       a->neg = 0;
  533.       a->d[0] = w;
  534. >     a->top = (w ? 1 : 0);
  535.       bn_check_top(a);
  536.       return (1);

crypto/bn/bn_lib.c:536:5: 
  534.       a->top = (w ? 1 : 0);
  535.       bn_check_top(a);
  536. >     return (1);
  537.   }
  538.   

crypto/bn/bn_lib.c:537:1: return from a call to BN_set_word
  535.       bn_check_top(a);
  536.       return (1);
  537. > }
  538.   
  539.   BIGNUM *BN_bin2bn(const unsigned char *s, int len, BIGNUM *ret)

apps/s_server.c:3109:14: Taking false branch
3107.               (void)BIO_flush(bio_err);
3108.           }
3109.           if (!BN_set_word(bn, RSA_F4) || ((rsa_tmp = RSA_new()) == NULL) ||
                     ^
3110.               !RSA_generate_key_ex(rsa_tmp, keylength, bn, NULL)) {
3111.               RSA_free(rsa_tmp);

apps/s_server.c:3109:42: 
3107.               (void)BIO_flush(bio_err);
3108.           }
3109. >         if (!BN_set_word(bn, RSA_F4) || ((rsa_tmp = RSA_new()) == NULL) ||
3110.               !RSA_generate_key_ex(rsa_tmp, keylength, bn, NULL)) {
3111.               RSA_free(rsa_tmp);

crypto/rsa/rsa_lib.c:72:1: start of procedure RSA_new()
  70.   static const RSA_METHOD *default_RSA_meth = NULL;
  71.   
  72. > RSA *RSA_new(void)
  73.   {
  74.       RSA *r = RSA_new_method(NULL);

crypto/rsa/rsa_lib.c:74:5: Skipping RSA_new_method(): empty list of specs
  72.   RSA *RSA_new(void)
  73.   {
  74.       RSA *r = RSA_new_method(NULL);
            ^
  75.   
  76.       return r;

crypto/rsa/rsa_lib.c:76:5: 
  74.       RSA *r = RSA_new_method(NULL);
  75.   
  76. >     return r;
  77.   }
  78.   

crypto/rsa/rsa_lib.c:77:1: return from a call to RSA_new
  75.   
  76.       return r;
  77. > }
  78.   
  79.   void RSA_set_default_method(const RSA_METHOD *meth)

apps/s_server.c:3109:42: Taking true branch
3107.               (void)BIO_flush(bio_err);
3108.           }
3109.           if (!BN_set_word(bn, RSA_F4) || ((rsa_tmp = RSA_new()) == NULL) ||
                                                 ^
3110.               !RSA_generate_key_ex(rsa_tmp, keylength, bn, NULL)) {
3111.               RSA_free(rsa_tmp);

apps/s_server.c:3111:13: 
3109.           if (!BN_set_word(bn, RSA_F4) || ((rsa_tmp = RSA_new()) == NULL) ||
3110.               !RSA_generate_key_ex(rsa_tmp, keylength, bn, NULL)) {
3111. >             RSA_free(rsa_tmp);
3112.               rsa_tmp = NULL;
3113.           }
