From 22e0272063d2770d8db27a8511ac33bba49d4ee8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 1 Sep 2020 09:26:04 +0200 Subject: [PATCH 1/3] Properly format 2037-pk11_numbits-crash-test.pkt file --- .../pkcs11/2037-pk11_numbits-crash-test.pkt | 40 +++++++++---------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/bin/tests/system/pkcs11/2037-pk11_numbits-crash-test.pkt b/bin/tests/system/pkcs11/2037-pk11_numbits-crash-test.pkt index 77d87f68ed..09b06f0739 100644 --- a/bin/tests/system/pkcs11/2037-pk11_numbits-crash-test.pkt +++ b/bin/tests/system/pkcs11/2037-pk11_numbits-crash-test.pkt @@ -1,20 +1,20 @@ -00000000: 0137 edda 2800 0001 0000 0001 0000 0972 .7..(..........r -00000010: 7361 7368 6132 3536 0765 7861 6d70 6c65 sasha256.example -00000020: 0000 0600 01c0 0c00 3000 0100 0001 2c01 ........0.....,. -00000030: 0801 0003 0803 0100 0100 0000 0000 0000 ................ -00000040: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000050: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000060: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000070: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000080: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000090: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -000000a0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -000000b0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -000000c0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -000000d0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -000000e0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -000000f0: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000100: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000110: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000120: 0000 0000 0000 0000 0000 0000 0000 0000 ................ -00000130: 0000 0000 0000 0000 00 ......... +edda 2800 0001 0000 0001 0000 0972 7361 +7368 6132 3536 0765 7861 6d70 6c65 0000 +0600 01c0 0c00 3000 0100 0001 2c01 0801 +0003 0803 0100 0100 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 0000 0000 0000 0000 0000 +0000 0000 0000 00 From dd46559a19ddc3b605c78e9ef1a79b1cd07149bc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Sur=C3=BD?= Date: Tue, 1 Sep 2020 09:37:05 +0200 Subject: [PATCH 2/3] Add `-r ` option to packet.pl For some tests, we need to send big data streams (for TCP) or repeated packets (for UDP), this commits adds `-r` option to packet.pl that sends the same input times using the specified protocol. --- bin/tests/system/packet.pl | 60 +++++------------- .../tcp/1996-alloc_dnsbuf-crash-test.pkt | Bin 31 -> 0 bytes 2 files changed, 17 insertions(+), 43 deletions(-) delete mode 100644 bin/tests/system/tcp/1996-alloc_dnsbuf-crash-test.pkt diff --git a/bin/tests/system/packet.pl b/bin/tests/system/packet.pl index 30500630ec..28d6a0987a 100644 --- a/bin/tests/system/packet.pl +++ b/bin/tests/system/packet.pl @@ -14,7 +14,7 @@ # the standard input, in the form of a series of bytes in hexadecimal. # Whitespace is ignored, as is anything following a '#' symbol. # -# For example, the following input would generate normal query for +# For example, the following input would generate normal query for # isc.org/NS/IN": # # # QID: @@ -31,7 +31,7 @@ # Note that we do not wait for a response for the server. This is simply # a way of injecting arbitrary packets to test server resposnes. # -# Usage: packet.pl [-a
] [-p ] [-t (udp|tcp)] [filename] +# Usage: packet.pl [-a
] [-p ] [-t (udp|tcp)] [-r ] [filename] # # If not specified, address defaults to 127.0.0.1, port to 53, protocol # to udp, and file to stdin. @@ -46,12 +46,12 @@ use IO::File; use IO::Socket; sub usage { - print ("Usage: packet.pl [-a address] [-p port] [-t (tcp|udp)] -d [file]\n"); + print ("Usage: packet.pl [-a address] [-p port] [-t (tcp|udp)] [-r ] [file]\n"); exit 1; } my %options={}; -getopts("a:dp:t:", \%options); +getopts("a:p:t:r:", \%options); my $addr = "127.0.0.1"; $addr = $options{a} if defined $options{a}; @@ -63,6 +63,9 @@ my $proto = "udp"; $proto = lc $options{t} if defined $options{t}; usage if ($proto !~ /^(udp|tcp)$/); +my $repeats = 1; +$repeats = $options{r} if defined $options{r}; + my $file = "STDIN"; if (@ARGV >= 1) { my $filename = shift @ARGV; @@ -82,52 +85,23 @@ my $data = pack("H*", $input); my $len = length $data; my $output = unpack("H*", $data); -print ("sending: $output\n"); +print ("sending $repeats time(s): $output\n"); my $sock = IO::Socket::INET->new(PeerAddr => $addr, PeerPort => $port, Proto => $proto,) or die "$!"; my $bytes; -if ($proto eq "udp") { - $bytes = $sock->send($data); -} else { - $bytes = $sock->syswrite(pack("n", $len), 2); - $bytes += $sock->syswrite($data, $len); +while ($repeats > 0) { + if ($proto eq "udp") { + $bytes = $sock->send($data); + } else { + $bytes = $sock->syswrite(pack("n", $len), 2); + $bytes += $sock->syswrite($data, $len); + } + + $repeats = $repeats - 1; } print ("sent $bytes bytes to $addr:$port\n"); -if (defined $options{d}) { - use Net::DNS; - use Net::DNS::Packet; - - my $rin; - my $rout; - $rin = ''; - vec($rin, fileno($sock), 1) = 1; - select($rout = $rin, undef, undef, 1); - if (vec($rout, fileno($sock), 1)) {{ - my $buf; - if ($proto eq "udp") { - $sock->recv($buf, 512); - } else { - my $n = $sock->sysread($buf, 2); - last unless $n == 2; - my $len = unpack("n", $buf); - $n = $sock->sysread($buf, $len); - last unless $n == $len; - } - - my $response; - if ($Net::DNS::VERSION > 0.68) { - $response = new Net::DNS::Packet(\$buf, 0); - $@ and die $@; - } else { - my $err; - ($response, $err) = new Net::DNS::Packet(\$buf, 0); - $err and die $err; - } - $response->print; - }} -} $sock->close; close $file; diff --git a/bin/tests/system/tcp/1996-alloc_dnsbuf-crash-test.pkt b/bin/tests/system/tcp/1996-alloc_dnsbuf-crash-test.pkt deleted file mode 100644 index b723cef1d95d5cfc81119dd8202dc87868d83a80..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 31 gcmZROWdH$2Fv-ANUS7_eS)9zAUzE Date: Tue, 1 Sep 2020 09:37:05 +0200 Subject: [PATCH 3/3] Multiply 1996-alloc_dnsbuf-crash-test.pkt by 300000 via TCP The test for assertion failure via large TCP packet needs to be repeated multiple times (we use 300000). This commit fixes the input file to be properly hexlified and uses the new packet.pl -r feature to send it 300000 times via TCP. --- .../system/tcp/1996-alloc_dnsbuf-crash-test.pkt | 12 ++++++++++++ bin/tests/system/tcp/tests.sh | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) create mode 100644 bin/tests/system/tcp/1996-alloc_dnsbuf-crash-test.pkt diff --git a/bin/tests/system/tcp/1996-alloc_dnsbuf-crash-test.pkt b/bin/tests/system/tcp/1996-alloc_dnsbuf-crash-test.pkt new file mode 100644 index 0000000000..7520c3a35f --- /dev/null +++ b/bin/tests/system/tcp/1996-alloc_dnsbuf-crash-test.pkt @@ -0,0 +1,12 @@ +# Transaction ID +0001 +# Standard query +0000 +# Questions: 1, Additional: 1 +0001 0000 0000 0000 +# QNAME: www.isc.org +03 697363 03 6F7267 00 +# Type: AXFR +00fc +# Class: IN +0001 diff --git a/bin/tests/system/tcp/tests.sh b/bin/tests/system/tcp/tests.sh index af92b95d74..20d72c610a 100644 --- a/bin/tests/system/tcp/tests.sh +++ b/bin/tests/system/tcp/tests.sh @@ -186,7 +186,7 @@ status=$((status + ret)) n=$((n + 1)) echo_i "checking that BIND 9 doesn't crash on long TCP messages ($n)" ret=0 -$PERL ../packet.pl -a "10.53.0.1" -p "${PORT}" -t udp 1996-alloc_dnsbuf-crash-test.pkt || ret=1 +$PERL ../packet.pl -a "10.53.0.1" -p "${PORT}" -t tcp -r 300000 1996-alloc_dnsbuf-crash-test.pkt || ret=1 dig_with_opts +tcp @10.53.0.1 txt.example > dig.out.test$n || ret=1 if [ $ret != 0 ]; then echo_i "failed"; fi status=$((status + ret))