From: Alex Richardson Date: Thu, 17 Sep 2020 17:14:58 +0000 (+0100) Subject: Avoid mismatch between library and test crypto configuration X-Git-Tag: v3.5.0~15^2 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=0d8b61ea93fb1cd54d30d21823b0bc4d15347f2a;p=thirdparty%2Flibarchive.git Avoid mismatch between library and test crypto configuration I was investigating libarchive test failures on FreeBSD and it turns out we get a reproducible SIGBUS for test_archive_m5, etc. Debugging this shows that libarchive and the tests disagree when it comes to the definition of archive_md5_ctx: libarchive assumes it's the OpenSSL type whereas the test use the libmd type. The latter is not necessarily aligned enough to store a pointer (16 bytes for CHERI RISC-V), so we were crashing when storing EVP_MD_CTX* to an 8-byte-aligned archive_md5_ctx. To avoid problems like this in the future, add a new macro to the config header and use that to ensure that all configuration check macros have been defined in archive_digest_private.h. --- diff --git a/build/cmake/config.h.in b/build/cmake/config.h.in index fcbd80c5a..6d2fa7469 100644 --- a/build/cmake/config.h.in +++ b/build/cmake/config.h.in @@ -1,4 +1,5 @@ /* config.h. Generated from build/cmake/config.h.in by cmake configure */ +#define __LIBARCHIVE_CONFIG_H_INCLUDED 1 /* * Ensure we have C99-style int64_t, etc, all defined. diff --git a/configure.ac b/configure.ac index fbb7b3c25..65c889a2f 100644 --- a/configure.ac +++ b/configure.ac @@ -47,6 +47,8 @@ ARCHIVE_REVISION=$(( LIBARCHIVE_VERSION_N() % 1000 )) ARCHIVE_LIBTOOL_VERSION=$ARCHIVE_INTERFACE:$ARCHIVE_REVISION:$ARCHIVE_MINOR # Stick the version numbers into config.h +AC_DEFINE([__LIBARCHIVE_CONFIG_H_INCLUDED], [1], + [Internal macro for sanity checks]) AC_DEFINE([LIBARCHIVE_VERSION_STRING],"LIBARCHIVE_VERSION_S()", [Version number of libarchive]) AC_DEFINE_UNQUOTED([LIBARCHIVE_VERSION_NUMBER],"LIBARCHIVE_VERSION_N()", diff --git a/libarchive/archive_digest_private.h b/libarchive/archive_digest_private.h index 15312ee9a..9b3bd6621 100644 --- a/libarchive/archive_digest_private.h +++ b/libarchive/archive_digest_private.h @@ -30,6 +30,10 @@ #ifndef __LIBARCHIVE_BUILD #error This header is only to be used internally to libarchive. #endif +#ifndef __LIBARCHIVE_CONFIG_H_INCLUDED +#error "Should have include config.h first!" +#endif + /* * Crypto support in various Operating Systems: * diff --git a/libarchive/config_freebsd.h b/libarchive/config_freebsd.h index f16fd3495..a05121c78 100644 --- a/libarchive/config_freebsd.h +++ b/libarchive/config_freebsd.h @@ -24,6 +24,7 @@ * * $FreeBSD$ */ +#define __LIBARCHIVE_CONFIG_H_INCLUDED 1 #include