| # |
| # 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: |
| make libcap_launch_test |
| ifeq ($(PTHREADS),yes) |
| make psx_test libcap_psx_test libcap_psx_launch_test |
| endif |
| |
| install: all |
| |
| ifeq ($(DYNAMIC),yes) |
| LINKEXTRA=-Wl,-rpath,../libcap |
| DEPS=../libcap/libcap.so |
| ifeq ($(PTHREADS),yes) |
| DEPS += ../libcap/libpsx.so |
| endif |
| else |
| 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_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) $(IPATH) $< -o $@ $(LINKEXTRA) $(LIBPSXLIB) $(LDFLAGS) |
| |
| run_libcap_psx_test: libcap_psx_test |
| ./libcap_psx_test |
| |
| libcap_psx_test: libcap_psx_test.c $(DEPS) |
| $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) $(LIBPSXLIB) $(LDFLAGS) |
| |
| # privileged |
| 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) $(IPATH) $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) $(LDFLAGS) |
| |
| # 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) $(IPATH) -DWITH_PTHREADS $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) $(LIBPSXLIB) $(LDFLAGS) |
| |
| |
| # 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.o: exploit.c |
| $(CC) $(CFLAGS) $(IPATH) -c $< |
| |
| exploit: exploit.o $(DEPS) |
| $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LINKEXTRA) $(LIBCAPLIB) -lpthread $(LDFLAGS) |
| |
| # Note, for some reason, the order of libraries is important to avoid |
| # the exploit working for dynamic linking. |
| noexploit: exploit.o $(DEPS) |
| $(CC) $(CFLAGS) $(IPATH) $< -o $@ $(LINKEXTRA) $(LIBPSXLIB) $(LIBCAPLIB) $(LDFLAGS) |
| |
| # This one runs in a chroot with no shared library files. |
| noop: noop.c |
| $(CC) $(CFLAGS) $< -o $@ --static |
| |
| clean: |
| rm -f psx_test libcap_psx_test libcap_launch_test *~ |
| rm -f libcap_launch_test libcap_psx_launch_test core noop |
| rm -f exploit noexploit exploit.o |