# # NOTE the built tests are all designed to be run from this # working directory when built DYNAMIC=yes. That is, they # link to the shared libraries in ../libcap/ . # topdir=$(shell pwd)/.. include ../Make.Rules # all: @echo leave test building to test target install: @echo nothing to install from tests ifeq ($(DYNAMIC),yes) LINKEXTRA=-Wl,-rpath,../libcap DEPS=../libcap/libcap.so ifeq ($(PTHREADS),yes) DEPS += ../libcap/libpsx.so endif else # For this build variant override the LDFLAGS to link statically from # libraries within the build tree. If you never want this, use # make DYNAMIC=yes ... LDFLAGS = --static DEPS=../libcap/libcap.a ifeq ($(PTHREADS),yes) DEPS += ../libcap/libpsx.a endif endif ../libcap/libcap.so: $(MAKE) -C ../libcap libcap.so ../libcap/libcap.a: $(MAKE) -C ../libcap libcap.a ifeq ($(PTHREADS),yes) ../libcap/libpsx.so: $(MAKE) -C ../libcap libpsx.so ../libcap/libpsx.a: $(MAKE) -C ../libcap libpsx.a endif ../progs/tcapsh-static: $(MAKE) -C ../progs tcapsh-static test: ifeq ($(PTHREADS),yes) $(MAKE) run_psx_test run_libcap_psx_test endif sudotest: test $(MAKE) run_uns_test $(MAKE) run_libcap_launch_test ifeq ($(PTHREADS),yes) $(MAKE) run_libcap_psx_launch_test run_exploit_test endif # unprivileged run_psx_test: psx_test ./psx_test psx_test: psx_test.c $(DEPS) $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $< -o $@ $(LINKEXTRA) $(LIBPSXLIB) run_libcap_psx_test: libcap_psx_test ./libcap_psx_test libcap_psx_test: libcap_psx_test.c $(DEPS) $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) $(LIBPSXLIB) # privileged uns_test: uns_test.c $(DEPS) $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) run_uns_test: uns_test echo exit | $(SUDO) ./uns_test run_libcap_launch_test: libcap_launch_test noop ../progs/tcapsh-static $(SUDO) ./libcap_launch_test run_libcap_psx_launch_test: libcap_psx_launch_test ../progs/tcapsh-static $(SUDO) ./libcap_psx_launch_test libcap_launch_test: libcap_launch_test.c $(DEPS) $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) # This varies only slightly from the above insofar as it currently # only links in the pthreads fork support. TODO() we need to change # the source to do something interesting with pthreads. libcap_psx_launch_test: libcap_launch_test.c $(DEPS) $(CC) $(CFLAGS) $(CPPFLAGS) $(LDFLAGS) -DWITH_PTHREADS $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) $(LIBPSXLIB) # This test demonstrates that libpsx is needed to secure multithreaded # programs that link against libcap. run_exploit_test: exploit noexploit @echo exploit should succeed $(SUDO) ./exploit ; if [ $$? -ne 0 ]; then exit 0; else exit 1 ; fi @echo exploit should fail $(SUDO) ./noexploit ; if [ $$? -eq 0 ]; then exit 0; else exit 1 ; fi exploit: exploit.o $(DEPS) $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) -lpthread # Note, for some reason, the order of libraries is important to avoid # the exploit working for dynamic linking. noexploit: exploit.o $(DEPS) $(CC) $(CFLAGS) $(LDFLAGS) $< -o $@ $(LINKEXTRA) $(LIBPSXLIB) $(LIBCAPLIB) # This one runs in a chroot with no shared library files. noop: noop.c $(CC) $(CFLAGS) $(CPPFLAGS) $< -o $@ --static clean: rm -f psx_test libcap_psx_test libcap_launch_test uns_test *~ rm -f libcap_launch_test libcap_psx_launch_test core noop rm -f exploit noexploit exploit.o