crypto/rand/rand_lib.c:161: error: BUFFER_OVERRUN_L3
  Offset added: [0, 15] Size: [0, +oo] by call to `RAND_DRBG_generate`.
Showing all 9 steps of the trace


crypto/rand/rand_lib.c:149:1: Parameter `min_len`
147.   }
148.   
149. > size_t drbg_entropy_from_parent(RAND_DRBG *drbg,
150.                                   unsigned char **pout,
151.                                   int entropy, size_t min_len, size_t max_len)

crypto/rand/rand_lib.c:161:10: Call
159.   
160.       /* Get random from parent, include our state as additional input. */
161.       st = RAND_DRBG_generate(drbg->parent, drbg->randomness, min_len, 0,
                ^
162.                               (unsigned char *)drbg, sizeof(*drbg));
163.       if (st == 0)

crypto/rand/drbg_lib.c:248:1: Parameter `outlen`
  246.    * sent in |adin| and |adinlen|.
  247.    */
  248. > int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen,
  249.                          int prediction_resistance,
  250.                          const unsigned char *adin, size_t adinlen)

crypto/rand/drbg_lib.c:281:10: Call
  279.       }
  280.   
  281.       if (!ctr_generate(drbg, out, outlen, adin, adinlen)) {
                  ^
  282.           drbg->state = DRBG_ERROR;
  283.           RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_GENERATE_ERROR);

crypto/rand/drbg_rand.c:261:1: <Offset trace>
259.   }
260.   
261. > int ctr_generate(RAND_DRBG *drbg,
262.                    unsigned char *out, size_t outlen,
263.                    const unsigned char *adin, size_t adinlen)

crypto/rand/drbg_rand.c:261:1: Parameter `outlen`
    259.   }
    260.   
    261. > int ctr_generate(RAND_DRBG *drbg,
    262.                    unsigned char *out, size_t outlen,
    263.                    const unsigned char *adin, size_t adinlen)

crypto/rand/drbg_rand.c:261:1: <Length trace>
259.   }
260.   
261. > int ctr_generate(RAND_DRBG *drbg,
262.                    unsigned char *out, size_t outlen,
263.                    const unsigned char *adin, size_t adinlen)

crypto/rand/drbg_rand.c:261:1: Parameter `drbg->ctr.K[*]`
    259.   }
    260.   
    261. > int ctr_generate(RAND_DRBG *drbg,
    262.                    unsigned char *out, size_t outlen,
    263.                    const unsigned char *adin, size_t adinlen)

crypto/rand/drbg_rand.c:283:13: Array access: Offset added: [0, 15] Size: [0, +oo] by call to `RAND_DRBG_generate` 
    281.               /* Use K as temp space as it will be updated */
    282.               AES_encrypt(ctr->V, ctr->K, &ctr->ks);
    283.               memcpy(out, ctr->K, outlen);
                       ^
    284.               break;
    285.           }

int ctr_generate(RAND_DRBG *drbg,
                 unsigned char *out, size_t outlen,
                 const unsigned char *adin, size_t adinlen)
{
    RAND_DRBG_CTR *ctr = &drbg->ctr;
    if (adin != NULL && adinlen != 0) {
        ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0);
        if (drbg->flags & RAND_DRBG_FLAG_CTR_USE_DF) {
            adin = NULL;
            adinlen = 1;
        }
    } else {
        adinlen = 0;
    }
    for ( ; ; ) {
        inc_128(ctr);
        if (outlen < 16) {
            AES_encrypt(ctr->V, ctr->K, &ctr->ks);
            memcpy(out, ctr->K, outlen);
            break;
        }
        AES_encrypt(ctr->V, out, &ctr->ks);
        out += 16;
        outlen -= 16;
        if (outlen == 0)
            break;
    }
    ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0);
    return 1;
}
['size_t drbg_entropy_from_parent(RAND_DRBG *drbg,\n                                unsigned char **pout,\n                                int entropy, size_t min_len, size_t max_len)\n{\n    int st;\n    if (min_len > (size_t)drbg->size) {\n        min_len = drbg->size;\n    }\n    st = RAND_DRBG_generate(drbg->parent, drbg->randomness, min_len, 0,\n                            (unsigned char *)drbg, sizeof(*drbg));\n    if (st == 0)\n        return 0;\n    drbg->filled = 1;\n    return min_len;\n}', 'int RAND_DRBG_generate(RAND_DRBG *drbg, unsigned char *out, size_t outlen,\n                       int prediction_resistance,\n                       const unsigned char *adin, size_t adinlen)\n{\n    if (drbg->state == DRBG_ERROR) {\n        RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_IN_ERROR_STATE);\n        return 0;\n    }\n    if (drbg->state == DRBG_UNINITIALISED) {\n        RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_NOT_INSTANTIATED);\n        return 0;\n    }\n    if (outlen > drbg->max_request) {\n        RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_REQUEST_TOO_LARGE_FOR_DRBG);\n        return 0;\n    }\n    if (adinlen > drbg->max_adin) {\n        RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_ADDITIONAL_INPUT_TOO_LONG);\n        return 0;\n    }\n    if (drbg->reseed_counter >= drbg->reseed_interval)\n        drbg->state = DRBG_RESEED;\n    if (drbg->state == DRBG_RESEED || prediction_resistance) {\n        if (!RAND_DRBG_reseed(drbg, adin, adinlen)) {\n            RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_RESEED_ERROR);\n            return 0;\n        }\n        adin = NULL;\n        adinlen = 0;\n    }\n    if (!ctr_generate(drbg, out, outlen, adin, adinlen)) {\n        drbg->state = DRBG_ERROR;\n        RANDerr(RAND_F_RAND_DRBG_GENERATE, RAND_R_GENERATE_ERROR);\n        return 0;\n    }\n    if (drbg->reseed_counter >= drbg->reseed_interval)\n        drbg->state = DRBG_RESEED;\n    else\n        drbg->reseed_counter++;\n    return 1;\n}', 'int ctr_generate(RAND_DRBG *drbg,\n                 unsigned char *out, size_t outlen,\n                 const unsigned char *adin, size_t adinlen)\n{\n    RAND_DRBG_CTR *ctr = &drbg->ctr;\n    if (adin != NULL && adinlen != 0) {\n        ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0);\n        if (drbg->flags & RAND_DRBG_FLAG_CTR_USE_DF) {\n            adin = NULL;\n            adinlen = 1;\n        }\n    } else {\n        adinlen = 0;\n    }\n    for ( ; ; ) {\n        inc_128(ctr);\n        if (outlen < 16) {\n            AES_encrypt(ctr->V, ctr->K, &ctr->ks);\n            memcpy(out, ctr->K, outlen);\n            break;\n        }\n        AES_encrypt(ctr->V, out, &ctr->ks);\n        out += 16;\n        outlen -= 16;\n        if (outlen == 0)\n            break;\n    }\n    ctr_update(drbg, adin, adinlen, NULL, 0, NULL, 0);\n    return 1;\n}']