crypto/dh/dh_rfc7919.c:69: error: BUFFER_OVERRUN_L3
  Offset: 0 Size: [0, 8388607] by call to `BN_rshift1`.
Showing all 11 steps of the trace


crypto/dh/dh_rfc7919.c:66:21: Call
64.           return NID_undef;
65.       if (dh->q != NULL) {
66.           BIGNUM *q = BN_dup(dh->p);
                          ^
67.   
68.           /* Check q = p * 2 + 1 we already know q is odd, so just shift right */

crypto/bn/bn_lib.c:272:10: Call
  270.       if (t == NULL)
  271.           return NULL;
  272.       if (!BN_copy(t, a)) {
                  ^
  273.           BN_free(t);
  274.           return NULL;

crypto/bn/bn_lib.c:280:1: Parameter `*a->d`
    278.   }
    279.   
    280. > BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)
    281.   {
    282.       bn_check_top(b);

crypto/dh/dh_rfc7919.c:69:27: Call
67.   
68.           /* Check q = p * 2 + 1 we already know q is odd, so just shift right */
69.           if (q == NULL || !BN_rshift1(q, q) || !BN_cmp(dh->q, q))
                                ^
70.               nid = NID_undef;
71.           BN_free(q);

crypto/bn/bn_shift.c:46:1: Parameter `*r->d`
  44.   }
  45.   
  46. > int BN_rshift1(BIGNUM *r, const BIGNUM *a)
  47.   {
  48.       BN_ULONG *ap, *rp, t, c;

crypto/bn/bn_shift.c:55:9: Call
  53.   
  54.       if (BN_is_zero(a)) {
  55.           BN_zero(r);
                ^
  56.           return 1;
  57.       }

crypto/bn/bn_lib.c:358:1: <Length trace>
356.   }
357.   
358. > int BN_set_word(BIGNUM *a, BN_ULONG w)
359.   {
360.       bn_check_top(a);

crypto/bn/bn_lib.c:358:1: Parameter `*a->d`
    356.   }
    357.   
    358. > int BN_set_word(BIGNUM *a, BN_ULONG w)
    359.   {
    360.       bn_check_top(a);

crypto/bn/bn_lib.c:361:9: Call
    359.   {
    360.       bn_check_top(a);
    361.       if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL)
                   ^
    362.           return 0;
    363.       a->neg = 0;

crypto/bn/bn_lcl.h:660:1: Parameter `*a->d`
      658.                            const BIGNUM *add, const BIGNUM *rem, BN_CTX *ctx);
      659.   
      660. > static ossl_inline BIGNUM *bn_expand(BIGNUM *a, int bits)
      661.   {
      662.       if (bits > (INT_MAX - BN_BITS2 + 1))

crypto/bn/bn_lib.c:364:5: Array access: Offset: 0 Size: [0, 8388607] by call to `BN_rshift1` 
    362.           return 0;
    363.       a->neg = 0;
    364.       a->d[0] = w;
               ^
    365.       a->top = (w ? 1 : 0);
    366.       a->flags &= ~BN_FLG_FIXED_TOP;

int BN_set_word(BIGNUM *a, BN_ULONG w)
{
    bn_check_top(a);
    if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL)
        return 0;
    a->neg = 0;
    a->d[0] = w;
    a->top = (w ? 1 : 0);
    a->flags &= ~BN_FLG_FIXED_TOP;
    bn_check_top(a);
    return 1;
}
['int DH_get_nid(const DH *dh)\n{\n    int nid;\n    if (BN_get_word(dh->g) != 2)\n        return NID_undef;\n    if (!BN_cmp(dh->p, &_bignum_ffdhe2048_p))\n        nid = NID_ffdhe2048;\n    else if (!BN_cmp(dh->p, &_bignum_ffdhe3072_p))\n        nid = NID_ffdhe3072;\n    else if (!BN_cmp(dh->p, &_bignum_ffdhe4096_p))\n        nid = NID_ffdhe4096;\n    else if (!BN_cmp(dh->p, &_bignum_ffdhe6144_p))\n        nid = NID_ffdhe6144;\n    else if (!BN_cmp(dh->p, &_bignum_ffdhe8192_p))\n        nid = NID_ffdhe8192;\n    else\n        return NID_undef;\n    if (dh->q != NULL) {\n        BIGNUM *q = BN_dup(dh->p);\n        if (q == NULL || !BN_rshift1(q, q) || !BN_cmp(dh->q, q))\n            nid = NID_undef;\n        BN_free(q);\n    }\n    return nid;\n}', 'BIGNUM *BN_dup(const BIGNUM *a)\n{\n    BIGNUM *t;\n    if (a == NULL)\n        return NULL;\n    bn_check_top(a);\n    t = BN_get_flags(a, BN_FLG_SECURE) ? BN_secure_new() : BN_new();\n    if (t == NULL)\n        return NULL;\n    if (!BN_copy(t, a)) {\n        BN_free(t);\n        return NULL;\n    }\n    bn_check_top(t);\n    return t;\n}', 'BIGNUM *BN_copy(BIGNUM *a, const BIGNUM *b)\n{\n    bn_check_top(b);\n    if (a == b)\n        return a;\n    if (bn_wexpand(a, b->top) == NULL)\n        return NULL;\n    if (b->top > 0)\n        memcpy(a->d, b->d, sizeof(b->d[0]) * b->top);\n    a->neg = b->neg;\n    a->top = b->top;\n    a->flags |= b->flags & BN_FLG_FIXED_TOP;\n    bn_check_top(a);\n    return a;\n}', 'int BN_rshift1(BIGNUM *r, const BIGNUM *a)\n{\n    BN_ULONG *ap, *rp, t, c;\n    int i, j;\n    bn_check_top(r);\n    bn_check_top(a);\n    if (BN_is_zero(a)) {\n        BN_zero(r);\n        return 1;\n    }\n    i = a->top;\n    ap = a->d;\n    j = i - (ap[i - 1] == 1);\n    if (a != r) {\n        if (bn_wexpand(r, j) == NULL)\n            return 0;\n        r->neg = a->neg;\n    }\n    rp = r->d;\n    t = ap[--i];\n    c = (t & 1) ? BN_TBIT : 0;\n    if (t >>= 1)\n        rp[i] = t;\n    while (i > 0) {\n        t = ap[--i];\n        rp[i] = ((t >> 1) & BN_MASK2) | c;\n        c = (t & 1) ? BN_TBIT : 0;\n    }\n    r->top = j;\n    if (!r->top)\n        r->neg = 0;\n    bn_check_top(r);\n    return 1;\n}', 'int BN_set_word(BIGNUM *a, BN_ULONG w)\n{\n    bn_check_top(a);\n    if (bn_expand(a, (int)sizeof(BN_ULONG) * 8) == NULL)\n        return 0;\n    a->neg = 0;\n    a->d[0] = w;\n    a->top = (w ? 1 : 0);\n    a->flags &= ~BN_FLG_FIXED_TOP;\n    bn_check_top(a);\n    return 1;\n}', 'static ossl_inline BIGNUM *bn_expand(BIGNUM *a, int bits)\n{\n    if (bits > (INT_MAX - BN_BITS2 + 1))\n        return NULL;\n    if (((bits+BN_BITS2-1)/BN_BITS2) <= (a)->dmax)\n        return a;\n    return bn_expand2((a),(bits+BN_BITS2-1)/BN_BITS2);\n}']