crypto/bn/bn_gcd.c:155: error: BUFFER_OVERRUN_L3
  Offset added: [8, +oo] Size: [0, 536870848] by call to `BN_mod_inverse_no_branch`.
Showing all 15 steps of the trace


crypto/bn/bn_gcd.c:135:1: Parameter `n->top`
133.   }
134.   
135. > BIGNUM *int_bn_mod_inverse(BIGNUM *in,
136.                              const BIGNUM *a, const BIGNUM *n, BN_CTX *ctx,
137.                              int *pnoinv)

crypto/bn/bn_gcd.c:144:9: Call
142.   
143.       /* This is invalid input so we don't worry about constant time here */
144.       if (BN_abs_is_word(n, 1) || BN_is_zero(n)) {
               ^
145.           if (pnoinv != NULL)
146.               *pnoinv = 1;

crypto/bn/bn_lib.c:840:1: Parameter `a->top`
  838.   }
  839.   
  840. > int BN_abs_is_word(const BIGNUM *a, const BN_ULONG w)
  841.   {
  842.       return ((a->top == 1) && (a->d[0] == w)) || ((w == 0) && (a->top == 0));

crypto/bn/bn_gcd.c:144:33: Call
142.   
143.       /* This is invalid input so we don't worry about constant time here */
144.       if (BN_abs_is_word(n, 1) || BN_is_zero(n)) {
                                       ^
145.           if (pnoinv != NULL)
146.               *pnoinv = 1;

crypto/bn/bn_lib.c:845:1: Parameter `a->top`
  843.   }
  844.   
  845. > int BN_is_zero(const BIGNUM *a)
  846.   {
  847.       return a->top == 0;

crypto/bn/bn_gcd.c:155:16: Call
153.       if ((BN_get_flags(a, BN_FLG_CONSTTIME) != 0)
154.           || (BN_get_flags(n, BN_FLG_CONSTTIME) != 0)) {
155.           return BN_mod_inverse_no_branch(in, a, n, ctx);
                      ^
156.       }
157.   

crypto/bn/bn_gcd.c:458:1: Parameter `n->top`
  456.    * not contain branches that may leak sensitive information.
  457.    */
  458. > static BIGNUM *BN_mod_inverse_no_branch(BIGNUM *in,
  459.                                           const BIGNUM *a, const BIGNUM *n,
  460.                                           BN_CTX *ctx)

crypto/bn/bn_gcd.c:491:9: Call
  489.       if (BN_copy(B, a) == NULL)
  490.           goto err;
  491.       if (BN_copy(A, n) == NULL)
                 ^
  492.           goto err;
  493.       A->neg = 0;

crypto/bn/bn_lib.c:285:1: <Offset trace>
283.   }
284.   
285. > BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
286.   {
287.       bn_check_top(b);

crypto/bn/bn_lib.c:285:1: Parameter `b->top`
    283.   }
    284.   
    285. > BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
    286.   {
    287.       bn_check_top(b);

crypto/bn/bn_lib.c:285:1: <Length trace>
283.   }
284.   
285. > BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
286.   {
287.       bn_check_top(b);

crypto/bn/bn_lib.c:285:1: Parameter `*a->d`
    283.   }
    284.   
    285. > BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
    286.   {
    287.       bn_check_top(b);

crypto/bn/bn_lib.c:291:9: Call
    289.       if (a == b)
    290.           return a;
    291.       if (bn_wexpand(a, b->top) == NULL)
                   ^
    292.           return NULL;
    293.   

crypto/bn/bn_lib.c:941:1: Parameter `*a->d`
      939.   }
      940.   
      941. > BIGNUM *bn_wexpand(BIGNUM *a, int words)
      942.   {
      943.       return (words <= a->dmax) ? a : bn_expand2(a, words);

crypto/bn/bn_lib.c:295:9: Array access: Offset added: [8, +oo] Size: [0, 536870848] by call to `BN_mod_inverse_no_branch` 
    293.   
    294.       if (b->top > 0)
    295.           memcpy(a->d, b->d, sizeof(b->d[0]) * b->top);
                   ^
    296.   
    297.       a->top = b->top;
