speed: range check the argument given to -multi
authorPauli <pauli@openssl.org>
Mon, 25 Oct 2021 01:16:01 +0000 (11:16 +1000)
committerPauli <pauli@openssl.org>
Tue, 26 Oct 2021 22:26:12 +0000 (08:26 +1000)
For machines where sizeof(size_t) == sizeof(int) there is a possible overflow
which could cause a crash.

For machines where sizeof(size_t) > sizeof(int), the existing checks adequately
detect the situation.

Fixes #16899

Reviewed-by: Tomas Mraz <tomas@openssl.org>
(Merged from https://github.com/openssl/openssl/pull/16904)

apps/speed.c

index 1e5295398f673e29640f46c5064ebe0632caf220..4dd9ce088515a9abc6abc083dca5ebd03157d180 100644 (file)
@@ -1540,6 +1540,10 @@ int speed_main(int argc, char **argv)
         case OPT_MULTI:
 #ifndef NO_FORK
             multi = atoi(opt_arg());
+            if ((size_t)multi >= SIZE_MAX / sizeof(int)) {
+                BIO_printf(bio_err, "%s: multi argument too large\n", prog);
+                return 0;
+            }
 #endif
             break;
         case OPT_ASYNCJOBS: