aboutsummaryrefslogtreecommitdiffstats
path: root/fuzz
diff options
context:
space:
mode:
authorKurt Roeckx <kurt@roeckx.be>2017-03-13 22:43:36 +0100
committerKurt Roeckx <kurt@roeckx.be>2017-04-16 19:30:15 +0200
commitff54cd9beb07e47c48dac02d3006b0fbe5fc6cc2 (patch)
treed5bcae1b697447e132bb976b9a9e69303d3af8aa /fuzz
parent14a6570f318562faf850f842ef3ce56f54ddc890 (diff)
downloadopenssl-ff54cd9beb07e47c48dac02d3006b0fbe5fc6cc2.tar.gz
Optionally check for early data
This adds a way to use the last byte of the buffer to change the behavior of the server. The last byte is used so that the existing corpus can be reused either without changing it, or just adding a single byte, and that it can still be used by other projects. Reviewed-by: Rich Salz <rsalz@openssl.org> Reviewed-by: Andy Polyakov <appro@openssl.org> GH: #2683
Diffstat (limited to 'fuzz')
-rw-r--r--fuzz/server.c20
1 files changed, 19 insertions, 1 deletions
diff --git a/fuzz/server.c b/fuzz/server.c
index 8c5e2d8d4a..1a6dd2cdfd 100644
--- a/fuzz/server.c
+++ b/fuzz/server.c
@@ -530,8 +530,9 @@ int FuzzerTestOneInput(const uint8_t *buf, size_t len)
#ifndef OPENSSL_NO_DSA
DSA *dsakey = NULL;
#endif
+ uint8_t opt;
- if (len == 0)
+ if (len < 2)
return 0;
/*
@@ -615,7 +616,24 @@ int FuzzerTestOneInput(const uint8_t *buf, size_t len)
out = BIO_new(BIO_s_mem());
SSL_set_bio(server, in, out);
SSL_set_accept_state(server);
+
+ opt = (uint8_t)buf[len-1];
+ len--;
+
OPENSSL_assert((size_t)BIO_write(in, buf, len) == len);
+
+ if ((opt & 0x01) != 0)
+ {
+ do {
+ char early_buf[16384];
+ size_t early_len;
+ ret = SSL_read_early_data(server, early_buf, sizeof(early_buf), &early_len);
+
+ if (ret != SSL_READ_EARLY_DATA_SUCCESS)
+ break;
+ } while (1);
+ }
+
if (SSL_do_handshake(server) == 1) {
/* Keep reading application data until error or EOF. */
uint8_t tmp[1024];