svn commit: r365876 - in head/lib/libarchive: . tests

Alex Richardson arichardson at FreeBSD.org
Fri Sep 18 11:22:35 UTC 2020


Author: arichardson
Date: Fri Sep 18 11:22:34 2020
New Revision: 365876
URL: https://svnweb.freebsd.org/changeset/base/365876

Log:
  libarchive: fix mismatch between library and test configuration
  
  I was investigating libarchive test failures on CheriBSD 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, factor out the common compiler
  flags into a Makefile.inc and include that from the tests Makefile.
  
  Reviewed By:	lwhsu
  Differential Revision: https://reviews.freebsd.org/D26469

Added:
  head/lib/libarchive/Makefile.inc   (contents, props changed)
Modified:
  head/lib/libarchive/Makefile
  head/lib/libarchive/tests/Makefile

Modified: head/lib/libarchive/Makefile
==============================================================================
--- head/lib/libarchive/Makefile	Fri Sep 18 11:04:16 2020	(r365875)
+++ head/lib/libarchive/Makefile	Fri Sep 18 11:22:34 2020	(r365876)
@@ -6,29 +6,13 @@ _LIBARCHIVEDIR=	${SRCTOP}/contrib/libarchive
 
 LIB=	archive
 
-LIBADD=	z bz2 lzma bsdxml zstd
-CFLAGS+= -DHAVE_BZLIB_H=1 -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1 -DHAVE_ZSTD_H=1 -DHAVE_LIBZSTD=1
-
 # FreeBSD SHLIB_MAJOR value is managed as part of the FreeBSD system.
 # It has no real relation to the libarchive version number.
 SHLIB_MAJOR= 7
 
-CFLAGS+=	-DPLATFORM_CONFIG_H=\"${.CURDIR}/config_freebsd.h\"
 CFLAGS+=	-I${.OBJDIR}
 CFLAGS+=	-I${SRCTOP}/sys/contrib/zstd/lib
-
-.if ${MK_OPENSSL} != "no"
-CFLAGS+=	-DWITH_OPENSSL
-LIBADD+=	crypto
-.else
-LIBADD+=	md
-.endif
-
-.if ${MK_ICONV} != "no"
-# TODO: This can be changed back to CFLAGS once iconv works correctly
-# with statically linked binaries.
-SHARED_CFLAGS+=	-DHAVE_ICONV=1 -DHAVE_ICONV_H=1 -DICONV_CONST=
-.endif
+.include "Makefile.inc"
 
 .if ${MACHINE_ARCH:Marm*} != "" || ${MACHINE_ARCH:Mmips*} != "" || \
 	${MACHINE_ARCH:Mpowerpc*} != ""

Added: head/lib/libarchive/Makefile.inc
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/lib/libarchive/Makefile.inc	Fri Sep 18 11:22:34 2020	(r365876)
@@ -0,0 +1,21 @@
+# $FreeBSD$
+# These defines are needed for both libarchive and the tests. If we don't keep
+# them in sync we can get run-time crashes while running tests due to mismatches
+# between structures such as archive_md5_ctx, etc.
+
+LIBADD=	z bz2 lzma bsdxml zstd
+CFLAGS+=	-DHAVE_BZLIB_H=1 -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1 -DHAVE_ZSTD_H=1 -DHAVE_LIBZSTD=1
+CFLAGS+=	-DPLATFORM_CONFIG_H=\"${.CURDIR}/config_freebsd.h\"
+
+.if ${MK_OPENSSL} != "no"
+CFLAGS+=	-DWITH_OPENSSL
+LIBADD+=	crypto
+.else
+LIBADD+=	md
+.endif
+
+.if ${MK_ICONV} != "no"
+# TODO: This can be changed back to CFLAGS once iconv works correctly
+# with statically linked binaries.
+SHARED_CFLAGS+=	-DHAVE_ICONV=1 -DHAVE_ICONV_H=1 -DICONV_CONST=
+.endif

Modified: head/lib/libarchive/tests/Makefile
==============================================================================
--- head/lib/libarchive/tests/Makefile	Fri Sep 18 11:04:16 2020	(r365875)
+++ head/lib/libarchive/tests/Makefile	Fri Sep 18 11:22:34 2020	(r365876)
@@ -1,4 +1,5 @@
 # $FreeBSD$
+.include <src.opts.mk>
 
 PACKAGE=	tests
 
@@ -15,7 +16,7 @@ PROGS+=	libarchive_test
 CFLAGS+= -I${.CURDIR} -I${.CURDIR:H} -I${.OBJDIR}
 CFLAGS+= -I${_LIBARCHIVEDIR}/libarchive -I${_LIBARCHIVEDIR}/libarchive/test
 CFLAGS+= -I${_LIBARCHIVEDIR}/test_utils
-CFLAGS+= -DHAVE_LIBLZMA=1 -DHAVE_LZMA_H=1
+.include "../Makefile.inc"
 
 # Uncomment to link against dmalloc
 #LDADD+= -L/usr/local/lib -ldmalloc
@@ -298,10 +299,6 @@ TESTS_SRCS= \
 	test_zip_filename_encoding.c
 
 # Deterministic failures:
-# Crashes with SIGBUS
-BROKEN_TESTS+=			test_archive_rmd160
-# Fails with `libarchive/test/test_archive_crypto.c:121: md != actualmd`
-BROKEN_TESTS+=			test_archive_sha384
 # Fails with `test_read_disk_directory_traversals.c:1094: File at has atime 886622, 1443306049 seconds ago`
 BROKEN_TESTS+=			test_read_disk_directory_traversals
 


More information about the svn-src-all mailing list