crypto/pem/pvkfmt.c:882: error: INTEGER_OVERFLOW_L2
  ([0, `pk->pkey.rsa->iqmp->top`] - 1):unsigned64 by call to `do_i2b`.
Showing all 11 steps of the trace


crypto/pem/pvkfmt.c:836:1: Parameter `pk->pkey.rsa->iqmp->top`
834.   	
835.   	
836. > static int i2b_PVK(unsigned char **out, EVP_PKEY*pk, int enclevel,
837.   		pem_password_cb *cb, void *u)
838.   	{

crypto/pem/pvkfmt.c:843:10: Call
841.   	if (enclevel)
842.   		outlen += PVK_SALTLEN;
843.   	pklen = do_i2b(NULL, pk, 0);
                ^
844.   	if (pklen < 0)
845.   		return -1;

crypto/pem/pvkfmt.c:483:1: Parameter `pk->pkey.rsa->iqmp->top`
  481.   static void write_dsa(unsigned char **out, DSA *dsa, int ispub);
  482.   	
  483. > static int do_i2b(unsigned char **out, EVP_PKEY *pk, int ispub)
  484.   	{
  485.   	unsigned char *p;

crypto/pem/pvkfmt.c:882:2: Call
880.   		p += PVK_SALTLEN;
881.   		}
882.   	do_i2b(&p, pk, 0);
        ^
883.   	if (enclevel == 0)
884.   		return outlen;

crypto/pem/pvkfmt.c:483:1: Parameter `pk->pkey.rsa->iqmp->top`
  481.   static void write_dsa(unsigned char **out, DSA *dsa, int ispub);
  482.   	
  483. > static int do_i2b(unsigned char **out, EVP_PKEY *pk, int ispub)
  484.   	{
  485.   	unsigned char *p;

crypto/pem/pvkfmt.c:495:12: Call
  493.   	else if (pk->type == EVP_PKEY_RSA)
  494.   		{
  495.   		bitlen = check_bitlen_rsa(pk->pkey.rsa, ispub, &magic);
                    ^
  496.   		keyalg = MS_KEYALG_RSA_KEYX;
  497.   		}

crypto/pem/pvkfmt.c:575:1: Parameter `rsa->iqmp->top`
    573.   	}
    574.   
    575. > static int check_bitlen_rsa(RSA *rsa, int ispub, unsigned int *pmagic)
    576.   	{
    577.   	int nbyte, hnbyte, bitlen;

crypto/pem/pvkfmt.c:596:8: Call
    594.   		if (BN_num_bytes(rsa->d) > nbyte)
    595.   			goto badkey;
    596.   		if ((BN_num_bytes(rsa->iqmp) > hnbyte)
                  ^
    597.   			|| (BN_num_bytes(rsa->p) > hnbyte)
    598.   			|| (BN_num_bytes(rsa->q) > hnbyte)

crypto/bn/bn_lib.c:248:1: <LHS trace>
246.   	}
247.   
248. > int BN_num_bits(const BIGNUM *a)
249.   	{
250.   	int i = a->top - 1;

crypto/bn/bn_lib.c:248:1: Parameter `a->top`
      246.   	}
      247.   
      248. > int BN_num_bits(const BIGNUM *a)
      249.   	{
      250.   	int i = a->top - 1;

crypto/bn/bn_lib.c:250:2: Binary operation: ([0, pk->pkey.rsa->iqmp->top] - 1):unsigned64 by call to `do_i2b` 
      248.   int BN_num_bits(const BIGNUM *a)
      249.   	{
      250.   	int i = a->top - 1;
              ^
      251.   	bn_check_top(a);
      252.   

int BN_num_bits(const BIGNUM *a)
	{
	int i = a->top - 1;
	bn_check_top(a);
	if (BN_is_zero(a)) return 0;
	return ((i*BN_BITS2) + BN_num_bits_word(a->d[i]));
	}
['static int i2b_PVK(unsigned char **out, EVP_PKEY*pk, int enclevel,\n\t\tpem_password_cb *cb, void *u)\n\t{\n\tint outlen = 24, noinc, pklen;\n\tunsigned char *p, *salt = NULL;\n\tif (enclevel)\n\t\toutlen += PVK_SALTLEN;\n\tpklen = do_i2b(NULL, pk, 0);\n\tif (pklen < 0)\n\t\treturn -1;\n\toutlen += pklen;\n\tif (!out)\n\t\treturn outlen;\n\tif (*out)\n\t\t{\n\t\tp = *out;\n\t\tnoinc = 0;\n\t\t}\n\telse\n\t\t{\n\t\tp = OPENSSL_malloc(outlen);\n\t\tif (!p)\n\t\t\t{\n\t\t\tPEMerr(PEM_F_I2B_PVK,ERR_R_MALLOC_FAILURE);\n\t\t\treturn -1;\n\t\t\t}\n\t\t*out = p;\n\t\tnoinc = 1;\n\t\t}\n\twrite_ledword(&p, MS_PVKMAGIC);\n\twrite_ledword(&p, 0);\n\tif (pk->type == EVP_PKEY_DSA)\n\t\twrite_ledword(&p, MS_KEYTYPE_SIGN);\n\telse\n\t\twrite_ledword(&p, MS_KEYTYPE_KEYX);\n\twrite_ledword(&p, enclevel ? 1 : 0);\n\twrite_ledword(&p, enclevel ? PVK_SALTLEN: 0);\n\twrite_ledword(&p, pklen);\n\tif (enclevel)\n\t\t{\n\t\tif (RAND_bytes(p, PVK_SALTLEN) <= 0)\n\t\t\tgoto error;\n\t\tsalt = p;\n\t\tp += PVK_SALTLEN;\n\t\t}\n\tdo_i2b(&p, pk, 0);\n\tif (enclevel == 0)\n\t\treturn outlen;\n\telse\n\t\t{\n\t\tchar psbuf[PEM_BUFSIZE];\n\t\tunsigned char keybuf[20];\n\t\tEVP_CIPHER_CTX cctx;\n\t\tint enctmplen, inlen;\n\t\tif (cb)\n\t\t\tinlen=cb(psbuf,PEM_BUFSIZE,1,u);\n\t\telse\n\t\t\tinlen=PEM_def_callback(psbuf,PEM_BUFSIZE,1,u);\n\t\tif (inlen <= 0)\n\t\t\t{\n\t\t\tPEMerr(PEM_F_I2B_PVK,PEM_R_BAD_PASSWORD_READ);\n\t\t\tgoto error;\n\t\t\t}\n\t\tif (!derive_pvk_key(keybuf, salt, PVK_SALTLEN,\n\t\t\t    (unsigned char *)psbuf, inlen))\n\t\t\tgoto error;\n\t\tif (enclevel == 1)\n\t\t\tmemset(keybuf + 5, 0, 11);\n\t\tp = salt + PVK_SALTLEN + 8;\n\t\tEVP_CIPHER_CTX_init(&cctx);\n\t\tEVP_EncryptInit_ex(&cctx, EVP_rc4(), NULL, keybuf, NULL);\n\t\tOPENSSL_cleanse(keybuf, 20);\n\t\tEVP_DecryptUpdate(&cctx, p, &enctmplen, p, pklen - 8);\n\t\tEVP_DecryptFinal_ex(&cctx, p + enctmplen, &enctmplen);\n\t\tEVP_CIPHER_CTX_cleanup(&cctx);\n\t\t}\n\treturn outlen;\n\terror:\n\treturn -1;\n\t}', 'static int do_i2b(unsigned char **out, EVP_PKEY *pk, int ispub)\n\t{\n\tunsigned char *p;\n\tunsigned int bitlen, magic = 0, keyalg;\n\tint outlen, noinc = 0;\n\tif (pk->type == EVP_PKEY_DSA)\n\t\t{\n\t\tbitlen = check_bitlen_dsa(pk->pkey.dsa, ispub, &magic);\n\t\tkeyalg = MS_KEYALG_DSS_SIGN;\n\t\t}\n\telse if (pk->type == EVP_PKEY_RSA)\n\t\t{\n\t\tbitlen = check_bitlen_rsa(pk->pkey.rsa, ispub, &magic);\n\t\tkeyalg = MS_KEYALG_RSA_KEYX;\n\t\t}\n\telse\n\t\treturn -1;\n\tif (bitlen == 0)\n\t\treturn -1;\n\toutlen = 16 + blob_length(bitlen,\n\t\t\tkeyalg == MS_KEYALG_DSS_SIGN ? 1 : 0, ispub);\n\tif (out == NULL)\n\t\treturn outlen;\n\tif (*out)\n\t\tp = *out;\n\telse\n\t\t{\n\t\tp = OPENSSL_malloc(outlen);\n\t\tif (!p)\n\t\t\treturn -1;\n\t\t*out = p;\n\t\tnoinc = 1;\n\t\t}\n\tif (ispub)\n\t\t*p++ = MS_PUBLICKEYBLOB;\n\telse\n\t\t*p++ = MS_PRIVATEKEYBLOB;\n\t*p++ = 0x2;\n\t*p++ = 0;\n\t*p++ = 0;\n\twrite_ledword(&p, keyalg);\n\twrite_ledword(&p, magic);\n\twrite_ledword(&p, bitlen);\n\tif (keyalg == MS_KEYALG_DSS_SIGN)\n\t\twrite_dsa(&p, pk->pkey.dsa, ispub);\n\telse\n\t\twrite_rsa(&p, pk->pkey.rsa, ispub);\n\tif (!noinc)\n\t\t*out += outlen;\n\treturn outlen;\n\t}', 'static int check_bitlen_rsa(RSA *rsa, int ispub, unsigned int *pmagic)\n\t{\n\tint nbyte, hnbyte, bitlen;\n\tif (BN_num_bits(rsa->e) > 32)\n\t\tgoto badkey;\n\tbitlen = BN_num_bits(rsa->n);\n\tnbyte = BN_num_bytes(rsa->n);\n\thnbyte = (BN_num_bits(rsa->n) + 15) >> 4;\n\tif (ispub)\n\t\t{\n\t\t*pmagic = MS_RSA1MAGIC;\n\t\treturn bitlen;\n\t\t}\n\telse\n\t{\n\t\t*pmagic = MS_RSA2MAGIC;\n\t\tif (BN_num_bytes(rsa->d) > nbyte)\n\t\t\tgoto badkey;\n\t\tif ((BN_num_bytes(rsa->iqmp) > hnbyte)\n\t\t\t|| (BN_num_bytes(rsa->p) > hnbyte)\n\t\t\t|| (BN_num_bytes(rsa->q) > hnbyte)\n\t\t\t|| (BN_num_bytes(rsa->dmp1) > hnbyte)\n\t\t\t|| (BN_num_bytes(rsa->dmq1) > hnbyte))\n\t\t\tgoto badkey;\n\t}\n\treturn bitlen;\n\tbadkey:\n\tPEMerr(PEM_F_CHECK_BITLEN_RSA, PEM_R_UNSUPPORTED_KEY_COMPONENTS);\n\treturn 0;\n\t}', 'int BN_num_bits(const BIGNUM *a)\n\t{\n\tint i = a->top - 1;\n\tbn_check_top(a);\n\tif (BN_is_zero(a)) return 0;\n\treturn ((i*BN_BITS2) + BN_num_bits_word(a->d[i]));\n\t}']