mirror of
https://github.com/NLnetLabs/unbound.git
synced 2026-09-27 12:14:54 +02:00
Algorithmic Complexity Attacks on DNSSEC. Thanks to Zuyao Xu and Xiang Li from Nankai University, AOSP Lab for the report. In addition, thanks to Qifan Zhang from Palo Alto Networks for a complimentary report.
168 lines
3.8 KiB
Plaintext
168 lines
3.8 KiB
Plaintext
# #-- 03-testbound.test --#
|
|
# source the master var file when it's there
|
|
[ -f ../.tpkg.var.master ] && source ../.tpkg.var.master
|
|
# use .tpkg.var.test for in test variable passing
|
|
[ -f .tpkg.var.test ] && source .tpkg.var.test
|
|
|
|
. ../common.sh
|
|
PRE="../.."
|
|
get_make
|
|
(cd $PRE ; $MAKE testbound)
|
|
exitval=0
|
|
# quiet="" to make verbose
|
|
|
|
if test -f $PRE/unbound_do_valgrind_in_test; then
|
|
do_valgrind=yes
|
|
else
|
|
do_valgrind=no
|
|
fi
|
|
VALGRIND_FLAGS="--leak-check=full --show-leak-kinds=all"
|
|
# valgrind mode for debug
|
|
#if grep "staticexe=-static" $PRE/Makefile >/dev/null 2>&1; then
|
|
# if test -x "`which valgrind`"; then
|
|
# do_valgrind=yes
|
|
# fi
|
|
#fi
|
|
|
|
# self-test (unit test of testbound)
|
|
if test $do_valgrind = "yes"; then
|
|
echo "valgrind yes"
|
|
echo
|
|
if (valgrind $VALGRIND_FLAGS $PRE/testbound -s >tmpout 2>&1;); then
|
|
echo "selftest OK "
|
|
else
|
|
echo "selftest FAILED"
|
|
exit 1
|
|
fi
|
|
if grep "All heap blocks were freed -- no leaks are possible" tmpout; then
|
|
: # clean
|
|
else
|
|
cat tmpout
|
|
echo "Memory leaked in selftest"
|
|
grep "in use at exit" tmpout
|
|
exit 1
|
|
fi
|
|
if grep "ERROR SUMMARY: 0 errors from 0 contexts" tmpout; then
|
|
: # clean
|
|
else
|
|
cat tmpout
|
|
echo "Errors in selftest"
|
|
grep "ERROR SUMMARY" tmpout
|
|
exit 1
|
|
fi
|
|
else
|
|
if ($PRE/testbound -s >/dev/null 2>&1;); then
|
|
echo "selftest OK "
|
|
else
|
|
echo "selftest FAILED"
|
|
exit 1
|
|
fi
|
|
fi
|
|
|
|
|
|
# the .crpl are not always supported and need checking for SHA256 and GOST
|
|
# support.
|
|
# the .rpl should work on any system (portable).
|
|
for input in $PRE/testdata/*.rpl $PRE/testdata/*.crpl; do
|
|
header=`grep SCENARIO_BEGIN $input | head -1 | sed -e 's/SCENARIO_BEGIN //'`
|
|
cleaninput=`echo $input | sed -e "s?$PRE/testdata/??"`
|
|
|
|
# detect if SHA256 is needed
|
|
if echo $cleaninput | grep sha2 >/dev/null 2>&1; then
|
|
if $PRE/testbound -2 >/dev/null 2>&1; then
|
|
: # the SHA256 is supported
|
|
else
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
# detect if GOST is needed
|
|
if echo $cleaninput | grep gost >/dev/null 2>&1; then
|
|
if $PRE/testbound -g >/dev/null 2>&1; then
|
|
: # GOST is supported
|
|
else
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
# detect if ECDSA is needed
|
|
if echo $cleaninput | grep ecdsa >/dev/null 2>&1; then
|
|
if $PRE/testbound -e >/dev/null 2>&1; then
|
|
: # ECDSA is supported
|
|
else
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
# detect if CLIENT_SUBNET is needed
|
|
if echo $cleaninput | grep subnet >/dev/null 2>&1; then
|
|
if $PRE/testbound -c >/dev/null 2>&1; then
|
|
: # CLIENT_SUBNET is supported
|
|
else
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
# detect if IPSECMOD is needed
|
|
if echo $cleaninput | grep ipsecmod >/dev/null 2>&1; then
|
|
if $PRE/testbound -i >/dev/null 2>&1; then
|
|
: # IPSECMOD is supported
|
|
else
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
# detect if cachedb is needed
|
|
if echo $cleaninput | grep cachedb >/dev/null 2>&1; then
|
|
if grep "define USE_CACHEDB 1" $PRE/config.h >/dev/null 2>&1; then
|
|
: # CACHEDB is supported
|
|
else
|
|
continue
|
|
fi
|
|
fi
|
|
|
|
if test $do_valgrind = "yes"; then
|
|
echo
|
|
if (valgrind $VALGRIND_FLAGS $PRE/testbound -p $input >tmpout 2>&1;); then
|
|
echo " OK $cleaninput: $header"
|
|
else
|
|
echo "FAILED $cleaninput: $header"
|
|
exitval=1
|
|
fi
|
|
if grep "All heap blocks were freed -- no leaks are possible" tmpout; then
|
|
: # clean
|
|
else
|
|
grep "^==" tmpout
|
|
echo "Memory leaked in $cleaninput"
|
|
grep "in use at exit" tmpout
|
|
exitval=1
|
|
fi
|
|
if grep "ERROR SUMMARY: 0 errors from 0 contexts" tmpout; then
|
|
: # clean
|
|
else
|
|
grep "^==" tmpout
|
|
echo "Errors in $cleaninput"
|
|
grep "ERROR SUMMARY" tmpout
|
|
exitval=1
|
|
fi
|
|
else
|
|
# do valgrind=no
|
|
if ($PRE/testbound -p $input >/dev/null 2>&1;); then
|
|
echo " OK $cleaninput: $header"
|
|
else
|
|
echo "FAILED $cleaninput: $header"
|
|
exitval=1
|
|
fi
|
|
fi
|
|
if test -f ublocktrace.0; then
|
|
if $PRE/lock-verify ublocktrace.*; then
|
|
#echo "lock-verify test $input worked."
|
|
i=i
|
|
else
|
|
echo "lock-verify test $input failed."
|
|
exitval=1
|
|
fi
|
|
fi
|
|
done
|
|
exit $exitval
|