Skip to content

Commit

Permalink
security/afl++: Update to 3.14c
Browse files Browse the repository at this point in the history
Build two flavors, one compiled with LLVM13 and one with GCC.  Mixing
compilers in the same build is too complicated for casual maintainance.
The flavors are installed into their own prefixes in /usr/local/afl++-gcc
and /usr/local/afl++-llvm which also solves the conflict with
security/afl.

Changes:	https://github.com/AFLplusplus/AFLplusplus/blob/3.14c/docs/Changelog.md#version-314c-release
  • Loading branch information
Tobias Kortkamp authored and Tobias Kortkamp committed Oct 12, 2021
1 parent 0e64cf1 commit 77ae106
Show file tree
Hide file tree
Showing 8 changed files with 60 additions and 380 deletions.
148 changes: 46 additions & 102 deletions security/afl++/Makefile
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
# Created by: Fabian Keil <fk@fabiankeil.de>

PORTNAME= afl
PORTVERSION= 2.63c
PORTVERSION= 3.14c
CATEGORIES= security
PKGNAMESUFFIX= ++
PKGNAMESUFFIX= ++-${FLAVOR}

MAINTAINER= ports@FreeBSD.org
MAINTAINER= tobik@FreeBSD.org
COMMENT= Fast instrumented fuzzer

LICENSE= APACHE20
Expand All @@ -15,122 +15,66 @@ ONLY_FOR_ARCHS= aarch64 amd64 i386 powerpc64 powerpc64le
ONLY_FOR_ARCHS_REASON= uses x86-only instrumentation or requires complete LLVM support

BUILD_DEPENDS= ginstall:sysutils/coreutils
TEST_DEPENDS= bash:shells/bash

FLAVORS= llvm gcc
FLAVOR?= ${FLAVORS:[1]}

_LLVM_VER= 13
llvm_BUILD_DEPENDS= clang${_LLVM_VER}:devel/llvm${_LLVM_VER}
llvm_RUN_DEPENDS= clang${_LLVM_VER}:devel/llvm${_LLVM_VER}

USES= gmake tar:tgz
.if ${FLAVOR} == gcc
USE_GCC= yes
.endif
USE_GITHUB= yes
GH_ACCOUNT= AFLplusplus
GH_PROJECT= AFLplusplus

MAKEFILE= GNUmakefile
MAKE_ARGS= STRIP_CMD="${STRIP_CMD}"
ALL_TARGET= all libtokencap
INSTALL_TARGET= install-strip
TEST_TARGET= test_build

CONFLICTS_INSTALL= afl
MAKE_ARGS= ${${ARCH} != amd64 && ${ARCH} != i386:?AFL_NO_X86=1:} \
PREFIX="${PREFIX}/${PKGBASE}"
.if ${FLAVOR} == llvm
MAKE_ARGS+= CC=clang${_LLVM_VER} \
CXX=clang++${_LLVM_VER} \
LLVM_CONFIG=llvm-config${_LLVM_VER}
.endif
ALL_TARGET= distrib
QA_ENV= IGNORE_QA_stripped=1 # unstripped to keep it functional

DOCSDIR= ${PREFIX}/${PKGBASE}/share/doc/afl
MANDIRS= ${PREFIX}/${PKGBASE}/share/man/man8
BINARY_ALIAS= install=ginstall
PORTDOCS= *

OPTIONS_DEFINE= DEBUG DOCS EXAMPLES GCC LIBDISLOCATOR LLVM PYTHON
OPTIONS_DEFAULT= GCC LIBDISLOCATOR LLVM PYTHON

# On non-x86 architectures LLVM is mandatory
OPTIONS_SLAVE= ${ARCH:Namd64:Ni386:S/${ARCH}/LLVM/}
OPTIONS_SUB= yes

GCC_DESC= Build GCC plugin and afl-gcc-fast
LIBDISLOCATOR_DESC= Abusive allocator for uncovering heap-related bugs
LLVM_DESC= LLVM-based instrumentation
PYTHON_DESC= Python mutators support

