crypto/rsa/rsa_eay.c:435: error: BUFFER_OVERRUN_L3
  Offset: 1 Size: [0, +oo] by call to `BN_MONT_CTX_set`.
Showing all 14 steps of the trace


crypto/rsa/rsa_eay.c:428:10: Call
426.   			{
427.   			if ((rsa->_method_mod_p=BN_MONT_CTX_new()) != NULL)
428.   				if (!BN_MONT_CTX_set(rsa->_method_mod_p,rsa->p,
                ^
429.   						     ctx))
430.   					goto err;

crypto/bn/bn_mont.c:301:1: Parameter `*mont->RR.d`
  299.   	}
  300.   
  301. > int BN_MONT_CTX_set(BN_MONT_CTX *mont, BIGNUM *mod, BN_CTX *ctx)
  302.   	{
  303.   	BIGNUM Ri,*R;

crypto/bn/bn_mont.c:319:3: Call
  317.   
  318.   		mont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;
  319.   		BN_zero(R);
           ^
  320.   		BN_set_bit(R,BN_BITS2);
  321.   		/* I was bad, this modification of a passed variable was

crypto/bn/bn_lib.c:548:1: Parameter `*a->d`
    546.   	}
    547.   
    548. > int BN_set_word(BIGNUM *a, BN_ULONG w)
    549.   	{
    550.   	int i,n;

crypto/bn/bn_mont.c:320:3: Call
  318.   		mont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;
  319.   		BN_zero(R);
  320.   		BN_set_bit(R,BN_BITS2);
           ^
  321.   		/* I was bad, this modification of a passed variable was
  322.   		 * breaking the multithreaded stuff :-(

crypto/bn/bn_lib.c:688:1: Parameter `*a->d`
    686.   	}
    687.   
    688. > int BN_set_bit(BIGNUM *a, int n)
    689.   	{
    690.   	int i,j,k;

crypto/rsa/rsa_eay.c:435:10: Call
433.   			{
434.   			if ((rsa->_method_mod_q=BN_MONT_CTX_new()) != NULL)
435.   				if (!BN_MONT_CTX_set(rsa->_method_mod_q,rsa->q,
                ^
436.   						     ctx))
437.   					goto err;

crypto/bn/bn_mont.c:301:1: Parameter `*mont->RR.d`
  299.   	}
  300.   
  301. > int BN_MONT_CTX_set(BN_MONT_CTX *mont, BIGNUM *mod, BN_CTX *ctx)
  302.   	{
  303.   	BIGNUM Ri,*R;

crypto/bn/bn_mont.c:319:3: Call
  317.   
  318.   		mont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;
  319.   		BN_zero(R);
           ^
  320.   		BN_set_bit(R,BN_BITS2);
  321.   		/* I was bad, this modification of a passed variable was

crypto/bn/bn_lib.c:553:2: <Offset trace>
551.   	if (bn_expand(a,sizeof(BN_ULONG)*8) == NULL) return(0);
552.   
553.   	n=sizeof(BN_ULONG)/BN_BYTES;
        ^
554.   	a->neg=0;
555.   	a->top=0;

crypto/bn/bn_lib.c:553:2: Assignment
    551.   	if (bn_expand(a,sizeof(BN_ULONG)*8) == NULL) return(0);
    552.   
    553.   	n=sizeof(BN_ULONG)/BN_BYTES;
            ^
    554.   	a->neg=0;
    555.   	a->top=0;

crypto/bn/bn_lib.c:548:1: <Length trace>
546.   	}
547.   
548. > int BN_set_word(BIGNUM *a, BN_ULONG w)
549.   	{
550.   	int i,n;

crypto/bn/bn_lib.c:548:1: Parameter `*a->d`
    546.   	}
    547.   
    548. > int BN_set_word(BIGNUM *a, BN_ULONG w)
    549.   	{
    550.   	int i,n;

crypto/bn/bn_lib.c:567:3: Array access: Offset: 1 Size: [0, +oo] by call to `BN_MONT_CTX_set` 
    565.   		w>>=BN_BITS4;
    566.   #endif
    567.   		a->d[i]=(BN_ULONG)w&BN_MASK2;
             ^
    568.   		if (a->d[i] != 0) a->top=i+1;
    569.   		}

int BN_set_word(BIGNUM *a, BN_ULONG w)
	{
	int i,n;
	if (bn_expand(a,sizeof(BN_ULONG)*8) == NULL) return(0);
	n=sizeof(BN_ULONG)/BN_BYTES;
	a->neg=0;
	a->top=0;
	a->d[0]=(BN_ULONG)w&BN_MASK2;
	if (a->d[0] != 0) a->top=1;
	for (i=1; i<n; i++)
		{
#ifndef SIXTY_FOUR_BIT
		w>>=BN_BITS4;
		w>>=BN_BITS4;
#endif
		a->d[i]=(BN_ULONG)w&BN_MASK2;
		if (a->d[i] != 0) a->top=i+1;
		}
	return(1);
	}
['static int RSA_eay_mod_exp(BIGNUM *r0, BIGNUM *I, RSA *rsa)\n\t{\n\tBIGNUM r1,m1;\n\tint ret=0;\n\tBN_CTX *ctx;\n\tif ((ctx=BN_CTX_new()) == NULL) goto err;\n\tBN_init(&m1);\n\tBN_init(&r1);\n\tif (rsa->flags & RSA_FLAG_CACHE_PRIVATE)\n\t\t{\n\t\tif (rsa->_method_mod_p == NULL)\n\t\t\t{\n\t\t\tif ((rsa->_method_mod_p=BN_MONT_CTX_new()) != NULL)\n\t\t\t\tif (!BN_MONT_CTX_set(rsa->_method_mod_p,rsa->p,\n\t\t\t\t\t\t     ctx))\n\t\t\t\t\tgoto err;\n\t\t\t}\n\t\tif (rsa->_method_mod_q == NULL)\n\t\t\t{\n\t\t\tif ((rsa->_method_mod_q=BN_MONT_CTX_new()) != NULL)\n\t\t\t\tif (!BN_MONT_CTX_set(rsa->_method_mod_q,rsa->q,\n\t\t\t\t\t\t     ctx))\n\t\t\t\t\tgoto err;\n\t\t\t}\n\t\t}\n\tif (!BN_mod(&r1,I,rsa->q,ctx)) goto err;\n\tif (!rsa->meth->bn_mod_exp(&m1,&r1,rsa->dmq1,rsa->q,ctx,\n\t\trsa->_method_mod_q)) goto err;\n\tif (!BN_mod(&r1,I,rsa->p,ctx)) goto err;\n\tif (!rsa->meth->bn_mod_exp(r0,&r1,rsa->dmp1,rsa->p,ctx,\n\t\trsa->_method_mod_p)) goto err;\n\tif (!BN_sub(r0,r0,&m1)) goto err;\n\tif (r0->neg)\n\t\tif (!BN_add(r0,r0,rsa->p)) goto err;\n\tif (!BN_mul(&r1,r0,rsa->iqmp,ctx)) goto err;\n\tif (!BN_mod(r0,&r1,rsa->p,ctx)) goto err;\n\tif (r0->neg)\n\t\tif (!BN_add(r0,r0,rsa->p)) goto err;\n\tif (!BN_mul(&r1,r0,rsa->q,ctx)) goto err;\n\tif (!BN_add(r0,&r1,&m1)) goto err;\n\tret=1;\nerr:\n\tBN_clear_free(&m1);\n\tBN_clear_free(&r1);\n\tBN_CTX_free(ctx);\n\treturn(ret);\n\t}', 'int BN_MONT_CTX_set(BN_MONT_CTX *mont, BIGNUM *mod, BN_CTX *ctx)\n\t{\n\tBIGNUM Ri,*R;\n\tBN_init(&Ri);\n\tR= &(mont->RR);\n\tBN_copy(&(mont->N),mod);\n#ifdef BN_RECURSION_MONT\n\tif (mont->N.top < BN_MONT_CTX_SET_SIZE_WORD)\n#endif\n\t\t{\n\t\tBIGNUM tmod;\n\t\tBN_ULONG buf[2];\n\t\tmont->use_word=1;\n\t\tmont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;\n\t\tBN_zero(R);\n\t\tBN_set_bit(R,BN_BITS2);\n\t\tbuf[0]=mod->d[0];\n\t\tbuf[1]=0;\n\t\ttmod.d=buf;\n\t\ttmod.top=1;\n\t\ttmod.max=mod->max;\n\t\ttmod.neg=mod->neg;\n\t\tif ((BN_mod_inverse(&Ri,R,&tmod,ctx)) == NULL)\n\t\t\tgoto err;\n\t\tBN_lshift(&Ri,&Ri,BN_BITS2);\n\t\tif (!BN_is_zero(&Ri))\n\t\t\t{\n#if 1\n\t\t\tBN_sub_word(&Ri,1);\n#else\n\t\t\tBN_usub(&Ri,&Ri,BN_value_one());\n#endif\n\t\t\t}\n\t\telse\n\t\t\t{\n\t\t\tBN_set_word(&Ri,BN_MASK2);\n\t\t\t}\n\t\tBN_div(&Ri,NULL,&Ri,&tmod,ctx);\n\t\tmont->n0=Ri.d[0];\n\t\tBN_free(&Ri);\n\t\t}\n#ifdef BN_RECURSION_MONT\n\telse\n\t\t{\n\t\tmont->use_word=0;\n\t\tmont->ri=(BN_num_bits(mod)+(BN_BITS2-1))/BN_BITS2*BN_BITS2;\n#if 1\n\t\tBN_zero(R);\n\t\tBN_set_bit(R,mont->ri);\n#else\n\t\tBN_lshift(R,BN_value_one(),mont->ri);\n#endif\n\t\tif ((BN_mod_inverse(&Ri,R,mod,ctx)) == NULL)\n\t\t\tgoto err;\n\t\tBN_lshift(&Ri,&Ri,mont->ri);\n#if 1\n\t\tBN_sub_word(&Ri,1);\n#else\n\t\tBN_usub(&Ri,&Ri,BN_value_one());\n#endif\n\t\tBN_div(&(mont->Ni),NULL,&Ri,mod,ctx);\n\t\tBN_free(&Ri);\n\t\t}\n#endif\n#if 1\n\tBN_zero(&(mont->RR));\n\tBN_set_bit(&(mont->RR),mont->ri*2);\n#else\n\tBN_lshift(mont->RR,BN_value_one(),mont->ri*2);\n#endif\n\tBN_mod(&(mont->RR),&(mont->RR),&(mont->N),ctx);\n\treturn(1);\nerr:\n\treturn(0);\n\t}', 'int BN_set_word(BIGNUM *a, BN_ULONG w)\n\t{\n\tint i,n;\n\tif (bn_expand(a,sizeof(BN_ULONG)*8) == NULL) return(0);\n\tn=sizeof(BN_ULONG)/BN_BYTES;\n\ta->neg=0;\n\ta->top=0;\n\ta->d[0]=(BN_ULONG)w&BN_MASK2;\n\tif (a->d[0] != 0) a->top=1;\n\tfor (i=1; i<n; i++)\n\t\t{\n#ifndef SIXTY_FOUR_BIT\n\t\tw>>=BN_BITS4;\n\t\tw>>=BN_BITS4;\n#endif\n\t\ta->d[i]=(BN_ULONG)w&BN_MASK2;\n\t\tif (a->d[i] != 0) a->top=i+1;\n\t\t}\n\treturn(1);\n\t}', 'int BN_set_bit(BIGNUM *a, int n)\n\t{\n\tint i,j,k;\n\ti=n/BN_BITS2;\n\tj=n%BN_BITS2;\n\tif (a->top <= i)\n\t\t{\n\t\tif (bn_wexpand(a,i+1) == NULL) return(0);\n\t\tfor(k=a->top; k<i+1; k++)\n\t\t\ta->d[k]=0;\n\t\ta->top=i+1;\n\t\t}\n\ta->d[i]|=(1L<<j);\n\treturn(1);\n\t}']