|
Packit |
40b132 |
#!/bin/bash
|
|
Packit |
40b132 |
#
|
|
Packit |
40b132 |
# This Source Code Form is subject to the terms of the Mozilla Public
|
|
Packit |
40b132 |
# License, v. 2.0. If a copy of the MPL was not distributed with this
|
|
Packit |
40b132 |
# file, You can obtain one at http://mozilla.org/MPL/2.0/.
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
#
|
|
Packit |
40b132 |
# mozilla/security/nss/tests/memleak/memleak.sh
|
|
Packit |
40b132 |
#
|
|
Packit |
40b132 |
# Script to test memory leaks in NSS
|
|
Packit |
40b132 |
#
|
|
Packit |
40b132 |
# needs to work on Solaris and Linux platforms, on others just print a message
|
|
Packit |
40b132 |
# that OS is not supported
|
|
Packit |
40b132 |
#
|
|
Packit |
40b132 |
# special strings
|
|
Packit |
40b132 |
# ---------------
|
|
Packit |
40b132 |
# FIXME ... known problems, search for this string
|
|
Packit |
40b132 |
# NOTE .... unexpected behavior
|
|
Packit |
40b132 |
#
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################# memleak_init #############################
|
|
Packit |
40b132 |
# local shell function to initialize this script
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
memleak_init()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
if [ -z "${INIT_SOURCED}" -o "${INIT_SOURCED}" != "TRUE" ]; then
|
|
Packit |
40b132 |
cd ../common
|
|
Packit |
40b132 |
. ./init.sh
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ ! -r ${CERT_LOG_FILE} ]; then
|
|
Packit |
40b132 |
cd ${QADIR}/cert
|
|
Packit |
40b132 |
. ./cert.sh
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
SCRIPTNAME="memleak.sh"
|
|
Packit |
40b132 |
if [ -z "${CLEANUP}" ] ; then
|
|
Packit |
40b132 |
CLEANUP="${SCRIPTNAME}"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
OLD_LIBRARY_PATH=${LD_LIBRARY_PATH}
|
|
Packit |
40b132 |
TMP_LIBDIR="${HOSTDIR}/tmp"
|
|
Packit |
40b132 |
TMP_STACKS="${HOSTDIR}/stacks"
|
|
Packit |
40b132 |
TMP_SORTED="${HOSTDIR}/sorted"
|
|
Packit |
40b132 |
TMP_COUNT="${HOSTDIR}/count"
|
|
Packit |
40b132 |
DBXOUT="${HOSTDIR}/dbxout"
|
|
Packit |
40b132 |
DBXERR="${HOSTDIR}/dbxerr"
|
|
Packit |
40b132 |
DBXCMD="${HOSTDIR}/dbxcmd"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
PORT=${PORT:-8443}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
MODE_LIST="NORMAL BYPASS FIPS"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
SERVER_DB="${HOSTDIR}/server_memleak"
|
|
Packit |
40b132 |
CLIENT_DB="${HOSTDIR}/client_memleak"
|
|
Packit |
40b132 |
cp -r ${HOSTDIR}/server ${SERVER_DB}
|
|
Packit |
40b132 |
cp -r ${HOSTDIR}/client ${CLIENT_DB}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
LOGDIR="${HOSTDIR}/memleak_logs"
|
|
Packit |
40b132 |
mkdir -p ${LOGDIR}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
FOUNDLEAKS="${LOGDIR}/foundleaks"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
REQUEST_FILE="${QADIR}/memleak/sslreq.dat"
|
|
Packit |
40b132 |
IGNORED_STACKS="${QADIR}/memleak/ignored"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
gline=`echo ${OBJDIR} | grep "_64_"`
|
|
Packit |
40b132 |
if [ -n "${gline}" ] ; then
|
|
Packit |
40b132 |
BIT_NAME="64"
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
BIT_NAME="32"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
case "${OS_NAME}" in
|
|
Packit |
40b132 |
"SunOS")
|
|
Packit |
40b132 |
DBX=`which dbx`
|
|
Packit |
40b132 |
AWK=nawk
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ $? -eq 0 ] ; then
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: DBX found: ${DBX}"
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: DBX not found, skipping memory leak checking."
|
|
Packit |
40b132 |
exit 0
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
PROC_ARCH=`uname -p`
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ "${PROC_ARCH}" = "sparc" ] ; then
|
|
Packit |
40b132 |
if [ "${BIT_NAME}" = "64" ] ; then
|
|
Packit |
40b132 |
FREEBL_DEFAULT="libfreebl_64fpu_3"
|
|
Packit |
40b132 |
FREEBL_LIST="${FREEBL_DEFAULT} libfreebl_64int_3"
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
FREEBL_DEFAULT="libfreebl_32fpu_3"
|
|
Packit |
40b132 |
FREEBL_LIST="${FREEBL_DEFAULT} libfreebl_32int64_3"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
if [ "${BIT_NAME}" = "64" ] ; then
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: OS not supported for memory leak checking."
|
|
Packit |
40b132 |
exit 0
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
FREEBL_DEFAULT="libfreebl_3"
|
|
Packit |
40b132 |
FREEBL_LIST="${FREEBL_DEFAULT}"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
RUN_COMMAND_DBG="run_command_dbx"
|
|
Packit |
40b132 |
PARSE_LOGFILE="parse_logfile_dbx"
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
"Linux")
|
|
Packit |
40b132 |
VALGRIND=`which valgrind`
|
|
Packit |
40b132 |
AWK=awk
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ $? -eq 0 ] ; then
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: Valgrind found: ${VALGRIND}"
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: Valgrind not found, skipping memory leak checking."
|
|
Packit |
40b132 |
exit 0
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
FREEBL_DEFAULT="libfreebl_3"
|
|
Packit |
40b132 |
FREEBL_LIST="${FREEBL_DEFAULT}"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
RUN_COMMAND_DBG="run_command_valgrind"
|
|
Packit |
40b132 |
PARSE_LOGFILE="parse_logfile_valgrind"
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
*)
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: OS not supported for memory leak checking."
|
|
Packit |
40b132 |
exit 0
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
esac
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ "${BUILD_OPT}" = "1" ] ; then
|
|
Packit |
40b132 |
OPT="OPT"
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
OPT="DBG"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
NSS_DISABLE_UNLOAD="1"
|
|
Packit |
40b132 |
export NSS_DISABLE_UNLOAD
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
SELFSERV_ATTR="-D -p ${PORT} -d ${SERVER_DB} -n ${HOSTADDR} -e ${HOSTADDR}-ec -w nss -c ABCDEF:C001:C002:C003:C004:C005:C006:C007:C008:C009:C00A:C00B:C00C:C00D:C00E:C00F:C010:C011:C012:C013:C014cdefgijklmnvyz -t 5"
|
|
Packit |
40b132 |
TSTCLNT_ATTR="-p ${PORT} -h ${HOSTADDR} -c j -f -d ${CLIENT_DB} -w nss -o"
|
|
Packit |
40b132 |
STRSCLNT_ATTR="-q -p ${PORT} -d ${CLIENT_DB} -w nss -c 1000 -n TestUser ${HOSTADDR}"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
tbytes=0
|
|
Packit |
40b132 |
tblocks=0
|
|
Packit |
40b132 |
truns=0
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
MEMLEAK_DBG=1
|
|
Packit |
40b132 |
export MEMLEAK_DBG
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
########################### memleak_cleanup ############################
|
|
Packit |
40b132 |
# local shell function to clean up after this script
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
memleak_cleanup()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
unset MEMLEAK_DBG
|
|
Packit |
40b132 |
unset NSS_DISABLE_UNLOAD
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
. ${QADIR}/common/cleanup.sh
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################ set_test_mode #############################
|
|
Packit |
40b132 |
# local shell function to set testing mode for server and for client
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
set_test_mode()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
if [ "${server_mode}" = "BYPASS" ] ; then
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: BYPASS is ON"
|
|
Packit |
40b132 |
SERVER_OPTION="-B -s"
|
|
Packit |
40b132 |
CLIENT_OPTION=""
|
|
Packit |
40b132 |
elif [ "${client_mode}" = "BYPASS" ] ; then
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: BYPASS is ON"
|
|
Packit |
40b132 |
SERVER_OPTION=""
|
|
Packit |
40b132 |
CLIENT_OPTION="-B -s"
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: BYPASS is OFF"
|
|
Packit |
40b132 |
SERVER_OPTION=""
|
|
Packit |
40b132 |
CLIENT_OPTION=""
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ "${server_mode}" = "FIPS" ] ; then
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${SERVER_DB} -fips true -force
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${SERVER_DB} -list
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${CLIENT_DB} -fips false -force
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${CLIENT_DB} -list
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: FIPS is ON"
|
|
Packit |
40b132 |
cipher_list="c d e i j k n v y z"
|
|
Packit |
40b132 |
elif [ "${client_mode}" = "FIPS" ] ; then
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${SERVER_DB} -fips false -force
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${SERVER_DB} -list
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${CLIENT_DB} -fips true -force
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${CLIENT_DB} -list
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: FIPS is ON"
|
|
Packit |
40b132 |
cipher_list="c d e i j k n v y z"
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${SERVER_DB} -fips false -force
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${SERVER_DB} -list
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${CLIENT_DB} -fips false -force
|
|
Packit |
40b132 |
${BINDIR}/modutil -dbdir ${CLIENT_DB} -list
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: FIPS is OFF"
|
|
Packit |
40b132 |
# ciphers l and m removed, see bug 1136095
|
|
Packit |
40b132 |
cipher_list="A B C D E F :C001 :C002 :C003 :C004 :C005 :C006 :C007 :C008 :C009 :C00A :C010 :C011 :C012 :C013 :C014 c d e f g i j k n v y z"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################## set_freebl ##############################
|
|
Packit |
40b132 |
# local shell function to set freebl - sets temporary path for libraries
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
set_freebl()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
if [ "${freebl}" = "${FREEBL_DEFAULT}" ] ; then
|
|
Packit |
40b132 |
LD_LIBRARY_PATH="${OLD_LIBRARY_PATH}"
|
|
Packit |
40b132 |
export LD_LIBRARY_PATH
|
|
Packit |
40b132 |
else
|
|
Packit |
40b132 |
if [ -d "${TMP_LIBDIR}" ] ; then
|
|
Packit |
40b132 |
rm -rf ${TMP_LIBDIR}
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
mkdir ${TMP_LIBDIR}
|
|
Packit |
40b132 |
[ $? -ne 0 ] && html_failed "Create temp directory" && return 1
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
cp ${DIST}/${OBJDIR}/lib/*.so ${DIST}/${OBJDIR}/lib/*.chk ${TMP_LIBDIR}
|
|
Packit |
40b132 |
[ $? -ne 0 ] && html_failed "Copy libraries to temp directory" && return 1
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: Using ${freebl} instead of ${FREEBL_DEFAULT}"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
mv ${TMP_LIBDIR}/${FREEBL_DEFAULT}.so ${TMP_LIBDIR}/${FREEBL_DEFAULT}.so.orig
|
|
Packit |
40b132 |
[ $? -ne 0 ] && html_failed "Move ${FREEBL_DEFAULT}.so -> ${FREEBL_DEFAULT}.so.orig" && return 1
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
cp ${TMP_LIBDIR}/${freebl}.so ${TMP_LIBDIR}/${FREEBL_DEFAULT}.so
|
|
Packit |
40b132 |
[ $? -ne 0 ] && html_failed "Copy ${freebl}.so -> ${FREEBL_DEFAULT}.so" && return 1
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
mv ${TMP_LIBDIR}/${FREEBL_DEFAULT}.chk ${TMP_LIBDIR}/${FREEBL_DEFAULT}.chk.orig
|
|
Packit |
40b132 |
[ $? -ne 0 ] && html_failed "Move ${FREEBL_DEFAULT}.chk -> ${FREEBL_DEFAULT}.chk.orig" && return 1
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
cp ${TMP_LIBDIR}/${freebl}.chk ${TMP_LIBDIR}/${FREEBL_DEFAULT}.chk
|
|
Packit |
40b132 |
[ $? -ne 0 ] && html_failed "Copy ${freebl}.chk to temp directory" && return 1
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "ls -l ${TMP_LIBDIR}"
|
|
Packit |
40b132 |
ls -l ${TMP_LIBDIR}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
LD_LIBRARY_PATH="${TMP_LIBDIR}"
|
|
Packit |
40b132 |
export LD_LIBRARY_PATH
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
return 0
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################# clear_freebl #############################
|
|
Packit |
40b132 |
# local shell function to set default library path and clear temporary
|
|
Packit |
40b132 |
# directory for libraries created by function set_freebl
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
clear_freebl()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
LD_LIBRARY_PATH="${OLD_LIBRARY_PATH}"
|
|
Packit |
40b132 |
export LD_LIBRARY_PATH
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ -d "${TMP_LIBDIR}" ] ; then
|
|
Packit |
40b132 |
rm -rf ${TMP_LIBDIR}
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################ run_command_dbx ###########################
|
|
Packit |
40b132 |
# local shell function to run command under dbx tool
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_command_dbx()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
COMMAND=$1
|
|
Packit |
40b132 |
shift
|
|
Packit |
40b132 |
ATTR=$*
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
COMMAND=`which ${COMMAND}`
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "dbxenv follow_fork_mode parent" > ${DBXCMD}
|
|
Packit |
40b132 |
echo "dbxenv rtc_mel_at_exit verbose" >> ${DBXCMD}
|
|
Packit |
40b132 |
echo "dbxenv rtc_biu_at_exit verbose" >> ${DBXCMD}
|
|
Packit |
40b132 |
echo "check -memuse -match 16 -frames 16" >> ${DBXCMD}
|
|
Packit |
40b132 |
echo "run ${ATTR}" >> ${DBXCMD}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
export NSS_DISABLE_ARENA_FREE_LIST=1
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: -------- Running ${COMMAND} under DBX:"
|
|
Packit |
40b132 |
echo "${DBX} ${COMMAND}"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: -------- DBX commands:"
|
|
Packit |
40b132 |
cat ${DBXCMD}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
( ${DBX} ${COMMAND} < ${DBXCMD} > ${DBXOUT} 2> ${DBXERR} )
|
|
Packit |
40b132 |
grep -v Reading ${DBXOUT} 1>&2
|
|
Packit |
40b132 |
cat ${DBXERR}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
unset NSS_DISABLE_ARENA_FREE_LIST
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
grep "exit code is" ${DBXOUT}
|
|
Packit |
40b132 |
grep "exit code is 0" ${DBXOUT} > /dev/null
|
|
Packit |
40b132 |
return $?
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
######################### run_command_valgrind #########################
|
|
Packit |
40b132 |
# local shell function to run command under valgrind tool
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_command_valgrind()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
COMMAND=$1
|
|
Packit |
40b132 |
shift
|
|
Packit |
40b132 |
ATTR=$*
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
export NSS_DISABLE_ARENA_FREE_LIST=1
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: -------- Running ${COMMAND} under Valgrind:"
|
|
Packit |
40b132 |
echo "${VALGRIND} --tool=memcheck --leak-check=yes --show-reachable=yes --partial-loads-ok=yes --leak-resolution=high --num-callers=50 ${COMMAND} ${ATTR}"
|
|
Packit |
40b132 |
echo "Running: ${COMMAND} ${ATTR}" 1>&2
|
|
Packit |
40b132 |
${VALGRIND} --tool=memcheck --leak-check=yes --show-reachable=yes --partial-loads-ok=yes --leak-resolution=high --num-callers=50 ${COMMAND} ${ATTR} 1>&2
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
echo "==0=="
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
unset NSS_DISABLE_ARENA_FREE_LIST
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
return $ret
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################# run_selfserv #############################
|
|
Packit |
40b132 |
# local shell function to start selfserv
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_selfserv()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
echo "PATH=${PATH}"
|
|
Packit |
40b132 |
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: -------- Running selfserv:"
|
|
Packit |
40b132 |
echo "selfserv ${SELFSERV_ATTR}"
|
|
Packit |
40b132 |
${BINDIR}/selfserv ${SELFSERV_ATTR}
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
if [ $ret -ne 0 ]; then
|
|
Packit |
40b132 |
html_failed "${LOGNAME}: Selfserv"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME} ${LOGNAME}: " \
|
|
Packit |
40b132 |
"Selfserv produced a returncode of ${ret} - FAILED"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
########################### run_selfserv_dbg ###########################
|
|
Packit |
40b132 |
# local shell function to start selfserv under debug tool
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_selfserv_dbg()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
echo "PATH=${PATH}"
|
|
Packit |
40b132 |
echo "LD_LIBRARY_PATH=${LD_LIBRARY_PATH}"
|
|
Packit |
40b132 |
${RUN_COMMAND_DBG} ${BINDIR}/selfserv ${SERVER_OPTION} ${SELFSERV_ATTR}
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
if [ $ret -ne 0 ]; then
|
|
Packit |
40b132 |
html_failed "${LOGNAME}: Selfserv"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME} ${LOGNAME}: " \
|
|
Packit |
40b132 |
"Selfserv produced a returncode of ${ret} - FAILED"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################# run_strsclnt #############################
|
|
Packit |
40b132 |
# local shell function to run strsclnt for all ciphers and send stop
|
|
Packit |
40b132 |
# command to selfserv over tstclnt
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_strsclnt()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
for cipher in ${cipher_list}; do
|
|
Packit |
40b132 |
VMIN="ssl3"
|
|
Packit |
40b132 |
VMAX=
|
|
Packit |
40b132 |
case "${cipher}" in
|
|
Packit |
40b132 |
A|B|C|D|E|F)
|
|
Packit |
40b132 |
# Enable SSL 2 only for SSL 2 cipher suites.
|
|
Packit |
40b132 |
VMIN="ssl2"
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
f|g)
|
|
Packit |
40b132 |
# TLS 1.1 disallows export cipher suites.
|
|
Packit |
40b132 |
VMAX="tls1.0"
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
esac
|
|
Packit |
40b132 |
ATTR="${STRSCLNT_ATTR} -C ${cipher} -V ${VMIN}:${VMAX}"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: -------- Trying cipher ${cipher}:"
|
|
Packit |
40b132 |
echo "strsclnt ${ATTR}"
|
|
Packit |
40b132 |
${BINDIR}/strsclnt ${ATTR}
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
if [ $ret -ne 0 ]; then
|
|
Packit |
40b132 |
html_failed "${LOGNAME}: Strsclnt with cipher ${cipher}"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME} ${LOGNAME}: " \
|
|
Packit |
40b132 |
"Strsclnt produced a returncode of ${ret} - FAILED"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
done
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: -------- Stopping server:"
|
|
Packit |
40b132 |
echo "tstclnt ${TSTCLNT_ATTR} < ${REQUEST_FILE}"
|
|
Packit |
40b132 |
${BINDIR}/tstclnt ${TSTCLNT_ATTR} < ${REQUEST_FILE}
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
if [ $ret -ne 0 ]; then
|
|
Packit |
40b132 |
html_failed "${LOGNAME}: Tstclnt"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME} ${LOGNAME}: " \
|
|
Packit |
40b132 |
"Tstclnt produced a returncode of ${ret} - FAILED"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
sleep 20
|
|
Packit |
40b132 |
kill $(jobs -p) 2> /dev/null
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
########################### run_strsclnt_dbg ###########################
|
|
Packit |
40b132 |
# local shell function to run strsclnt under debug tool for all ciphers
|
|
Packit |
40b132 |
# and send stop command to selfserv over tstclnt
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_strsclnt_dbg()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
for cipher in ${cipher_list}; do
|
|
Packit |
40b132 |
VMIN="ssl3"
|
|
Packit |
40b132 |
VMAX=
|
|
Packit |
40b132 |
case "${cipher}" in
|
|
Packit |
40b132 |
A|B|C|D|E|F)
|
|
Packit |
40b132 |
# Enable SSL 2 only for SSL 2 cipher suites.
|
|
Packit |
40b132 |
VMIN="ssl2"
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
f|g)
|
|
Packit |
40b132 |
# TLS 1.1 disallows export cipher suites.
|
|
Packit |
40b132 |
VMAX="tls1.0"
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
esac
|
|
Packit |
40b132 |
ATTR="${STRSCLNT_ATTR} -C ${cipher} -V ${VMIN}:${VMAX}"
|
|
Packit |
40b132 |
${RUN_COMMAND_DBG} ${BINDIR}/strsclnt ${CLIENT_OPTION} ${ATTR}
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
if [ $ret -ne 0 ]; then
|
|
Packit |
40b132 |
html_failed "${LOGNAME}: Strsclnt with cipher ${cipher}"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME} ${LOGNAME}: " \
|
|
Packit |
40b132 |
"Strsclnt produced a returncode of ${ret} - FAILED"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
done
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: -------- Stopping server:"
|
|
Packit |
40b132 |
echo "tstclnt ${TSTCLNT_ATTR} < ${REQUEST_FILE}"
|
|
Packit |
40b132 |
${BINDIR}/tstclnt ${TSTCLNT_ATTR} < ${REQUEST_FILE}
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
if [ $ret -ne 0 ]; then
|
|
Packit |
40b132 |
html_failed "${LOGNAME}: Tstclnt"
|
|
Packit |
40b132 |
echo "${SCRIPTNAME} ${LOGNAME}: " \
|
|
Packit |
40b132 |
"Tstclnt produced a returncode of ${ret} - FAILED"
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
kill $(jobs -p) 2> /dev/null
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_clear()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
stat_minbytes=9999999
|
|
Packit |
40b132 |
stat_maxbytes=0
|
|
Packit |
40b132 |
stat_minblocks=9999999
|
|
Packit |
40b132 |
stat_maxblocks=0
|
|
Packit |
40b132 |
stat_bytes=0
|
|
Packit |
40b132 |
stat_blocks=0
|
|
Packit |
40b132 |
stat_runs=0
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_add()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
read hash lbytes bytes_str lblocks blocks_str in_str lruns runs_str \
|
|
Packit |
40b132 |
minbytes minbytes_str maxbytes maxbytes_str minblocks \
|
|
Packit |
40b132 |
minblocks_str maxblocks maxblocks_str rest < ${TMP_COUNT}
|
|
Packit |
40b132 |
rm ${TMP_COUNT}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
tbytes=`expr ${tbytes} + ${lbytes}`
|
|
Packit |
40b132 |
tblocks=`expr ${tblocks} + ${lblocks}`
|
|
Packit |
40b132 |
truns=`expr ${truns} + ${lruns}`
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ ${stat_minbytes} -gt ${minbytes} ]; then
|
|
Packit |
40b132 |
stat_minbytes=${minbytes}
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ ${stat_maxbytes} -lt ${maxbytes} ]; then
|
|
Packit |
40b132 |
stat_maxbytes=${maxbytes}
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ ${stat_minblocks} -gt ${minblocks} ]; then
|
|
Packit |
40b132 |
stat_minblocks=${minblocks}
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
if [ ${stat_maxblocks} -lt ${maxblocks} ]; then
|
|
Packit |
40b132 |
stat_maxblocks=${maxblocks}
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_bytes=`expr ${stat_bytes} + ${lbytes}`
|
|
Packit |
40b132 |
stat_blocks=`expr ${stat_blocks} + ${lblocks}`
|
|
Packit |
40b132 |
stat_runs=`expr ${stat_runs} + ${lruns}`
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_print()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
if [ ${stat_runs} -gt 0 ]; then
|
|
Packit |
40b132 |
stat_avgbytes=`expr "${stat_bytes}" / "${stat_runs}"`
|
|
Packit |
40b132 |
stat_avgblocks=`expr "${stat_blocks}" / "${stat_runs}"`
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
echo
|
|
Packit |
40b132 |
echo "$1 statistics:"
|
|
Packit |
40b132 |
echo "Leaked bytes: ${stat_minbytes} min, ${stat_avgbytes} avg, ${stat_maxbytes} max"
|
|
Packit |
40b132 |
echo "Leaked blocks: ${stat_minblocks} min, ${stat_avgblocks} avg, ${stat_maxblocks} max"
|
|
Packit |
40b132 |
echo "Total runs: ${stat_runs}"
|
|
Packit |
40b132 |
echo
|
|
Packit |
40b132 |
fi
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
########################## run_ciphers_server ##########################
|
|
Packit |
40b132 |
# local shell function to test server part of code (selfserv)
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_ciphers_server()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
html_head "Memory leak checking - server"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_clear
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
client_mode="NORMAL"
|
|
Packit |
40b132 |
for server_mode in ${MODE_LIST}; do
|
|
Packit |
40b132 |
set_test_mode
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
for freebl in ${FREEBL_LIST}; do
|
|
Packit |
40b132 |
set_freebl || continue
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
LOGNAME=server-${BIT_NAME}-${freebl}-${server_mode}
|
|
Packit |
40b132 |
LOGFILE=${LOGDIR}/${LOGNAME}.log
|
|
Packit |
40b132 |
echo "Running ${LOGNAME}"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
(
|
|
Packit |
40b132 |
run_selfserv_dbg 2>> ${LOGFILE} &
|
|
Packit |
40b132 |
sleep 5
|
|
Packit |
40b132 |
run_strsclnt
|
|
Packit |
40b132 |
)
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
sleep 20
|
|
Packit |
40b132 |
clear_freebl
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
log_parse
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
html_msg ${ret} 0 "${LOGNAME}" "produced a returncode of $ret, expected is 0"
|
|
Packit |
40b132 |
done
|
|
Packit |
40b132 |
done
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_print "Selfserv"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
html " "
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
########################## run_ciphers_client ##########################
|
|
Packit |
40b132 |
# local shell function to test client part of code (strsclnt)
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_ciphers_client()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
html_head "Memory leak checking - client"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_clear
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
server_mode="NORMAL"
|
|
Packit |
40b132 |
for client_mode in ${MODE_LIST}; do
|
|
Packit |
40b132 |
set_test_mode
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
for freebl in ${FREEBL_LIST}; do
|
|
Packit |
40b132 |
set_freebl || continue
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
LOGNAME=client-${BIT_NAME}-${freebl}-${client_mode}
|
|
Packit |
40b132 |
LOGFILE=${LOGDIR}/${LOGNAME}.log
|
|
Packit |
40b132 |
echo "Running ${LOGNAME}"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
(
|
|
Packit |
40b132 |
run_selfserv &
|
|
Packit |
40b132 |
sleep 5
|
|
Packit |
40b132 |
run_strsclnt_dbg 2>> ${LOGFILE}
|
|
Packit |
40b132 |
)
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
sleep 20
|
|
Packit |
40b132 |
clear_freebl
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
log_parse
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
html_msg ${ret} 0 "${LOGNAME}" "produced a returncode of $ret, expected is 0"
|
|
Packit |
40b132 |
done
|
|
Packit |
40b132 |
done
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_print "Strsclnt"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
html " "
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
########################## parse_logfile_dbx ###########################
|
|
Packit |
40b132 |
# local shell function to parse and process logs from dbx
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
parse_logfile_dbx()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
${AWK} '
|
|
Packit |
40b132 |
BEGIN {
|
|
Packit |
40b132 |
in_mel = 0
|
|
Packit |
40b132 |
mel_line = 0
|
|
Packit |
40b132 |
bytes = 0
|
|
Packit |
40b132 |
lbytes = 0
|
|
Packit |
40b132 |
minbytes = 9999999
|
|
Packit |
40b132 |
maxbytes = 0
|
|
Packit |
40b132 |
blocks = 0
|
|
Packit |
40b132 |
lblocks = 0
|
|
Packit |
40b132 |
minblocks = 9999999
|
|
Packit |
40b132 |
maxblocks = 0
|
|
Packit |
40b132 |
runs = 0
|
|
Packit |
40b132 |
stack_string = ""
|
|
Packit |
40b132 |
bin_name = ""
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/Memory Leak \(mel\):/ ||
|
|
Packit |
40b132 |
/Possible memory leak -- address in block \(aib\):/ ||
|
|
Packit |
40b132 |
/Block in use \(biu\):/ {
|
|
Packit |
40b132 |
in_mel = 1
|
|
Packit |
40b132 |
stack_string = ""
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
in_mel == 1 && /^$/ {
|
|
Packit |
40b132 |
print bin_name stack_string
|
|
Packit |
40b132 |
in_mel = 0
|
|
Packit |
40b132 |
mel_line = 0
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
in_mel == 1 {
|
|
Packit |
40b132 |
mel_line += 1
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/Found leaked block of size/ {
|
|
Packit |
40b132 |
bytes += $6
|
|
Packit |
40b132 |
blocks += 1
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/Found .* leaked blocks/ {
|
|
Packit |
40b132 |
bytes += $8
|
|
Packit |
40b132 |
blocks += $2
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/Found block of size/ {
|
|
Packit |
40b132 |
bytes += $5
|
|
Packit |
40b132 |
blocks += 1
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/Found .* blocks totaling/ {
|
|
Packit |
40b132 |
bytes += $5
|
|
Packit |
40b132 |
blocks += $2
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
mel_line > 2 {
|
|
Packit |
40b132 |
gsub(/\(\)/, "")
|
|
Packit |
40b132 |
new_line = $2
|
|
Packit |
40b132 |
stack_string = "/" new_line stack_string
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/^Running: / {
|
|
Packit |
40b132 |
bin_name = $2
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/execution completed/ {
|
|
Packit |
40b132 |
runs += 1
|
|
Packit |
40b132 |
lbytes += bytes
|
|
Packit |
40b132 |
minbytes = (minbytes < bytes) ? minbytes : bytes
|
|
Packit |
40b132 |
maxbytes = (maxbytes > bytes) ? maxbytes : bytes
|
|
Packit |
40b132 |
bytes = 0
|
|
Packit |
40b132 |
lblocks += blocks
|
|
Packit |
40b132 |
minblocks = (minblocks < blocks) ? minblocks : blocks
|
|
Packit |
40b132 |
maxblocks = (maxblocks > blocks) ? maxblocks : blocks
|
|
Packit |
40b132 |
blocks = 0
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
END {
|
|
Packit |
40b132 |
print "# " lbytes " bytes " lblocks " blocks in " runs " runs " \
|
|
Packit |
40b132 |
minbytes " minbytes " maxbytes " maxbytes " minblocks " minblocks " \
|
|
Packit |
40b132 |
maxblocks " maxblocks " > "/dev/stderr"
|
|
Packit |
40b132 |
}' 2> ${TMP_COUNT}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_add
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
######################## parse_logfile_valgrind ########################
|
|
Packit |
40b132 |
# local shell function to parse and process logs from valgrind
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
parse_logfile_valgrind()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
${AWK} '
|
|
Packit |
40b132 |
BEGIN {
|
|
Packit |
40b132 |
in_mel = 0
|
|
Packit |
40b132 |
in_sum = 0
|
|
Packit |
40b132 |
bytes = 0
|
|
Packit |
40b132 |
lbytes = 0
|
|
Packit |
40b132 |
minbytes = 9999999
|
|
Packit |
40b132 |
maxbytes = 0
|
|
Packit |
40b132 |
blocks = 0
|
|
Packit |
40b132 |
lblocks = 0
|
|
Packit |
40b132 |
minblocks = 9999999
|
|
Packit |
40b132 |
maxblocks = 0
|
|
Packit |
40b132 |
runs = 0
|
|
Packit |
40b132 |
stack_string = ""
|
|
Packit |
40b132 |
bin_name = ""
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
!/==[0-9]*==/ {
|
|
Packit |
40b132 |
if ( $1 == "Running:" )
|
|
Packit |
40b132 |
bin_name = $2
|
|
Packit |
40b132 |
bin_nf = split(bin_name, bin_fields, "/")
|
|
Packit |
40b132 |
bin_name = bin_fields[bin_nf]
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/blocks are/ {
|
|
Packit |
40b132 |
in_mel = 1
|
|
Packit |
40b132 |
stack_string = ""
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/LEAK SUMMARY/ {
|
|
Packit |
40b132 |
in_sum = 1
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
/^==[0-9]*== *$/ {
|
|
Packit |
40b132 |
if (in_mel)
|
|
Packit |
40b132 |
print bin_name stack_string
|
|
Packit |
40b132 |
if (in_sum) {
|
|
Packit |
40b132 |
runs += 1
|
|
Packit |
40b132 |
lbytes += bytes
|
|
Packit |
40b132 |
minbytes = (minbytes < bytes) ? minbytes : bytes
|
|
Packit |
40b132 |
maxbytes = (maxbytes > bytes) ? maxbytes : bytes
|
|
Packit |
40b132 |
bytes = 0
|
|
Packit |
40b132 |
lblocks += blocks
|
|
Packit |
40b132 |
minblocks = (minblocks < blocks) ? minblocks : blocks
|
|
Packit |
40b132 |
maxblocks = (maxblocks > blocks) ? maxblocks : blocks
|
|
Packit |
40b132 |
blocks = 0
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
in_sum = 0
|
|
Packit |
40b132 |
in_mel = 0
|
|
Packit |
40b132 |
next
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
in_mel == 1 {
|
|
Packit |
40b132 |
new_line = $4
|
|
Packit |
40b132 |
if ( new_line == "(within")
|
|
Packit |
40b132 |
new_line = "*"
|
|
Packit |
40b132 |
stack_string = "/" new_line stack_string
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
in_sum == 1 {
|
|
Packit |
40b132 |
for (i = 2; i <= NF; i++) {
|
|
Packit |
40b132 |
if ($i == "bytes") {
|
|
Packit |
40b132 |
str = $(i - 1)
|
|
Packit |
40b132 |
gsub(",", "", str)
|
|
Packit |
40b132 |
bytes += str
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
if ($i == "blocks.") {
|
|
Packit |
40b132 |
str = $(i - 1)
|
|
Packit |
40b132 |
gsub(",", "", str)
|
|
Packit |
40b132 |
blocks += str
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
END {
|
|
Packit |
40b132 |
print "# " lbytes " bytes " lblocks " blocks in " runs " runs " \
|
|
Packit |
40b132 |
minbytes " minbytes " maxbytes " maxbytes " minblocks " minblocks " \
|
|
Packit |
40b132 |
maxblocks " maxblocks " > "/dev/stderr"
|
|
Packit |
40b132 |
}' 2> ${TMP_COUNT}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_add
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################# check_ignored ############################
|
|
Packit |
40b132 |
# local shell function to check all stacks if they are not ignored
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
check_ignored()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
${AWK} -F/ '
|
|
Packit |
40b132 |
BEGIN {
|
|
Packit |
40b132 |
ignore = "'${IGNORED_STACKS}'"
|
|
Packit |
40b132 |
# read in the ignore file
|
|
Packit |
40b132 |
BUGNUM = ""
|
|
Packit |
40b132 |
count = 0
|
|
Packit |
40b132 |
new = 0
|
|
Packit |
40b132 |
while ((getline line < ignore) > 0) {
|
|
Packit |
40b132 |
if (line ~ "^#[0-9]+") {
|
|
Packit |
40b132 |
BUGNUM = line
|
|
Packit |
40b132 |
} else if (line ~ "^#") {
|
|
Packit |
40b132 |
continue
|
|
Packit |
40b132 |
} else if (line == "") {
|
|
Packit |
40b132 |
continue
|
|
Packit |
40b132 |
} else {
|
|
Packit |
40b132 |
bugnum_array[count] = BUGNUM
|
|
Packit |
40b132 |
# Create a regular expression for the ignored stack:
|
|
Packit |
40b132 |
# replace * with % so we can later replace them with regular expressions
|
|
Packit |
40b132 |
# without messing up everything (the regular expressions contain *)
|
|
Packit |
40b132 |
gsub("\\*", "%", line)
|
|
Packit |
40b132 |
# replace %% with .*
|
|
Packit |
40b132 |
gsub("%%", ".*", line)
|
|
Packit |
40b132 |
# replace % with [^/]*
|
|
Packit |
40b132 |
gsub("%", "[^/]*", line)
|
|
Packit |
40b132 |
# add ^ at the beginning
|
|
Packit |
40b132 |
# add $ at the end
|
|
Packit |
40b132 |
line_array[count] = "^" line "$"
|
|
Packit |
40b132 |
count++
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
match_found = 0
|
|
Packit |
40b132 |
# Look for matching ignored stack
|
|
Packit |
40b132 |
for (i = 0; i < count; i++) {
|
|
Packit |
40b132 |
if ($0 ~ line_array[i]) {
|
|
Packit |
40b132 |
# found a match
|
|
Packit |
40b132 |
match_found = 1
|
|
Packit |
40b132 |
bug_found = bugnum_array[i]
|
|
Packit |
40b132 |
break
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
# Process result
|
|
Packit |
40b132 |
if (match_found == 1 ) {
|
|
Packit |
40b132 |
if (bug_found != "") {
|
|
Packit |
40b132 |
print "IGNORED STACK (" bug_found "): " $0
|
|
Packit |
40b132 |
} else {
|
|
Packit |
40b132 |
print "IGNORED STACK: " $0
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
} else {
|
|
Packit |
40b132 |
print "NEW STACK: " $0
|
|
Packit |
40b132 |
new = 1
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
END {
|
|
Packit |
40b132 |
exit new
|
|
Packit |
40b132 |
}'
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
return $ret
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################### parse_log ##############################
|
|
Packit |
40b132 |
# local shell function to parse log file
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
log_parse()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
${PARSE_LOGFILE} < ${LOGFILE} > ${TMP_STACKS}
|
|
Packit |
40b132 |
echo "${SCRIPTNAME}: Processing log ${LOGNAME}:" > ${TMP_SORTED}
|
|
Packit |
40b132 |
cat ${TMP_STACKS} | sort -u | check_ignored >> ${TMP_SORTED}
|
|
Packit |
40b132 |
ret=$?
|
|
Packit |
40b132 |
echo >> ${TMP_SORTED}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
cat ${TMP_SORTED} | tee -a ${FOUNDLEAKS}
|
|
Packit |
40b132 |
rm ${TMP_STACKS} ${TMP_SORTED}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
return ${ret}
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################## cnt_total ###############################
|
|
Packit |
40b132 |
# local shell function to count total leaked bytes
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
cnt_total()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
echo ""
|
|
Packit |
40b132 |
echo "TinderboxPrint:${OPT} Lk bytes: ${tbytes}"
|
|
Packit |
40b132 |
echo "TinderboxPrint:${OPT} Lk blocks: ${tblocks}"
|
|
Packit |
40b132 |
echo "TinderboxPrint:${OPT} # of runs: ${truns}"
|
|
Packit |
40b132 |
echo ""
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################### run_ocsp ###############################
|
|
Packit |
40b132 |
# local shell function to run ocsp tests
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_ocsp()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
stat_clear
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
cd ${QADIR}/iopr
|
|
Packit |
40b132 |
. ./ocsp_iopr.sh
|
|
Packit |
40b132 |
ocsp_iopr_run
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_print "Ocspclnt"
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################## run_chains ##############################
|
|
Packit |
40b132 |
# local shell function to run PKIX certificate chains tests
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
run_chains()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
stat_clear
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
LOGNAME="chains"
|
|
Packit |
40b132 |
LOGFILE=${LOGDIR}/chains.log
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
. ${QADIR}/chains/chains.sh
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
stat_print "Chains"
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
############################## run_chains ##############################
|
|
Packit |
40b132 |
# local shell function to run memory leak tests
|
|
Packit |
40b132 |
#
|
|
Packit |
40b132 |
# NSS_MEMLEAK_TESTS - list of tests to run, if not defined before,
|
|
Packit |
40b132 |
# then is redefined to default list
|
|
Packit |
40b132 |
########################################################################
|
|
Packit |
40b132 |
memleak_run_tests()
|
|
Packit |
40b132 |
{
|
|
Packit |
40b132 |
nss_memleak_tests="ssl_server ssl_client chains ocsp"
|
|
Packit |
40b132 |
NSS_MEMLEAK_TESTS="${NSS_MEMLEAK_TESTS:-$nss_memleak_tests}"
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
for MEMLEAK_TEST in ${NSS_MEMLEAK_TESTS}
|
|
Packit |
40b132 |
do
|
|
Packit |
40b132 |
case "${MEMLEAK_TEST}" in
|
|
Packit |
40b132 |
"ssl_server")
|
|
Packit |
40b132 |
run_ciphers_server
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
"ssl_client")
|
|
Packit |
40b132 |
run_ciphers_client
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
"chains")
|
|
Packit |
40b132 |
run_chains
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
"ocsp")
|
|
Packit |
40b132 |
run_ocsp
|
|
Packit |
40b132 |
;;
|
|
Packit |
40b132 |
esac
|
|
Packit |
40b132 |
done
|
|
Packit |
40b132 |
}
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
################################# main #################################
|
|
Packit |
40b132 |
|
|
Packit |
40b132 |
memleak_init
|
|
Packit |
40b132 |
memleak_run_tests
|
|
Packit |
40b132 |
cnt_total
|
|
Packit |
40b132 |
memleak_cleanup
|
|
Packit |
40b132 |
|