Add install-fuzz Makefile target to install the fuzzers and seed corpus.

The FUZZ_DESTDIR make variable needs to be set in the environment
or on the command line.
This commit is contained in:
Todd C. Miller
2021-02-18 19:38:54 -07:00
parent 5ea2acc4c2
commit 9f1e016cde
19 changed files with 167 additions and 10 deletions

View File

@@ -174,7 +174,7 @@ pvs-studio: config.status
fi; \
plog-converter $(PVS_LOG_OPTS) $$files
install-dirs install-binaries install-includes install-plugin: config.status pre-install
install-dirs install-binaries install-fuzzer install-includes install-plugin: config.status pre-install
for d in $(SUBDIRS); do \
(cd $$d && exec $(MAKE) "INSTALL_OWNER=$(INSTALL_OWNER)" $@) && continue; \
exit $$?; \

View File

@@ -378,6 +378,8 @@ install-doc: install-dirs
install-plugin:
install-fuzzer:
uninstall:
-rm -rf $(DESTDIR)$(docdir)
-rm -f $(DESTDIR)$(mandirexe)/cvtsudoers.1 \

View File

@@ -91,6 +91,8 @@ install-doc: install-dirs
install-plugin:
install-fuzzer:
uninstall:
-rm -rf $(DESTDIR)$(exampledir)

View File

@@ -77,6 +77,8 @@ install-includes: install-dirs
install-plugin:
install-fuzzer:
uninstall:
-rm -f $(DESTDIR)$(includedir)/sudo_plugin.h

View File

@@ -134,6 +134,8 @@ install-doc:
install-plugin:
install-fuzzer:
uninstall:
splint:

View File

@@ -127,6 +127,8 @@ install-doc:
install-plugin:
install-fuzzer:
uninstall:
splint:

View File

