From cc93437517b74ad1f38668baa88f36f6a7e5e5fd Mon Sep 17 00:00:00 2001 From: Steven Morgan Date: Wed, 4 Feb 2015 18:52:01 -0500 Subject: [PATCH 01/15] fix documentation errors in example logical signature. --- docs/signatures.tex | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/signatures.tex b/docs/signatures.tex index 4261fa768..a6e20bafe 100644 --- a/docs/signatures.tex +++ b/docs/signatures.tex @@ -487,10 +487,10 @@ Sig2;Target:0;((0|1|2)>5,2)&(3|1);6b6f74656b;616c61;7a6f6c77;737 Sig3;Target:0;((0|1|2|3)=2)&(4|1);6b6f74656b;616c61;7a6f6c77;737 46566616e;deadbeef -Sig4;Target:1,Engine:18-20;((0|1)&(2|3))&4;EP+123:33c06834f04100 +Sig4;Target:1;Engine:18-20;((0|1)&(2|3))&4;EP+123:33c06834f04100 f2aef7d14951684cf04100e8110a00;S2+78:22??232c2d252229{-15}6e6573 -(63|64)61706528;S+50:68efa311c3b9963cb1ee8e586d32aeb9043e;f9c58d -cf43987e4f519d629b103375;SL+550:6300680065005c0046006900 +(63|64)61706528;S3+50:68efa311c3b9963cb1ee8e586d32aeb9043e;f9c58 +dcf43987e4f519d629b103375;SL+550:6300680065005c0046006900 \end{verbatim} ClamAV 0.96 introduced support for special macro subsignatures in the following format: \verb+${min-max}MACROID$+, where \verb+MACROID+ From 37b927116d22247fafde5ce745f645d1fd804516 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Fri, 6 Feb 2015 13:22:35 -0800 Subject: [PATCH 02/15] improved documentation on macro subsignatures --- docs/signatures.pdf | Bin 124759 -> 115602 bytes docs/signatures.tex | 41 ++++++++++++++++++++++++++++++++--------- 2 files changed, 32 insertions(+), 9 deletions(-) diff --git a/docs/signatures.pdf b/docs/signatures.pdf index 98b497176c3bc2752e46b71f1026099496ba58bf..f365f64e973e154bae5959d911031c5c88e26325 100644 GIT binary patch delta 43408 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 E0m_H8{{R30 delta 52656 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 bdSGX-XKTNIyo0iGgFkN2(u$!gh-3X9!$J0f diff --git a/docs/signatures.tex b/docs/signatures.tex index a6e20bafe..33faaaddd 100644 --- a/docs/signatures.tex +++ b/docs/signatures.tex @@ -492,15 +492,38 @@ f2aef7d14951684cf04100e8110a00;S2+78:22??232c2d252229{-15}6e6573 (63|64)61706528;S3+50:68efa311c3b9963cb1ee8e586d32aeb9043e;f9c58 dcf43987e4f519d629b103375;SL+550:6300680065005c0046006900 \end{verbatim} - ClamAV 0.96 introduced support for special macro subsignatures in - the following format: \verb+${min-max}MACROID$+, where \verb+MACROID+ - points to a group of signatures and \verb+{min-max}+ specifies the - offset range at which one of the group signatures should match. - The range is calculated against the match offset of the previous - subsignature. The macro subsignature makes its preceding subsignature - considered a match only if both of them get matched. For more - information and examples please see - \url{https://bugzilla.clamav.net/show_bug.cgi?id=164}. + Macro subsignatures(clamav-0.96): \verb+${min-max}MACROID$+: + \begin{itemize} + \item Macro subsignatures are used to combine a number of existing extended + signatures (\verb+.ndb+) into a on-the-fly generated alternate string logical + signature (\verb+.ldb+). + \end{itemize} + Example: + \begin{verbatim} + test.ldb: + TestMacro;Target:0;0&1;616161;${6-7}12$ + + test.ndb: + D1:0:$12:626262 + D2:0:$12:636363 + D3:0:$30:626264 + \end{verbatim} + The example logical signature \verb+TestMacro+ is functionally equivalent to:\\ + \verb+TestMacro;Target:0;0;616161{3-4}(626262|636363)+ + \begin{itemize} + \item \verb+MACROID+ points to a group of signatures; there can be at most 32 macro groups. + \begin{itemize} + \item In the example, \verb+MACROID+ is \verb+12+ and both \verb+D1+ and \verb+D2+ are members + of macro group \verb+12+. \verb+D3+ is a member of separate macro group \verb+30+. + \end{itemize} + \item \verb+{min-max}+ specifies the offset range at which one of the group signatures should match; + the offset range is relative to the starting offset of the preceding subsignature. This means a + macro subsignature cannot be the first subsignature. + \begin{itemize} + \item In the example, \verb+{min-max}+ is \verb+{6-7}+ and it is relative to the start of a \verb+616161+ match. + \end{itemize} + \item For more information and examples please see \url{https://wwws.clamav.net/bugzilla/show_bug.cgi?id=164}. + \end{itemize} \subsection{Icon signatures for PE files} ClamAV 0.96 includes an approximate/fuzzy icon matcher to help From 3897b37504907e84eff6da82dec6581c94e7d3e1 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Fri, 6 Feb 2015 14:01:27 -0800 Subject: [PATCH 03/15] bb#11254 - removed built-in llvm configure check --- libclamav/c++/configure.ac | 1 - 1 file changed, 1 deletion(-) diff --git a/libclamav/c++/configure.ac b/libclamav/c++/configure.ac index a6697ddd8..102478cff 100644 --- a/libclamav/c++/configure.ac +++ b/libclamav/c++/configure.ac @@ -16,7 +16,6 @@ dnl MA 02110-1301, USA. AC_PREREQ([2.59]) AC_INIT([libclamavc++],[devel],[http://bugs.clamav.net]) AC_CONFIG_AUX_DIR([config]) -AC_CONFIG_SRCDIR([llvm/configure]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADER([clamavcxx-config.h]) AC_CANONICAL_TARGET From 08db17431b44f3261a6ee5065919bde8f30aa4a9 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Fri, 6 Feb 2015 14:59:43 -0800 Subject: [PATCH 04/15] bb#11254 - added --with-llvm-linking option to specify system-llvm linking method --- configure.ac | 11 +++++++++- libclamav/c++/configure.ac | 44 +++++++++++++++++++++++++++++++------- m4/reorganization/llvm.m4 | 26 ++++++++++++++++++++++ 3 files changed, 72 insertions(+), 9 deletions(-) diff --git a/configure.ac b/configure.ac index 3a308a996..ac7d2468b 100644 --- a/configure.ac +++ b/configure.ac @@ -173,6 +173,11 @@ AC_OUTPUT if test "$enable_llvm" = "yes" && test "$subdirfailed" != "no"; then AC_MSG_ERROR([Failed to configure LLVM, and LLVM was explicitly requested]) fi +if test "$enable_llvm" = "auto" && test "$subdirfailed" != "no"; then + system_llvm="MIA" + llvm_linking="" +fi + AM_CONDITIONAL([ENABLE_LLVM], [test "$subdirfailed" != "yes" && test "$enable_llvm" != "no"]) no_recursion="yes"; @@ -216,7 +221,11 @@ have_jit="no" if test "$subdirfailed" = "no"; then have_jit="yes" fi -CL_MSG_STATUS([llvm ],[$have_jit, from $system_llvm],[$enable_llvm]) +if test "x$llvm_linking" = "x"; then + CL_MSG_STATUS([llvm ],[$have_jit, from $system_llvm],[$enable_llvm]) +else + CL_MSG_STATUS([llvm ],[$have_jit, from $system_llvm ($llvm_linking)],[$enable_llvm]) +fi CL_MSG_STATUS([mempool ],[$have_mempool],[$enable_mempool]) AC_MSG_NOTICE([Summary of engine detection features]) diff --git a/libclamav/c++/configure.ac b/libclamav/c++/configure.ac index 102478cff..7fb58aabf 100644 --- a/libclamav/c++/configure.ac +++ b/libclamav/c++/configure.ac @@ -77,6 +77,26 @@ AC_ARG_WITH([system-llvm], AC_HELP_STRING([--with-system-llvm], fi ]) +llvm_linking= +AC_ARG_WITH([llvm-linking], [AC_HELP_STRING([--with-llvm-linking], +[specifies method to linking llvm @<:@static|dynamic@:>@, only valid with --with-system-llvm])], +[ +if test "x$llvmconfig" = "x"; then + AC_MSG_ERROR([Failed to configure LLVM, and LLVM linking was specified without valid llvm-config]) +else +case "$withval" in + static) + llvm_linking="static" + ;; + dynamic) + llvm_linking="dynamic" + ;; + *) + AC_MSG_ERROR([Invalid argument to --with-llvm-linking]) +esac +fi +], []) + AC_MSG_CHECKING([for supported LLVM version]) if test "x$llvmconfig" = "x"; then dnl macro not available in older autotools @@ -112,16 +132,24 @@ fi dnl aquire the required flags to properly link in external LLVM if test "x$llvmconfig" != "x"; then AC_SUBST(LLVMCONFIG_CXXFLAGS, [`$llvmconfig --cxxflags`]) - if test $llvmver_test -ge 350; then - dnl LLVM 3.5.0 and after splits linker flags into two sets - ldflags=`$llvmconfig --ldflags` - syslibs=`$llvmconfig --system-libs` - AC_SUBST(LLVMCONFIG_LDFLAGS, ["$ldflags $syslibs"]) - else + + if test "x$llvm_linking" = "xdynamic"; then AC_SUBST(LLVMCONFIG_LDFLAGS, [`$llvmconfig --ldflags`]) + AC_SUBST(LLVMCONFIG_LIBS, [-lLLVM-$llvmver]) + AC_SUBST(LLVMCONFIG_LIBFILES, []) + else + if test $llvmver_test -ge 350; then + dnl LLVM 3.5.0 and after splits linker flags into two sets + ldflags=`$llvmconfig --ldflags` + syslibs=`$llvmconfig --system-libs` + AC_SUBST(LLVMCONFIG_LDFLAGS, ["$ldflags $syslibs"]) + else + AC_SUBST(LLVMCONFIG_LDFLAGS, [`$llvmconfig --ldflags`]) + fi + AC_SUBST(LLVMCONFIG_LIBS, [`$llvmconfig --libs jit nativecodegen scalaropts ipo`]) + AC_SUBST(LLVMCONFIG_LIBFILES, [`$llvmconfig --libfiles jit nativecodegen scalaropts ipo`]) fi - AC_SUBST(LLVMCONFIG_LIBS, [`$llvmconfig --libs jit nativecodegen scalaropts ipo`]) - AC_SUBST(LLVMCONFIG_LIBFILES, [`$llvmconfig --libfiles jit nativecodegen scalaropts ipo`]) + AC_MSG_NOTICE([CXXFLAGS from llvm-config: $LLVMCONFIG_CXXFLAGS]) AC_MSG_NOTICE([LDFLAGS from llvm-config: $LLVMCONFIG_LDFLAGS]) AC_MSG_NOTICE([LIBS from llvm-config: $LLVMCONFIG_LIBS]) diff --git a/m4/reorganization/llvm.m4 b/m4/reorganization/llvm.m4 index 0c7590c24..ec2bbda20 100644 --- a/m4/reorganization/llvm.m4 +++ b/m4/reorganization/llvm.m4 @@ -13,6 +13,31 @@ AC_ARG_WITH([system-llvm], [AC_HELP_STRING([--with-system-llvm], esac ], [system_llvm="built-in"]) +AC_ARG_WITH([llvm-linking], [AC_HELP_STRING([--with-llvm-linking], +[specifies method to linking llvm @<:@static|dynamic@:>@, only valid with --with-system-llvm])], +[ +if test "x$system_llvm" = "xbuilt-in"; then + AC_MSG_ERROR([Failed to configure LLVM, and LLVM linking was specified without specifying system-llvm]) +else +case "$withval" in + static) + llvm_linking="static" + ;; + dynamic) + llvm_linking="dynamic" + ;; + *) + AC_MSG_ERROR([Invalid argument to --with-llvm-linking]) +esac +fi +], [ +if test "x$system_llvm" = "xbuilt-in"; then + llvm_linking="" +else + llvm_linking="auto" +fi +]) + AC_ARG_ENABLE([llvm],AC_HELP_STRING([--enable-llvm], [enable 'llvm' JIT/verifier support @<:@default=auto@:>@]), [enable_llvm=$enableval], @@ -29,4 +54,5 @@ if test "$enable_llvm" != "no"; then AC_CONFIG_SUBDIRS_OPTIONAL([libclamav/c++]) else system_llvm="none" + llvm_linking="" fi From 0d3609c58f4debb9277a1e4e80c1fb80e3c6fe7e Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Fri, 6 Feb 2015 15:00:00 -0800 Subject: [PATCH 05/15] autojunk'd --- configure | 63 ++++++++++++++++++++++++++++++++++++++--- libclamav/c++/configure | 54 ++++++++++++++++++++++++++++------- 2 files changed, 103 insertions(+), 14 deletions(-) diff --git a/configure b/configure index 5dbc955c9..f67ea7c6b 100755 --- a/configure +++ b/configure @@ -922,6 +922,7 @@ with_libncurses_prefix with_libpdcurses_prefix enable_distcheck_werror with_system_llvm +with_llvm_linking enable_llvm enable_sha_collector_for_internal_use with_libcurl @@ -1648,6 +1649,8 @@ Optional Packages: --with-system-llvm use system llvm instead of built-in, uses full path to llvm-config [default=/usr/local or /usr if not found in /usr/local] + --with-llvm-linking specifies method to linking llvm [static|dynamic], + only valid with --with-system-llvm --with-libcurl[=DIR] path to directory containing libcurl [default=/usr/local or /usr if not found in /usr/local] @@ -22721,6 +22724,36 @@ else fi + +# Check whether --with-llvm-linking was given. +if test "${with_llvm_linking+set}" = set; then : + withval=$with_llvm_linking; +if test "x$system_llvm" = "xbuilt-in"; then + as_fn_error $? "Failed to configure LLVM, and LLVM linking was specified without specifying system-llvm" "$LINENO" 5 +else +case "$withval" in + static) + llvm_linking="static" + ;; + dynamic) + llvm_linking="dynamic" + ;; + *) + as_fn_error $? "Invalid argument to --with-llvm-linking" "$LINENO" 5 +esac +fi + +else + +if test "x$system_llvm" = "xbuilt-in"; then + llvm_linking="" +else + llvm_linking="auto" +fi + +fi + + # Check whether --enable-llvm was given. if test "${enable_llvm+set}" = set; then : enableval=$enable_llvm; enable_llvm=$enableval @@ -22749,6 +22782,7 @@ subdirs="$subdirs libclamav/c++" else system_llvm="none" + llvm_linking="" fi # Check whether --enable-sha-collector-for-internal-use was given. @@ -25579,6 +25613,11 @@ fi if test "$enable_llvm" = "yes" && test "$subdirfailed" != "no"; then as_fn_error $? "Failed to configure LLVM, and LLVM was explicitly requested" "$LINENO" 5 fi +if test "$enable_llvm" = "auto" && test "$subdirfailed" != "no"; then + system_llvm="MIA" + llvm_linking="" +fi + if test "$subdirfailed" != "yes" && test "$enable_llvm" != "no"; then ENABLE_LLVM_TRUE= ENABLE_LLVM_FALSE='#' @@ -28227,8 +28266,8 @@ cat <&5 -$as_echo "$as_me: Summary of miscellaneous features" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: Summary of miscellaneous features" >&5 +$as_echo "$as_me: Summary of miscellaneous features" >&6;} if test "x$CHECK_LIBS" = "x"; then check_libs="no" else @@ -28345,8 +28384,8 @@ else fi -{ $as_echo "$as_me:${as_lineno-$LINENO}: Summary of engine performance features)" >&5 -$as_echo "$as_me: Summary of engine performance features)" >&6;} +{ $as_echo "$as_me:${as_lineno-$LINENO}: Summary of engine performance features" >&5 +$as_echo "$as_me: Summary of engine performance features" >&6;} if test "x$enable_debug" = "xyes"; then @@ -28380,6 +28419,7 @@ have_jit="no" if test "$subdirfailed" = "no"; then have_jit="yes" fi +if test "x$llvm_linking" = "x"; then $as_echo_n " llvm : " @@ -28393,6 +28433,21 @@ else $as_echo "$have_jit, from $system_llvm ($enable_llvm)" fi +else + + + $as_echo_n " llvm : " + if test "x$enable_llvm" = "xno"; then : + $as_echo "$have_jit, from $system_llvm ($llvm_linking) (disabled)" +elif test "x$enable_llvm" = "xyes"; then : + $as_echo "$have_jit, from $system_llvm ($llvm_linking)" +elif test "x$enable_llvm" = "x"; then : + $as_echo "$have_jit, from $system_llvm ($llvm_linking)" +else + $as_echo "$have_jit, from $system_llvm ($llvm_linking) ($enable_llvm)" +fi + +fi $as_echo_n " mempool : " diff --git a/libclamav/c++/configure b/libclamav/c++/configure index f7831e279..d467bc1e8 100755 --- a/libclamav/c++/configure +++ b/libclamav/c++/configure @@ -595,7 +595,6 @@ PACKAGE_STRING='libclamavc++ devel' PACKAGE_BUGREPORT='http://bugs.clamav.net' PACKAGE_URL='' -ac_unique_file="llvm/configure" # Factoring default headers for most tests. ac_includes_default="\ #include @@ -796,6 +795,7 @@ with_gnu_ld with_sysroot enable_libtool_lock with_system_llvm +with_llvm_linking enable_llvm enable_optimized enable_all_jit_targets @@ -1462,6 +1462,8 @@ Optional Packages: --with-system-llvm Use system llvm instead of built-in, uses full path to llvm-config (default= search /usr/local or /usr if not found in /usr/local) + --with-llvm-linking specifies method to linking llvm [static|dynamic], + only valid with --with-system-llvm Some influential environment variables: CXX C++ compiler command @@ -2361,7 +2363,6 @@ ac_configure="$SHELL $ac_aux_dir/configure" # Please don't use this var. - ac_config_headers="$ac_config_headers clamavcxx-config.h" # Make sure we can run config.sub. @@ -15628,6 +15629,29 @@ $as_echo "$as_me: Using external LLVM" >&6;} fi +llvm_linking= + +# Check whether --with-llvm-linking was given. +if test "${with_llvm_linking+set}" = set; then : + withval=$with_llvm_linking; +if test "x$llvmconfig" = "x"; then + as_fn_error $? "Failed to configure LLVM, and LLVM linking was specified without valid llvm-config" "$LINENO" 5 +else +case "$withval" in + static) + llvm_linking="static" + ;; + dynamic) + llvm_linking="dynamic" + ;; + *) + as_fn_error $? "Invalid argument to --with-llvm-linking" "$LINENO" 5 +esac +fi + +fi + + { $as_echo "$as_me:${as_lineno-$LINENO}: checking for supported LLVM version" >&5 $as_echo_n "checking for supported LLVM version... " >&6; } if test "x$llvmconfig" = "x"; then @@ -15668,18 +15692,28 @@ fi if test "x$llvmconfig" != "x"; then LLVMCONFIG_CXXFLAGS=`$llvmconfig --cxxflags` - if test $llvmver_test -ge 350; then - ldflags=`$llvmconfig --ldflags` - syslibs=`$llvmconfig --system-libs` - LLVMCONFIG_LDFLAGS="$ldflags $syslibs" - else + if test "x$llvm_linking" = "xdynamic"; then LLVMCONFIG_LDFLAGS=`$llvmconfig --ldflags` - fi - LLVMCONFIG_LIBS=`$llvmconfig --libs jit nativecodegen scalaropts ipo` + LLVMCONFIG_LIBS=-lLLVM-$llvmver + + + else + if test $llvmver_test -ge 350; then + ldflags=`$llvmconfig --ldflags` + syslibs=`$llvmconfig --system-libs` + LLVMCONFIG_LDFLAGS="$ldflags $syslibs" - LLVMCONFIG_LIBFILES=`$llvmconfig --libfiles jit nativecodegen scalaropts ipo` + else + LLVMCONFIG_LDFLAGS=`$llvmconfig --ldflags` + + fi + LLVMCONFIG_LIBS=`$llvmconfig --libs jit nativecodegen scalaropts ipo` + + LLVMCONFIG_LIBFILES=`$llvmconfig --libfiles jit nativecodegen scalaropts ipo` + + fi { $as_echo "$as_me:${as_lineno-$LINENO}: CXXFLAGS from llvm-config: $LLVMCONFIG_CXXFLAGS" >&5 $as_echo "$as_me: CXXFLAGS from llvm-config: $LLVMCONFIG_CXXFLAGS" >&6;} From f092d0a1a1aeeef83ff1503926163f7f8db272a1 Mon Sep 17 00:00:00 2001 From: Steven Morgan Date: Tue, 10 Feb 2015 15:16:48 -0500 Subject: [PATCH 06/15] bb11260: fix compile error when './configure --disable-pthreads' is specified. --- libclamav/stats.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/libclamav/stats.c b/libclamav/stats.c index 7e293c4a4..460ba5c70 100644 --- a/libclamav/stats.c +++ b/libclamav/stats.c @@ -282,6 +282,7 @@ end: cli_warnmsg("clamav_stats_add_sample: unlcoking mutex failed (err: %d): %s\n", err, strerror(err)); } #endif + return; } void clamav_stats_flush(struct cl_engine *engine, void *cbdata) @@ -492,6 +493,7 @@ void clamav_stats_decrement_count(const char *virname, const unsigned char *md5, cli_warnmsg("clamav_stats_decrement_count: unlocking mutex failed (err: %d): %s\n", err, strerror(err)); } #endif + return; } size_t clamav_stats_get_num(void *cbdata) From e1e27b8fff38b549d99a19591da126083830523d Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Fri, 13 Feb 2015 14:30:39 -0800 Subject: [PATCH 07/15] added subsig options documentation --- docs/signatures.tex | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/docs/signatures.tex b/docs/signatures.tex index 7e6a2e4b4..e7eddf1f9 100644 --- a/docs/signatures.tex +++ b/docs/signatures.tex @@ -585,6 +585,15 @@ Firefox.boundElements;Target:0;0&1&2;6576656e742e626f756e64456c6 22?window\.close\s*\x28/si \end{verbatim} + \subsection{Subsignature Options} + ClamAV (clamav-0.99) supports a number of additional subsignature options + for logical signatures. This is done by specifying a single '/' followed + by a number of characters representing the option. + \begin{itemize} + \item \verb+i+\\ + Match subsignature as case-insensitive. (ex. ..;42434445/i;..) + \end{itemize} + \subsection{Icon signatures for PE files} ClamAV 0.96 includes an approximate/fuzzy icon matcher to help detecting malicious executables disguising themselves as innocent From ef0861c52f8ba2a64cc02913ccdb188d5467f78a Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Fri, 13 Feb 2015 14:30:53 -0800 Subject: [PATCH 08/15] regenerated documentation --- docs/signatures.pdf | Bin 118030 -> 118811 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/docs/signatures.pdf b/docs/signatures.pdf index 3420aae68c16e1024a9edb3985609e16c96b7564..020416e31d1080d664b9afe919261325b3aea1e4 100644 GIT binary patch delta 15525 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 W7jp|(78Wjc9!^*a3JE1i*#85lymE>F From d10c234b437303a5fd02be37656b37ac61225786 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Mon, 16 Feb 2015 07:29:43 -0800 Subject: [PATCH 09/15] changed disabled pcre support debug message to warning --- libclamav/readdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libclamav/readdb.c b/libclamav/readdb.c index d5f923047..f7708516d 100644 --- a/libclamav/readdb.c +++ b/libclamav/readdb.c @@ -1435,7 +1435,7 @@ static int load_oneldb(char *buffer, int chkpua, struct cl_engine *engine, unsig /* Regex Usage and Support Check */ for (i = 0; i < subsigs; ++i) { if (strchr(tokens[i+3], '/')) { - cli_dbgmsg("cli_loadldb: logical signature for %s uses PCREs but support is disabled, skipping\n", virname); + cli_warnmsg("cli_loadldb: logical signature for %s uses PCREs but support is disabled, skipping\n", virname); (*sigs)--; return CL_SUCCESS; } From 0cc83247bcdac3b62da27d38490e3ec365d610ff Mon Sep 17 00:00:00 2001 From: Steven Morgan Date: Mon, 16 Feb 2015 11:46:21 -0500 Subject: [PATCH 10/15] bb11264 - patch for 'possible' heap overflow submitted by the Debian team. --- libclamav/regex/regcomp.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/libclamav/regex/regcomp.c b/libclamav/regex/regcomp.c index 7d638b262..aa0abdb6e 100644 --- a/libclamav/regex/regcomp.c +++ b/libclamav/regex/regcomp.c @@ -157,6 +157,7 @@ cli_regcomp_real(regex_t *preg, const char *pattern, int cflags) struct parse *p = &pa; int i; size_t len; + size_t maxlen; #ifdef REDEBUG # define GOODFLAGS(f) (f) #else @@ -179,7 +180,24 @@ cli_regcomp_real(regex_t *preg, const char *pattern, int cflags) (NC-1)*sizeof(cat_t)); if (g == NULL) return(REG_ESPACE); + /* Patch for bb11264 submitted by the Debian team: */ + /* + * Limit the pattern space to avoid a 32-bit overflow on buffer + * extension. Also avoid any signed overflow in case of conversion + * so make the real limit based on a 31-bit overflow. + * + * Likely not applicable on 64-bit systems but handle the case + * generically (who are we to stop people from using ~715MB+ + * patterns?). + */ + maxlen = ((size_t)-1 >> 1) / sizeof(sop) * 2 / 3; + if (len >= maxlen) { + free((char *)g); + return(REG_ESPACE); + } p->ssize = len/(size_t)2*(size_t)3 + (size_t)1; /* ugh */ + assert(p->ssize >= len); + p->strip = (sop *)cli_calloc(p->ssize, sizeof(sop)); p->slen = 0; if (p->strip == NULL) { From f1dd20b60723401ff84ee1c7a278344d063dd789 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Mon, 16 Feb 2015 10:25:36 -0800 Subject: [PATCH 11/15] force signatures with sigopts to the AC tree over BM --- libclamav/readdb.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libclamav/readdb.c b/libclamav/readdb.c index f7708516d..9757a3eb0 100644 --- a/libclamav/readdb.c +++ b/libclamav/readdb.c @@ -379,7 +379,7 @@ int cli_parse_add(struct cli_matcher *root, const char *virname, const char *hex free(pt); } - } else if(root->ac_only || type || lsigid || strpbrk(hexsig, "?([") || (root->bm_offmode && (!strcmp(offset, "*") || strchr(offset, ','))) || strstr(offset, "VI") || strchr(offset, '$')) { + } else if(root->ac_only || type || lsigid || sigopts || strpbrk(hexsig, "?([") || (root->bm_offmode && (!strcmp(offset, "*") || strchr(offset, ','))) || strstr(offset, "VI") || strchr(offset, '$')) { if((ret = cli_ac_addsig(root, virname, hexsig, sigopts, 0, 0, 0, rtype, type, 0, 0, offset, lsigid, options))) { cli_errmsg("cli_parse_add(): Problem adding signature (3).\n"); return ret; From 87c9b7429f57027e08277e73ff4011310bb75a91 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Wed, 18 Feb 2015 14:59:34 -0800 Subject: [PATCH 12/15] Revert "bb#11212 - fixed section boundary mismatch in MEW unpacker" This reverts commit 9a0eed3ae3ab4e36c21c4a3761565ca5564c61f2. --- libclamav/mew.c | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/libclamav/mew.c b/libclamav/mew.c index 2a126af11..0b93bf215 100644 --- a/libclamav/mew.c +++ b/libclamav/mew.c @@ -827,9 +827,7 @@ int unmew11(char *src, int off, int ssize, int dsize, uint32_t base, uint32_t va if (!uselzma) { - /* bb#11212 - DO NOT PEALIGN sections to cli_rebuildpe() * - * data processed in src buffer is stored NOT pe-aligned */ - uint32_t val = f2 - src; + uint32_t val = PESALIGN(f2 - src, 0x1000); void *newsect; if (i && val < section[i].raw) { From 22bcb9b2873e663cd62cc693a7670c875a88bca8 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Wed, 18 Feb 2015 15:23:54 -0800 Subject: [PATCH 13/15] bb#11212 - alternate fix in MEW unpacker --- libclamav/mew.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/libclamav/mew.c b/libclamav/mew.c index 0b93bf215..781c0b1ea 100644 --- a/libclamav/mew.c +++ b/libclamav/mew.c @@ -848,6 +848,18 @@ int unmew11(char *src, int off, int ssize, int dsize, uint32_t base, uint32_t va section[i+1].raw = val; section[i+1].rva = val + vadd; section[i].rsz = section[i].vsz = ((i)?(val - section[i].raw):val); + + /* + * bb#11212 - alternate fix, buffer is aligned + * must validate that sections do not intersect with source + * or, in other words, exceed the specified size of destination + */ + if (section[i].raw + section[i].rsz > dsize) { + cli_dbgmsg("MEW: Section %i [%d, %d] exceeds destination size %d\n", + i, section[i].raw, section[i].raw+section[i].rsz, dsize); + free(section); + return -1; + } } i++; From e77937b4f7b3dae0685b104848516da3be1b2959 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Thu, 19 Feb 2015 08:03:33 -0800 Subject: [PATCH 14/15] bb#11265 - fixed clambc referencing obsolete option --- clambc/bcrun.c | 13 ++++++++++--- 1 file changed, 10 insertions(+), 3 deletions(-) diff --git a/clambc/bcrun.c b/clambc/bcrun.c index 62abad8b1..6e1b747db 100644 --- a/clambc/bcrun.c +++ b/clambc/bcrun.c @@ -246,7 +246,7 @@ int main(int argc, char *argv[]) FILE *f; struct cli_bc *bc; struct cli_bc_ctx *ctx; - int rc, dbgargc; + int rc, dbgargc, bc_stats=0; struct optstruct *opts; const struct optstruct *opt; unsigned funcid=0, i; @@ -319,8 +319,15 @@ int main(int argc, char *argv[]) bcs.all_bcs = bc; bcs.count = 1; - rc = cli_bytecode_load(bc, f, NULL, optget(opts, "trust-bytecode")->enabled, - optget(opts, "bytecode-statistics")->enabled); + if((opt = optget(opts, "statistics"))->enabled) { + while(opt) { + if (!strcasecmp(opt->strarg, "bytecode")) + bc_stats=1; + opt = opt->nextarg; + } + } + + rc = cli_bytecode_load(bc, f, NULL, optget(opts, "trust-bytecode")->enabled, bc_stats); if (rc != CL_SUCCESS) { fprintf(stderr,"Unable to load bytecode: %s\n", cl_strerror(rc)); optfree(opts); From c94a95b821a2e6447e2fea5b37b1e0ac4af93e30 Mon Sep 17 00:00:00 2001 From: Kevin Lin Date: Thu, 19 Feb 2015 12:47:20 -0500 Subject: [PATCH 15/15] updated documentation on '--statistics' option --- clambc/bcrun.c | 2 +- clamscan/clamscan.c | 2 +- docs/man/clambc.1.in | 2 +- docs/man/clamscan.1.in | 4 ++-- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/clambc/bcrun.c b/clambc/bcrun.c index 6e1b747db..67125b098 100644 --- a/clambc/bcrun.c +++ b/clambc/bcrun.c @@ -62,7 +62,7 @@ static void help(void) printf(" --printbcir -c Print IR of bytecode signature\n"); printf(" --trace -T Set bytecode trace level 0..7 (default 7)\n"); printf(" --no-trace-showsource -s Don't show source line during tracing\n"); - printf(" --bytecode-statistics Collect and print bytecode execution statistics\n"); + printf(" --statistics=bytecode Collect and print bytecode execution statistics\n"); printf(" file file to test\n"); printf("\n"); return; diff --git a/clamscan/clamscan.c b/clamscan/clamscan.c index f9ff1eb94..828c20aec 100644 --- a/clamscan/clamscan.c +++ b/clamscan/clamscan.c @@ -239,7 +239,7 @@ void help(void) mprintf(" --bytecode[=yes(*)/no] Load bytecode from the database\n"); mprintf(" --bytecode-unsigned[=yes/no(*)] Load unsigned bytecode\n"); mprintf(" --bytecode-timeout=N Set bytecode timeout (in milliseconds)\n"); - mprintf(" --bytecode-statistics[=yes/no(*)] Collect and print bytecode statistics\n"); + mprintf(" --statistics[=none(*)/bytecode/pcre] Collect and print execution statistics\n"); mprintf(" --detect-pua[=yes/no(*)] Detect Possibly Unwanted Applications\n"); mprintf(" --exclude-pua=CAT Skip PUA sigs of category CAT\n"); mprintf(" --include-pua=CAT Load PUA sigs of category CAT\n"); diff --git a/docs/man/clambc.1.in b/docs/man/clambc.1.in index 60b0a3b61..2e923d096 100644 --- a/docs/man/clambc.1.in +++ b/docs/man/clambc.1.in @@ -39,7 +39,7 @@ Set bytecode trace level 0..7 (default 7) \fB\-\-no\-trace\-showsource\fR Don't show source line during tracing .TP -\fB\-\-bytecode\-statistics\fR +\fB\-\-statistics=bytecode\fR Collect and print bytecode execution statistics .TP file diff --git a/docs/man/clamscan.1.in b/docs/man/clamscan.1.in index f280d2814..f42f6222d 100644 --- a/docs/man/clamscan.1.in +++ b/docs/man/clamscan.1.in @@ -102,8 +102,8 @@ Allow loading bytecode from outside digitally signed .c[lv]d files. \fB\-\-bytecode\-timeout=N\fR Set bytecode timeout in milliseconds (default: 60000 = 60s) .TP -\fB\-\-bytecode\-statistics[=yes/no(*)]\fR -Collect and print bytecode statistics. +\fB\-\-statistics[=none(*)/bytecode/pcre]\fR +Collect and print execution statistics. .TP \fB\-\-detect\-pua[=yes/no(*)]\fR Detect Possibly Unwanted Applications.