diff options
author | Matt Johnston <matt@ucc.asn.au> | 2017-05-23 22:43:34 +0800 |
---|---|---|
committer | Matt Johnston <matt@ucc.asn.au> | 2017-05-23 22:43:34 +0800 |
commit | 0363d3c32e08d0c2d5ed0035a1b045259677f319 (patch) | |
tree | e1f283e117ce9c15e59a58e79656e249d35b20fb /fuzzer-pubkey.c | |
parent | a582c4cdb60dbba5c34e33c0e434bdc52f09ad2c (diff) |
fuzzer-pubkey
--HG--
branch : fuzz
Diffstat (limited to 'fuzzer-pubkey.c')
-rw-r--r-- | fuzzer-pubkey.c | 49 |
1 files changed, 49 insertions, 0 deletions
diff --git a/fuzzer-pubkey.c b/fuzzer-pubkey.c new file mode 100644 index 0000000..bed0798 --- /dev/null +++ b/fuzzer-pubkey.c @@ -0,0 +1,49 @@ +#include "fuzz.h" +#include "session.h" +#include "fuzz-wrapfd.h" +#include "debug.h" + +static void setup_fuzzer(void) { + common_setup_fuzzer(); +} + +int LLVMFuzzerTestOneInput(const uint8_t *Data, size_t Size) { + static int once = 0; + if (!once) { + setup_fuzzer(); + once = 1; + } + + m_malloc_set_epoch(1); + + fuzz_seed(); + fuzz.input->data = (unsigned char*)Data; + fuzz.input->len = Size; + fuzz.input->size = Size; + fuzz.input->pos = 0; + + if (Size < 4) { + return 0; + } + + // choose a keytype based on input + uint8_t b = 0; + size_t i; + for (i = 0; i < Size; i++) { + b ^= Data[i]; + } + const char* algoname = fuzz_signkey_names[b%DROPBEAR_SIGNKEY_NUM_NAMED]; + const char* keyblob = "fakekeyblob"; + + if (setjmp(fuzz.jmp) == 0) { + fuzz_checkpubkey_line(fuzz.input, 5, "/home/me/authorized_keys", + algoname, strlen(algoname), + keyblob, strlen(keyblob)); + } else { + m_malloc_free_epoch(1); + TRACE(("dropbear_exit longjmped")) + // dropbear_exit jumped here + } + + return 0; +} |