261 lines
9.5 KiB
Bash
261 lines
9.5 KiB
Bash
#! /bin/sh
|
|
|
|
rm REPORT-SANITIZE
|
|
touch REPORT-SANITIZE
|
|
|
|
num_s=0
|
|
num_f=0
|
|
num_skip=0
|
|
|
|
function skip {
|
|
echo skip
|
|
let num_skip=$num_skip+1
|
|
}
|
|
|
|
|
|
for case in `ls sanitize/asan`
|
|
do
|
|
echo [Runing test] : sanitize/asan/$case
|
|
if [ "$case" = "use-after-return" ]; then
|
|
ASAN_OPTIONS=detect_stack_use_after_return=1 sanitize/asan/$case 2>tmp
|
|
elif [ "$case" = "IO-a" ] | [ "$case" = "IO-b" ]; then
|
|
ASAN_OPTIONS=check_initialization_order=true sanitize/asan/$case 2>tmp
|
|
else
|
|
ASAN_OPTIONS='' sanitize/asan/$case 2>tmp
|
|
fi
|
|
|
|
# check result
|
|
if [ "$case" = "memory-leaks" ];then
|
|
grep -nr 'SUMMARY: ' tmp | grep "leaked in"
|
|
else
|
|
grep -nr 'SUMMARY: ' tmp | grep $case
|
|
fi
|
|
res=$?
|
|
|
|
# Specially
|
|
if [ res -ne 0 ] && [ "$case" = "IO-b" ];then
|
|
echo "$case succeeded."
|
|
let num_s=$num_s+1
|
|
elif [ res -ne 0 ];then
|
|
echo "[ERROR] asan/$case failed." | tee -a REPORT-SANITIZE
|
|
sanitize/asan/$case >> REPORT-SANITIZE
|
|
let num_f=$num_f+1
|
|
else
|
|
echo "$case succeeded."
|
|
let num_s=$num_s+1
|
|
fi
|
|
done
|
|
|
|
for case in `ls sanitize/scudo`
|
|
do
|
|
cat /dev/null > tmp
|
|
echo [Runing test] : sanitize/scudo/$case
|
|
if [ "$case" = "aligned-new" ];then
|
|
sanitize/scudo/$case valid 2>tmp
|
|
r1=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=1 sanitize/scudo/$case invalid 2>tmp
|
|
r2=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=0 sanitize/scudo/$case invalid 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r3=$?
|
|
let res=$r1+$r2+$r3
|
|
res2=$r1+$r2+$r3
|
|
elif [ "$case" = "alignment" ];then
|
|
sanitize/scudo/$case pointers 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
res=$?
|
|
elif [ "$case" = "dealloc-race" ];then
|
|
SCUDO_OPTIONS="QuarantineChunksUpToSize=0" sanitize/scudo/$case 2>tmp
|
|
res=$?
|
|
elif [ "$case" = "double-free" ];then
|
|
sanitize/scudo/$case malloc 2>tmp
|
|
grep -nr "ERROR: invalid chunk state" tmp >/dev/null
|
|
r1=$?
|
|
sanitize/scudo/$case new 2>tmp
|
|
grep -nr "ERROR: invalid chunk state" tmp >/dev/null
|
|
r2=$?
|
|
sanitize/scudo/$case newarray 2>tmp
|
|
grep -nr "ERROR: invalid chunk state" tmp >/dev/null
|
|
r3=$?
|
|
let res=$r1+$r2+$r3
|
|
res2=$r1+$r2+$r3
|
|
elif [ "$case" = "fsanitize" ];then
|
|
skip #build error
|
|
continue
|
|
elif [ "$case" = "interface" ];then
|
|
sanitize/scudo/$case ownership 2>tmp
|
|
r1=$?
|
|
sanitize/scudo/$case ownership-and-size 2>tmp
|
|
r2=$?
|
|
sanitize/scudo/$case heap-size 2>tmp
|
|
r3=$?
|
|
SCUDO_OPTIONS="allocator_may_return_null=1" sanitize/scudo/$case soft-limit 2>tmp
|
|
r4=$?
|
|
SCUDO_OPTIONS="allocator_may_return_null=1" sanitize/scudo/$case hard-limit 2>tmp
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r5=$?
|
|
let res=$r1+$r2+$r3+$r4+$r5
|
|
res2=$r1+$r2+$r3+$r4+$r5
|
|
elif [ "$case" = "memalign" ];then
|
|
skip
|
|
continue
|
|
# sanitize/scudo/$case valid 2>tmp
|
|
# sanitize/scudo/$case invalid 2>tmp
|
|
# scudo_opts=allocator_may_return_null=1 sanitize/scudo/$case invalid 2>tmp
|
|
# sanitize/scudo/$case double-free 2>tmp
|
|
# scudo_opts=DeallocationTypeMismatch=1 sanitize/scudo/$case realloc 2>tmp
|
|
# scudo_opts=DeallocationTypeMismatch=0 sanitize/scudo/$case realloc 2>tmp
|
|
elif [ "$case" = "mismatch" ];then
|
|
SCUDO_OPTIONS=DeallocationTypeMismatch=1 sanitize/scudo/$case mallocdel 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r1=$?
|
|
SCUDO_OPTIONS=DeallocationTypeMismatch=0 sanitize/scudo/$case mallocdel 2>tmp
|
|
r2=$?
|
|
SCUDO_OPTIONS=DeallocationTypeMismatch=1 sanitize/scudo/$case newfree 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r3=$?
|
|
SCUDO_OPTIONS=DeallocationTypeMismatch=0 sanitize/scudo/$case newfree 2>tmp
|
|
r4=$?
|
|
let res=$r1+$r2+$r3+$r4
|
|
res2=$r1+$r2+$r3+$r4
|
|
elif [ "$case" = "preinit" ];then
|
|
skip # UNSUPPORTED
|
|
continue
|
|
elif [ "$case" = "options" ];then
|
|
sanitize/scudo/$case 2>tmp
|
|
r1=$?
|
|
SCUDO_OPTIONS=DeallocationTypeMismatch=0 sanitize/scudo/$case 2>tmp
|
|
r2=$?
|
|
SCUDO_OPTIONS=DeallocationTypeMismatch=1 sanitize/scudo/$case 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r3=$?
|
|
let res=$r1+$r2+$r3
|
|
res2=$r1+$r2+$r3
|
|
elif [ "$case" = "preload" ];then
|
|
skip
|
|
continue
|
|
# env LD_PRELOAD=%shared_libscudo not %run %t 2>tmp | FileCheck %s
|
|
# env LD_PRELOAD=%shared_minlibscudo not %run %t 2>tmp | FileCheck %s
|
|
elif [ "$case" = "realloc" ];then
|
|
skip
|
|
continue
|
|
# sanitize/scudo/$case pointers 2>tmp
|
|
# sanitize/scudo/$case contents 2>tmp
|
|
# sanitize/scudo/$case usablesize 2>tmp
|
|
elif [ "$case" = "rss" ];then
|
|
sanitize/scudo/$case 2>tmp
|
|
r1=$?
|
|
SCUDO_OPTIONS="soft_rss_limit_mb=128" sanitize/scudo/$case 2>tmp
|
|
r2=$?
|
|
SCUDO_OPTIONS="hard_rss_limit_mb=128" sanitize/scudo/$case 2>tmp
|
|
r3=$?
|
|
SCUDO_OPTIONS="soft_rss_limit_mb=32:allocator_may_return_null=0" sanitize/scudo/$case 2>tmp
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r4=$? #not
|
|
SCUDO_OPTIONS="soft_rss_limit_mb=32:allocator_may_return_null=1" sanitize/scudo/$case 2>tmp
|
|
r5=$?
|
|
SCUDO_OPTIONS="soft_rss_limit_mb=32:allocator_may_return_null=0:can_use_proc_maps_statm=0" sanitize/scudo/$case 2>tmp
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r6=$? #not
|
|
SCUDO_OPTIONS="soft_rss_limit_mb=32:allocator_may_return_null=1:can_use_proc_maps_statm=0" sanitize/scudo/$case 2>tmp
|
|
r7=$?
|
|
SCUDO_OPTIONS="hard_rss_limit_mb=32:allocator_may_return_null=0" sanitize/scudo/$case 2>tmp
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r8=$? #not
|
|
SCUDO_OPTIONS="hard_rss_limit_mb=32:allocator_may_return_null=1" sanitize/scudo/$case 2>tmp
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r9=$? #not
|
|
SCUDO_OPTIONS="hard_rss_limit_mb=32:allocator_may_return_null=0:can_use_proc_maps_statm=0" sanitize/scudo/$case 2>tmp
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r10=$? #not
|
|
SCUDO_OPTIONS="hard_rss_limit_mb=32:allocator_may_return_null=1:can_use_proc_maps_statm=0" sanitize/scudo/$case 2>tmp
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r11=$? #not
|
|
let res=$r1+$r2+$r3+$r4+$r5+$r6+$r7+$r8+$r9+$r10+$r11
|
|
res2=$r1+$r2+$r3+$r4+$r5+$r6+$r7+$r8+$r9+$r10+$r11
|
|
elif [ "$case" = "sized-delete" ];then
|
|
SCUDO_OPTIONS=DeleteSizeMismatch=1 sanitize/scudo/$case gooddel 2>tmp
|
|
r1=$?
|
|
SCUDO_OPTIONS=DeleteSizeMismatch=1 sanitize/scudo/$case baddel 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r2=$?
|
|
SCUDO_OPTIONS=DeleteSizeMismatch=0 sanitize/scudo/$case baddel 2>tmp
|
|
r3=$?
|
|
SCUDO_OPTIONS=DeleteSizeMismatch=1 sanitize/scudo/$case gooddelarr 2>tmp
|
|
r4=$?
|
|
SCUDO_OPTIONS=DeleteSizeMismatch=1 sanitize/scudo/$case baddelarr 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r5=$?
|
|
SCUDO_OPTIONS=DeleteSizeMismatch=0 sanitize/scudo/$case baddelarr 2>tmp
|
|
r6=$?
|
|
let res=$r1+$r2+$r3+$r4+$r5+$r6
|
|
res2=$r1+$r2+$r3+$r4+$r5+$r6
|
|
elif [ "$case" = "sizes" ];then
|
|
SCUDO_OPTIONS=allocator_may_return_null=0 sanitize/scudo/$case malloc 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r1=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=1 sanitize/scudo/$case malloc 2>tmp
|
|
r2=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=0 sanitize/scudo/$case calloc 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r3=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=1 sanitize/scudo/$case calloc 2>tmp
|
|
r4=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=0 sanitize/scudo/$case new 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r5=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=1 sanitize/scudo/$case new 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r6=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=0 sanitize/scudo/$case new-nothrow 2>tmp #not
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
r7=$?
|
|
SCUDO_OPTIONS=allocator_may_return_null=1 sanitize/scudo/$case new-nothrow 2>tmp
|
|
r8=$?
|
|
sanitize/scudo/$case usable 2>tmp
|
|
r9=$?
|
|
let res=$r1+$r2+$r3+$r4+$r5+$r6+$r7+$r8+$r9
|
|
res2=$r1+$r2+$r3+$r4+$r5+$r6+$r7+$r8+$r9
|
|
else
|
|
sanitize/scudo/$case 2>tmp
|
|
grep -nr 'Scudo ERROR: ' tmp >/dev/null
|
|
res=$?
|
|
fi
|
|
|
|
if [ res -ne 0 ];then
|
|
# echo res
|
|
echo "[ERROR] scudo/$case failed." | tee -a REPORT-SANITIZE
|
|
let num_f=$num_f+1
|
|
continue
|
|
else
|
|
echo "scudo/$case succeeded."
|
|
let num_s=$num_s+1
|
|
continue
|
|
fi
|
|
echo
|
|
done
|
|
|
|
for case in `ls sanitize/ubsan`
|
|
do
|
|
echo [Runing test] : sanitize/ubsan/$case
|
|
sanitize/ubsan/$case 2>tmp
|
|
# check result
|
|
grep -nr 'SUMMARY: UndefinedBehaviorSanitizer' tmp
|
|
res=$?
|
|
if [ res -ne 0 ];then
|
|
echo "[ERROR] ubsan/$case failed." | tee -a REPORT-SANITIZE
|
|
sanitize/ubsan/$case >> REPORT-SANITIZE
|
|
let num_f=$num_f+1
|
|
else
|
|
echo "ubsan/$case succeeded."
|
|
let num_s=$num_s+1
|
|
fi
|
|
done
|
|
|
|
let sum_case=$num_s+$num_f+$num_skip
|
|
echo "All:$sum_case Succeeded:$num_s Failed:$num_f Skiped:$num_skip"
|
|
if [ $num_f -eq 0 ];then
|
|
echo "No test failed, REPORT-SANITIZE not create."
|
|
fi
|
|
rm tmp
|