Skip to content

Commit

Permalink
Added checking for buflen overflow due to MAX_MISALIGNMENT.
Browse files Browse the repository at this point in the history
Reviewed-by: Tomas Mraz <tomas@openssl.org>
Reviewed-by: Paul Dale <pauli@openssl.org>
(Merged from #17646)
  • Loading branch information
heavycrystal authored and paulidale committed Feb 11, 2022
1 parent 649999d commit 378c50f
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 2 deletions.
8 changes: 6 additions & 2 deletions apps/speed.c
Original file line number Diff line number Diff line change
Expand Up @@ -456,7 +456,7 @@ static const OPT_PAIR sm2_choices[SM2_NUM] = {
static double sm2_results[SM2_NUM][2]; /* 2 ops: sign then verify */
#endif /* OPENSSL_NO_SM2 */

#define COND(unused_cond) (run && count < 0x7fffffff)
#define COND(unused_cond) (run && count < INT_MAX)
#define COUNT(d) (count)

typedef struct loopargs_st {
Expand Down Expand Up @@ -1779,6 +1779,10 @@ int speed_main(int argc, char **argv)
buflen = lengths[size_num - 1];
if (buflen < 36) /* size of random vector in RSA benchmark */
buflen = 36;
if (INT_MAX - (MAX_MISALIGNMENT + 1) < buflen) {
BIO_printf(bio_err, "Error: buffer size too large\n");
goto end;
}
buflen += MAX_MISALIGNMENT + 1;
loopargs[i].buf_malloc = app_malloc(buflen, "input buffer");
loopargs[i].buf2_malloc = app_malloc(buflen, "input buffer");
Expand Down Expand Up @@ -3613,7 +3617,7 @@ static void multiblock_speed(const EVP_CIPHER *evp_cipher, int lengths_single,
for (j = 0; j < num; j++) {
print_message(alg_name, 0, mblengths[j], seconds->sym);
Time_F(START);
for (count = 0; run && count < 0x7fffffff; count++) {
for (count = 0; run && count < INT_MAX; count++) {
unsigned char aad[EVP_AEAD_TLS1_AAD_LEN];
EVP_CTRL_TLS1_1_MULTIBLOCK_PARAM mb_param;
size_t len = mblengths[j];
Expand Down
2 changes: 2 additions & 0 deletions doc/man1/openssl-speed.pod.in
Original file line number Diff line number Diff line change
Expand Up @@ -101,6 +101,8 @@ Run benchmarks for I<num> seconds.
=item B<-bytes> I<num>

Run benchmarks on I<num>-byte buffers. Affects ciphers, digests and the CSPRNG.
The limit on the size of the buffer is INT_MAX - 64 bytes, which for a 32-bit
int would be 2147483583 bytes.

=item B<-mr>

Expand Down

0 comments on commit 378c50f

Please sign in to comment.