This function -- a mock replacement used only for fuzzing -- would
have a buffer overflow if it got an RSA key whose modulus was under
20 bytes long.
Fortunately, Tor itself does not appear to have a bug here.
Fixes bug 24247; bugfix on 0.3.0.3-alpha when fuzzing was
introduced. Found by OSS-Fuzz; this is OSS-Fuzz issue 4177.
--- /dev/null
+ o Minor bugfixes (fuzzing):
+ - Fix a bug in our fuzzing mock replacement for crypto_pk_checksig(), to
+ correctly handle cases where a caller gives it an RSA key of under 160
+ bits. (This is not actually a bug in Tor itself, but wrather in our
+ fuzzing code.) Fixes bug 24247; bugfix on 0.3.0.3-alpha.
+ Found by OSS-Fuzz as issue 4177.
(void)fromlen;
/* We could look at from[0..fromlen-1] ... */
tor_assert(tolen >= crypto_pk_keysize(env));
- memset(to, 0x01, 20);
- return 20;
+ size_t siglen = MIN(20, crypto_pk_keysize(env));
+ memset(to, 0x01, siglen);
+ return (int)siglen;
}
static int