GCC_BUILD_DEPENDS= gcc${GCC_DEFAULT}>0:lang/gcc${GCC_DEFAULT}
GCC_RUN_DEPENDS= gcc${GCC_DEFAULT}>0:lang/gcc${GCC_DEFAULT}
GCC_MAKE_ARGS= GCC=gcc${GCC_DEFAULT:S/-devel$//} \
GXX=g++${GCC_DEFAULT:S/-devel$//}
GCC_ALL_TARGET= gcc_plugin
GCC_TEST_TARGET= test_gcc_plugin

LIBDISLOCATOR_ALL_TARGET= libdislocator

LLVM_BUILD_DEPENDS= clang${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT}
LLVM_RUN_DEPENDS= clang${LLVM_DEFAULT}:devel/llvm${LLVM_DEFAULT}
LLVM_MAKE_ARGS= _AFL_REAL_LD=${LOCALBASE}/bin/ld.lld${LLVM_DEFAULT} \
CC=clang${LLVM_DEFAULT} \
CXX=clang++${LLVM_DEFAULT} \
LLVM_CONFIG=llvm-config${LLVM_DEFAULT}
LLVM_ALL_TARGET= llvm_mode
LLVM_TEST_TARGET= test_llvm_mode
LLVM_BINARY_ALIAS= llvm-config=llvm-config${LLVM_DEFAULT}

PYTHON_USES= gettext-runtime python:3.7
PYTHON_MAKE_ARGS_OFF= PYTHON_INCLUDE=/nonexistent

.include <bsd.port.options.mk>

.if ${ARCH} == "i386" || ${ARCH} == "amd64"
PLIST_SUB+= X86=""
.else
MAKE_ARGS+= AFL_NO_X86=1
PLIST_SUB+= X86="@comment "
.endif
OPTIONS_DEFINE= DEBUG DOCS PYTHON
OPTIONS_DEFAULT= PYTHON

.if ${ARCH} == "i386"
# Clang i386 emits .cfi_sections which base as(1) doesn't understand
BUILD_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
RUN_DEPENDS+= ${LOCALBASE}/bin/as:devel/binutils
.endif
PYTHON_DESC= Python mutators support

PYTHON_USES= gettext-runtime python
PYTHON_BINARY_ALIAS= python3-config=${PYTHON_CMD}-config \
python3=${PYTHON_CMD}

post-patch:
# Disable the instrumentation tests to make sure building packages in
# jails works by default. afl needs shmget() which usually isn't
# available in jails.
@${REINPLACE_CMD} 's@^\(all.*\) test_build@\1@' \
${WRKSRC}/${MAKEFILE} \
${WRKSRC}/gcc_plugin/GNUmakefile \
${WRKSRC}/llvm_mode/GNUmakefile
.if ${ARCH} == "i386"
@${REINPLACE_CMD} '/alt_cc/ s,"gcc","gcc${GCC_DEFAULT:S/-devel$//}",' \
${WRKSRC}/src/afl-cc.c
.if ${FLAVOR} == gcc
@${REINPLACE_CMD} 's@\( as_params\[0\] = afl_as ? afl_as : \)\(.*\)@\1(u8*)"${LOCALBASE}/bin/as";@' \
${WRKSRC}/src/afl-as.c
.elif ${FLAVOR} == llvm
@${ECHO_CMD} "all:" >${WRKSRC}/GNUmakefile.gcc_plugin
.endif
@${ECHO_CMD} "include ${FILESDIR}/Makefile.extra" >> ${WRKSRC}/${MAKEFILE}

post-patch-LLVM-on:
@${REINPLACE_CMD} \
-e 's|"clang"|"clang${LLVM_DEFAULT}"|g' \
-e 's|"clang\+\+"|"clang\+\+${LLVM_DEFAULT}"|g' \
${WRKSRC}/llvm_mode/afl-clang-fast.c

post-install:
@${MKDIR} ${STAGEDIR}${DOCSDIR}/libtokencap
${INSTALL_MAN} ${WRKSRC}/libtokencap/README.md \
${STAGEDIR}${DOCSDIR}/libtokencap
@cd ${STAGEDIR}${PREFIX} && \
${FIND} lib/afl -name 'argvfuzz*.so' -or -name 'socketfuzz*.so' \
>> ${TMPPLIST}

post-install-EXAMPLES-on:
@${MKDIR} ${STAGEDIR}${EXAMPLESDIR}/custom_mutators
@cd ${WRKSRC}/examples && \
${COPYTREE_SHARE} custom_mutators ${STAGEDIR}${EXAMPLESDIR}

post-install-GCC-on:
@${MKDIR} ${STAGEDIR}${DOCSDIR}/gcc_plugin
${INSTALL_MAN} ${WRKSRC}/gcc_plugin/README.* \
${STAGEDIR}${DOCSDIR}/gcc_plugin

post-install-LIBDISLOCATOR-on:
@${MKDIR} ${STAGEDIR}${DOCSDIR}/libdislocator
${INSTALL_MAN} ${WRKSRC}/libdislocator/README.md \
${STAGEDIR}${DOCSDIR}/libdislocator

post-install-LLVM-on:
${MKDIR} ${STAGEDIR}${DOCSDIR}/llvm_mode
${INSTALL_MAN} ${WRKSRC}/llvm_mode/README.* \
${STAGEDIR}${DOCSDIR}/llvm_mode

post-test:
# libtokencap test might require security.bsd.unprivileged_proc_debug=1
@cd ${WRKSRC}/test && ${SETENV} AFL_PATH=${WRKSRC} ./test.sh
@${MKDIR} ${STAGEDIR}${PREFIX}/etc/man.d
@${ECHO_CMD} "MANPATH ${PREFIX}/${PKGBASE}/share/man" >${STAGEDIR}${PREFIX}/etc/man.d/${PKGBASE}.conf
@${ECHO_CMD} "etc/man.d/${PKGBASE}.conf" >>${TMPPLIST}
@cd ${STAGEDIR}${PREFIX}; \
${FIND} ${PKGBASE} -not -path '${PKGBASE}/share/doc/*' -and \( -type f -or -type l \) | \
${SED} -Ee 's,^afl\+\+-${FLAVOR}/share/man/.*,&.gz,' \
-e 's,^.*/afl-${${FLAVOR} == gcc:?(clang|llvm):(gcc|g\+\+)}.*,@comment &,' | \
${SORT} >> ${TMPPLIST}
@${CAT} ${TMPPLIST}

.include <bsd.port.mk>
6 changes: 3 additions & 3 deletions security/afl++/distinfo
Original file line number Diff line number Diff line change
@@ -1,3 +1,3 @@
TIMESTAMP = 1586436254
SHA256 (AFLplusplus-AFLplusplus-2.63c_GH0.tar.gz) = 9c314899015620a9e57054f15f3fed29104c0f762098e30707267ef70be1add8
SIZE (AFLplusplus-AFLplusplus-2.63c_GH0.tar.gz) = 1326005
TIMESTAMP = 1633793558
SHA256 (AFLplusplus-AFLplusplus-3.14c_GH0.tar.gz) = 36552e3aac5c390dfec4f75d0dd60dc802c3e97b8baf042aa1edb6529dba0766
SIZE (AFLplusplus-AFLplusplus-3.14c_GH0.tar.gz) = 2162934
26 changes: 0 additions & 26 deletions security/afl++/files/Makefile.extra

This file was deleted.

14 changes: 0 additions & 14 deletions security/afl++/files/patch-include_types.h

This file was deleted.

11 changes: 11 additions & 0 deletions security/afl++/files/patch-src_afl-cc.c
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
--- src/afl-cc.c.orig 2021-10-09 18:30:48 UTC
+++ src/afl-cc.c
@@ -395,7 +395,7 @@ static void edit_params(u32 argc, char **argv, char **
snprintf(llvm_fullpath, sizeof(llvm_fullpath), "%s/clang",
LLVM_BINDIR);
else
- snprintf(llvm_fullpath, sizeof(llvm_fullpath), CLANGPP_BIN);
+ snprintf(llvm_fullpath, sizeof(llvm_fullpath), CLANG_BIN);
alt_cc = llvm_fullpath;

}
70 changes: 0 additions & 70 deletions security/afl++/files/patch-test_test.sh

This file was deleted.

Loading

0 comments on commit 77ae106

Please sign in to comment.