@@ -84,6 +84,7 @@ TEST_LDFLAGS = @LDFLAGS@
LIBFUZZSTUB = $(top_builddir)/lib/fuzzstub/libsudo_fuzzstub.la
LIB_FUZZING_ENGINE = @FUZZ_ENGINE@
FUZZ_PROGS = fuzz_iolog_json fuzz_iolog_legacy fuzz_iolog_timing
FUZZ_SEED_CORPUS = ${FUZZ_PROGS:=_seed_corpus.zip}
FUZZ_LIBS = @LIBS@ $(LIB_FUZZING_ENGINE)
FUZZ_LDFLAGS = @LDFLAGS@
@@ -113,10 +114,16 @@ HOST_PORT_TEST_OBJS = host_port_test.lo host_port.lo
FUZZ_IOLOG_JSON_OBJS = fuzz_iolog_json.lo
FUZZ_IOLOG_JSON_CORPUS = $(srcdir)/regress/corpus/log_json/*.json
FUZZ_IOLOG_LEGACY_OBJS = fuzz_iolog_legacy.lo
FUZZ_IOLOG_LEGACY_CORPUS = $(srcdir)/regress/corpus/log_legacy/*.log
FUZZ_IOLOG_TIMING_OBJS = fuzz_iolog_timing.lo
FUZZ_IOLOG_TIMING_CORPUS = $(srcdir)/regress/corpus/timing/timing.*
all: libsudo_iolog.la
pvs-log-files: $(POBJS)
@@ -170,6 +177,33 @@ fuzz_iolog_legacy: $(FUZZ_IOLOG_LEGACY_OBJS) $(LIBFUZZSTUB) libsudo_iolog.la
fuzz_iolog_timing: $(FUZZ_IOLOG_TIMING_OBJS) $(LIBFUZZSTUB) libsudo_iolog.la
$(LIBTOOL) $(LTFLAGS) --mode=link @FUZZ_LD@ -o $@ $(FUZZ_IOLOG_TIMING_OBJS) libsudo_iolog.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(FUZZ_LDFLAGS) $(FUZZ_LIBS)
fuzz_iolog_json_seed_corpus.zip:
tdir=fuzz_iolog_json.$$$$; \
mkdir $$tdir; \
for f in $(FUZZ_IOLOG_JSON_CORPUS); do \
cp $$f $$tdir/`sha1sum $$f | cut -d' ' -f1`; \
done; \
zip -j $@ $$tdir/*; \
rm -rf $$tdir
fuzz_iolog_legacy_seed_corpus.zip:
tdir=fuzz_iolog_legacy.$$$$; \
mkdir $$tdir; \
for f in $(FUZZ_IOLOG_LEGACY_CORPUS); do \
cp $$f $$tdir/`sha1sum $$f | cut -d' ' -f1`; \
done; \
zip -j $@ $$tdir/*; \
rm -rf $$tdir
fuzz_iolog_timing_seed_corpus.zip:
tdir=fuzz_iolog_timing.$$$$; \
mkdir $$tdir; \
for f in $(FUZZ_IOLOG_TIMING_CORPUS); do \
cp $$f $$tdir/`sha1sum $$f | cut -d' ' -f1`; \
done; \
zip -j $@ $$tdir/*; \
rm -rf $$tdir
pre-install:
install:
@@ -182,6 +216,13 @@ install-doc:
install-plugin:
install-fuzzer: $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS)
@if test X"$(FUZZ_DESTDIR)" = X""; then \
echo "must set FUZZ_DESTDIR for install-fuzzer target"; \
else \
cp $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS) $(FUZZ_DESTDIR); \
fi
uninstall:
splint:
@@ -197,11 +238,11 @@ fuzz: $(FUZZ_PROGS)
MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \
MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \
echo "fuzz_iolog_legacy: verifying corpus"; \
./fuzz_iolog_legacy $(srcdir)/regress/corpus/log_legacy/*.log; \
./fuzz_iolog_legacy $(FUZZ_IOLOG_LEGACY_CORPUS); \
echo "fuzz_iolog_json: verifying corpus"; \
./fuzz_iolog_json $(srcdir)/regress/corpus/log_json/*.json; \
./fuzz_iolog_json $(FUZZ_IOLOG_JSON_CORPUS); \
echo "fuzz_iolog_timing: verifying corpus"; \
./fuzz_iolog_timing $(srcdir)/regress/corpus/timing/timing.*; \
./fuzz_iolog_timing $(FUZZ_IOLOG_TIMING_CORPUS); \
fi
check: $(TEST_PROGS) fuzz
@@ -236,6 +277,8 @@ realclean: distclean
cleandir: realclean
.PHONY: $(FUZZ_SEED_CORPUS)
# Autogenerated dependencies, do not modify
check_iolog_json.lo: $(srcdir)/regress/iolog_json/check_iolog_json.c \
$(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \

View File

@@ -136,6 +136,8 @@ install-doc:
install-plugin:
install-fuzzer:
uninstall:
splint:

View File

@@ -113,6 +113,7 @@ TEST_LDFLAGS = @LDFLAGS@
LIBFUZZSTUB = $(top_builddir)/lib/fuzzstub/libsudo_fuzzstub.la
LIB_FUZZING_ENGINE = @FUZZ_ENGINE@
FUZZ_PROGS = fuzz_sudo_conf
FUZZ_SEED_CORPUS = ${FUZZ_PROGS:=_seed_corpus.zip}
FUZZ_LIBS = @LIBS@ $(LIB_FUZZING_ENGINE)
FUZZ_LDFLAGS = @LDFLAGS@
@@ -175,6 +176,8 @@ VSYSLOG_TEST_OBJS = vsyslog_test.lo vsyslog.lo
FUZZ_SUDO_CONF_OBJS = fuzz_sudo_conf.lo
FUZZ_SUDO_CONF_CORPUS = $(srcdir)/regress/corpus/sudo_conf/sudo.conf.*
all: libsudo_util.la
pvs-log-files: $(POBJS)
@@ -291,6 +294,15 @@ vsyslog_test: $(VSYSLOG_TEST_OBJS) libsudo_util.la
fuzz_sudo_conf: $(FUZZ_SUDO_CONF_OBJS) $(LIBFUZZSTUB) libsudo_util.la
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(FUZZ_SUDO_CONF_OBJS) libsudo_util.la $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(FUZZ_LDFLAGS) $(FUZZ_LIBS)
fuzz_sudo_conf_seed_corpus.zip:
tdir=fuzz_sudo_conf.$$$$; \
mkdir $$tdir; \
for f in $(FUZZ_SUDO_CONF_CORPUS); do \
cp $$f $$tdir/`sha1sum $$f | cut -d' ' -f1`; \
done; \
zip -j $@ $$tdir/*; \
rm -rf $$tdir
pre-install:
install: install-dirs
@@ -312,6 +324,13 @@ install-doc:
install-plugin:
install-fuzzer: $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS)
@if test X"$(FUZZ_DESTDIR)" = X""; then \
echo "must set FUZZ_DESTDIR for install-fuzzer target"; \
else \
cp $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS) $(FUZZ_DESTDIR); \
fi
uninstall:
$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(libexecdir)/sudo/libsudo_util.la
-test -z "$(INSTALL_BACKUP)" || \
@@ -330,7 +349,7 @@ fuzz: $(FUZZ_PROGS)
MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \
MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \
echo "fuzz_sudo_conf: verifying corpus"; \
./fuzz_sudo_conf $(srcdir)/regress/corpus/sudo_conf/sudo.conf.*; \
./fuzz_sudo_conf $(FUZZ_SUDO_CONF_CORPUS); \
fi
# Note: some regress checks are run from srcdir for consistent error messages
@@ -446,6 +465,8 @@ realclean: distclean
cleandir: realclean
.PHONY: $(FUZZ_SEED_CORPUS)
# Autogenerated dependencies, do not modify
aix.lo: $(srcdir)/aix.c $(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \
$(incdir)/sudo_debug.h $(incdir)/sudo_fatal.h $(incdir)/sudo_gettext.h \

View File

@@ -146,6 +146,8 @@ install-doc:
install-plugin:
install-fuzzer:
uninstall:
$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(libexecdir)/sudo/libsudo_z.la
-test -z "$(INSTALL_BACKUP)" || \

View File

@@ -103,6 +103,7 @@ localstatedir = @localstatedir@
LIBFUZZSTUB = $(top_builddir)/lib/fuzzstub/libsudo_fuzzstub.la
LIB_FUZZING_ENGINE = @FUZZ_ENGINE@
FUZZ_PROGS = fuzz_logsrvd_conf
FUZZ_SEED_CORPUS = ${FUZZ_PROGS:=_seed_corpus.zip}
FUZZ_LIBS = $(LIBS) $(LIB_FUZZING_ENGINE)
FUZZ_LDFLAGS = $(LDFLAGS)
@@ -130,6 +131,8 @@ VERSION = @PACKAGE_VERSION@
FUZZ_LOGSRVD_CONF_OBJS = fuzz_logsrvd_conf.o logsrvd_conf.o
FUZZ_LOGSRVD_CONF_CORPUS = $(srcdir)/regress/corpus/logsrvd_conf/logsrvd.conf.*
all: $(PROGS)
depend:
@@ -163,6 +166,15 @@ sudo_sendlog: $(SENDLOG_OBJS) $(LT_LIBS)
fuzz_logsrvd_conf: $(FUZZ_LOGSRVD_CONF_OBJS) $(LIBFUZZSTUB) $(LT_LIBS)
$(LIBTOOL) $(LTFLAGS) --mode=link $(CC) -o $@ $(FUZZ_LOGSRVD_CONF_OBJS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(FUZZ_LDFLAGS) $(FUZZ_LIBS)
fuzz_logsrvd_conf_seed_corpus.zip:
tdir=fuzz_logsrvd_conf.$$$$; \
mkdir $$tdir; \
for f in $(FUZZ_LOGSRVD_CONF_CORPUS); do \
cp $$f $$tdir/`sha1sum $$f | cut -d' ' -f1`; \
done; \
zip -j $@ $$tdir/*; \
rm -rf $$tdir
pre-install:
install: install-binaries
@@ -180,6 +192,13 @@ install-includes:
install-plugin:
install-fuzzer: $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS)
@if test X"$(FUZZ_DESTDIR)" = X""; then \
echo "must set FUZZ_DESTDIR for install-fuzzer target"; \
else \
cp $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS) $(FUZZ_DESTDIR); \
fi
uninstall:
-rm -f $(DESTDIR)$(sbindir)/sudo_logsrvd \
$(DESTDIR)$(sbindir)/sudo_sendlog
@@ -203,7 +222,7 @@ fuzz: $(FUZZ_PROGS)
MALLOC_OPTIONS=S; export MALLOC_OPTIONS; \
MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \
echo "fuzz_logsrvd_conf: verifying corpus"; \
./fuzz_logsrvd_conf $(srcdir)/regress/corpus/logsrvd_conf/logsrvd.conf.*; \
./fuzz_logsrvd_conf $(FUZZ_LOGSRVD_CONF_CORPUS); \
fi
check:
@@ -224,6 +243,8 @@ realclean: distclean
cleandir: realclean
.PHONY: $(FUZZ_SEED_CORPUS)
# Autogenerated dependencies, do not modify
fuzz_logsrvd_conf.o: $(srcdir)/regress/fuzz/fuzz_logsrvd_conf.c \
$(incdir)/compat/stdbool.h $(incdir)/log_server.pb-c.h \

View File

@@ -163,6 +163,8 @@ install-plugin: install-dirs audit_json.la
INSTALL_BACKUP='$(INSTALL_BACKUP)' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) audit_json.la $(DESTDIR)$(plugindir); \
fi
install-fuzzer:
uninstall:
-$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/audit_json.la
-test -z "$(INSTALL_BACKUP)" || \

View File

@@ -166,6 +166,8 @@ install-plugin: install-dirs group_file.la
INSTALL_BACKUP='$(INSTALL_BACKUP)' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) group_file.la $(DESTDIR)$(plugindir); \
fi
install-fuzzer:
uninstall:
-$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/group_file.la
-test -z "$(INSTALL_BACKUP)" || \

View File

@@ -186,6 +186,8 @@ install-plugin: install-dirs python_plugin.la
INSTALL_BACKUP='$(INSTALL_BACKUP)' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) python_plugin.la $(DESTDIR)$(plugindir); \
fi
install-fuzzer:
uninstall:
-$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/python_plugin.la
-test -z "$(INSTALL_BACKUP)" || \

View File

@@ -161,6 +161,8 @@ install-plugin: install-dirs sample_plugin.la
INSTALL_BACKUP='$(INSTALL_BACKUP)' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) sample_plugin.la $(DESTDIR)$(plugindir); \
fi
install-fuzzer:
uninstall:
-$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/sample_plugin.la
-test -z "$(INSTALL_BACKUP)" || \

View File

@@ -163,6 +163,8 @@ install-plugin: install-dirs sample_approval.la
INSTALL_BACKUP='$(INSTALL_BACKUP)' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) sample_approval.la $(DESTDIR)$(plugindir); \
fi
install-fuzzer:
uninstall:
-$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/sample_approval.la
-test -z "$(INSTALL_BACKUP)" || \

View File

@@ -160,7 +160,8 @@ TEST_PROGS = check_addr check_base64 check_digest check_env_pattern \
# Fuzzers
LIB_FUZZING_ENGINE = @FUZZ_ENGINE@
FUZZ_PROGS = fuzz_sudoers fuzz_sudoers_ldif fuzz_policy
FUZZ_PROGS = fuzz_policy fuzz_sudoers fuzz_sudoers_ldif
FUZZ_SEED_CORPUS = ${FUZZ_PROGS:=_seed_corpus.zip}
FUZZ_LIBS = libparsesudoers.la $(LIBS) $(LIB_FUZZING_ENGINE)
FUZZ_LDFLAGS = @LDFLAGS@
@@ -243,11 +244,18 @@ FUZZ_POLICY_OBJS = fuzz_policy.o editor.lo env.lo env_pattern.lo gc.lo \
iolog_path_escapes.lo locale.lo policy.lo strlcpy_unesc.lo \
strvec_join.lo sudoers.lo
FUZZ_POLICY_CORPUS = $(srcdir)/regress/corpus/policy/policy.*
FUZZ_SUDOERS_OBJS = fuzz_sudoers.o locale.lo stubs.o sudo_printf.o
FUZZ_SUDOERS_CORPUS = $(top_srcdir)/examples/sudoers \
$(srcdir)/regress/sudoers/*.in
FUZZ_SUDOERS_LDIF_OBJS = fuzz_sudoers_ldif.o parse_ldif.o ldap_util.lo \
fmtsudoers.lo locale.lo stubs.o sudo_printf.o
FUZZ_SUDOERS_LDIF_CORPUS = $(srcdir)/regress/sudoers/*.ldif.ok
VERSION = @PACKAGE_VERSION@
PACKAGE_TARNAME = @PACKAGE_TARNAME@
@@ -360,6 +368,33 @@ fuzz_sudoers: $(FUZZ_SUDOERS_OBJS) libparsesudoers.la $(LIBUTIL) $(LIBFUZZSTUB)
fuzz_sudoers_ldif: $(FUZZ_SUDOERS_LDIF_OBJS) libparsesudoers.la $(LIBUTIL) $(LIBFUZZSTUB)
$(LIBTOOL) $(LTFLAGS) --mode=link @FUZZ_LD@ -o $@ $(FUZZ_SUDOERS_LDIF_OBJS) $(LDFLAGS) $(ASAN_LDFLAGS) $(PIE_LDFLAGS) $(SSP_LDFLAGS) $(FUZZ_LDFLAGS) $(FUZZ_LIBS)
fuzz_policy_seed_corpus.zip:
tdir=fuzz_policy.$$$$; \
mkdir $$tdir; \
for f in $(FUZZ_POLICY_CORPUS); do \
cp $$f $$tdir/`sha1sum $$f | cut -d' ' -f1`; \
done; \
zip -j $@ $$tdir/*; \
rm -rf $$tdir
fuzz_sudoers_seed_corpus.zip:
tdir=fuzz_sudoers.$$$$; \
mkdir $$tdir; \
for f in $(FUZZ_SUDOERS_CORPUS); do \
cp $$f $$tdir/`sha1sum $$f | cut -d' ' -f1`; \
done; \
zip -j $@ $$tdir/*; \
rm -rf $$tdir
fuzz_sudoers_ldif_seed_corpus.zip:
tdir=fuzz_sudoers_ldif.$$$$; \
mkdir $$tdir; \
for f in $(FUZZ_SUDOERS_LDIF_CORPUS); do \
cp $$f $$tdir/`sha1sum $$f | cut -d' ' -f1`; \
done; \
zip -j $@ $$tdir/*; \
rm -rf $$tdir
GENERATED = gram.h gram.c toke.c def_data.c def_data.h getdate.c
prologue:
@@ -456,6 +491,13 @@ install-sudoers: install-dirs
test -r $(DESTDIR)$(sudoersdir)/sudoers || \
cp -p $(DESTDIR)$(sudoersdir)/sudoers.dist $(DESTDIR)$(sudoersdir)/sudoers
install-fuzzer: $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS)
@if test X"$(FUZZ_DESTDIR)" = X""; then \
echo "must set FUZZ_DESTDIR for install-fuzzer target"; \
else \
cp $(FUZZ_PROGS) $(FUZZ_SEED_CORPUS) $(FUZZ_DESTDIR); \
fi
uninstall:
-$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/sudoers.la
-rm -f $(DESTDIR)$(bindir)/cvtsudoers \
@@ -487,12 +529,12 @@ fuzz: $(FUZZ_PROGS)
MALLOC_CONF="abort:true,junk:true"; export MALLOC_CONF; \
echo "fuzz_sudoers: verifying corpus"; \
mkdir -p regress/fuzz; \
./fuzz_sudoers $(top_srcdir)/examples/sudoers $(srcdir)/regress/sudoers/*.in > regress/fuzz/fuzz_sudoers.out 2>&1; \
./fuzz_sudoers $(FUZZ_SUDOERS_CORPUS) > regress/fuzz/fuzz_sudoers.out 2>&1; \
diff $(srcdir)/regress/fuzz/fuzz_sudoers.out.ok regress/fuzz/fuzz_sudoers.out; \
echo "fuzz_sudoers-ldif: verifying corpus"; \
./fuzz_sudoers_ldif $(srcdir)/regress/sudoers/*.ldif.ok; \
./fuzz_sudoers_ldif $(FUZZ_SUDOERS_LDIF_CORPUS); \
echo "fuzz_policy: verifying corpus"; \
./fuzz_policy $(srcdir)/regress/corpus/policy/policy.* > fuzz_policy.out 2>&1; \
./fuzz_policy $(FUZZ_POLICY_CORPUS) > fuzz_policy.out 2>&1; \
if [ $$? -ne 0 ]; then \
cat fuzz_policy.out; \
fi; \
@@ -676,6 +718,8 @@ realclean: distclean
cleandir: realclean
.PHONY: $(FUZZ_SEED_CORPUS)
# Autogenerated dependencies, do not modify
afs.lo: $(authdir)/afs.c $(authdir)/sudo_auth.h $(devdir)/def_data.h \
$(incdir)/compat/stdbool.h $(incdir)/sudo_compat.h \

View File

@@ -166,6 +166,8 @@ install-plugin: install-dirs system_group.la
INSTALL_BACKUP='$(INSTALL_BACKUP)' $(LIBTOOL) $(LTFLAGS) --mode=install $(INSTALL) $(INSTALL_OWNER) -m $(shlib_mode) system_group.la $(DESTDIR)$(plugindir); \
fi
install-fuzzer:
uninstall:
-$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(plugindir)/system_group.la
-test -z "$(INSTALL_BACKUP)" || \

View File

@@ -239,6 +239,8 @@ install-noexec: install-dirs sudo_noexec.la
install-plugin:
install-fuzzer:
uninstall:
-$(LIBTOOL) $(LTFLAGS) --mode=uninstall rm -f $(DESTDIR)$(noexecdir)/sudo_noexec.la
-rm -f $(DESTDIR)$(bindir)/sudo \