diff options
author | Will Drewry <wad@chromium.org> | 2012-04-18 20:50:25 -0400 |
---|---|---|
committer | James Morris <james.l.morris@oracle.com> | 2012-04-18 23:44:06 -0400 |
commit | 561381a146a31ff91d7a2370c10871b02ac7343c (patch) | |
tree | e98955e4b362fd25fd8f11603804ecb74c7f4208 /samples/seccomp | |
parent | 389da25f93eea8ff64181ae7e3e87da68acaef2e (diff) |
samples/seccomp: fix dependencies on arch macros
This change fixes the compilation error triggered here for
i386 allmodconfig in linux-next:
http://kisskb.ellerman.id.au/kisskb/buildresult/6123842/
Logic attempting to predict the host architecture has been
removed from the Makefile. Instead, the bpf-direct sample
should now compile on any architecture, but if the architecture
is not supported, it will compile a minimal main() function.
This change also ensures the samples are not compiled when
there is no seccomp filter support.
(Note, I wasn't able to reproduce the error locally, but
the existing approach was clearly flawed. This tweak
should resolve your issue and avoid other future weirdness.)
Reported-by: Paul Gortmaker <paul.gortmaker@windriver.com>
Suggested-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Will Drewry <wad@chromium.org>
Signed-off-by: James Morris <james.l.morris@oracle.com>
Diffstat (limited to 'samples/seccomp')
-rw-r--r-- | samples/seccomp/Makefile | 12 | ||||
-rw-r--r-- | samples/seccomp/bpf-direct.c | 18 |
2 files changed, 19 insertions, 11 deletions
diff --git a/samples/seccomp/Makefile b/samples/seccomp/Makefile index e8fe0f57b68f..16aa2d424985 100644 --- a/samples/seccomp/Makefile +++ b/samples/seccomp/Makefile | |||
@@ -1,27 +1,21 @@ | |||
1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. | 1 | # kbuild trick to avoid linker error. Can be omitted if a module is built. |
2 | obj- := dummy.o | 2 | obj- := dummy.o |
3 | 3 | ||
4 | hostprogs-$(CONFIG_SECCOMP) := bpf-fancy dropper | 4 | hostprogs-$(CONFIG_SECCOMP_FILTER) := bpf-fancy dropper bpf-direct |
5 | bpf-fancy-objs := bpf-fancy.o bpf-helper.o | ||
6 | 5 | ||
7 | HOSTCFLAGS_bpf-fancy.o += -I$(objtree)/usr/include | 6 | HOSTCFLAGS_bpf-fancy.o += -I$(objtree)/usr/include |
8 | HOSTCFLAGS_bpf-fancy.o += -idirafter $(objtree)/include | 7 | HOSTCFLAGS_bpf-fancy.o += -idirafter $(objtree)/include |
9 | HOSTCFLAGS_bpf-helper.o += -I$(objtree)/usr/include | 8 | HOSTCFLAGS_bpf-helper.o += -I$(objtree)/usr/include |
10 | HOSTCFLAGS_bpf-helper.o += -idirafter $(objtree)/include | 9 | HOSTCFLAGS_bpf-helper.o += -idirafter $(objtree)/include |
10 | bpf-fancy-objs := bpf-fancy.o bpf-helper.o | ||
11 | 11 | ||
12 | HOSTCFLAGS_dropper.o += -I$(objtree)/usr/include | 12 | HOSTCFLAGS_dropper.o += -I$(objtree)/usr/include |
13 | HOSTCFLAGS_dropper.o += -idirafter $(objtree)/include | 13 | HOSTCFLAGS_dropper.o += -idirafter $(objtree)/include |
14 | dropper-objs := dropper.o | 14 | dropper-objs := dropper.o |
15 | 15 | ||
16 | # bpf-direct.c is x86-only. | ||
17 | ifeq ($(SRCARCH),x86) | ||
18 | # List of programs to build | ||
19 | hostprogs-$(CONFIG_SECCOMP) += bpf-direct | ||
20 | bpf-direct-objs := bpf-direct.o | ||
21 | endif | ||
22 | |||
23 | HOSTCFLAGS_bpf-direct.o += -I$(objtree)/usr/include | 16 | HOSTCFLAGS_bpf-direct.o += -I$(objtree)/usr/include |
24 | HOSTCFLAGS_bpf-direct.o += -idirafter $(objtree)/include | 17 | HOSTCFLAGS_bpf-direct.o += -idirafter $(objtree)/include |
18 | bpf-direct-objs := bpf-direct.o | ||
25 | 19 | ||
26 | # Try to match the kernel target. | 20 | # Try to match the kernel target. |
27 | ifeq ($(CONFIG_64BIT),) | 21 | ifeq ($(CONFIG_64BIT),) |
diff --git a/samples/seccomp/bpf-direct.c b/samples/seccomp/bpf-direct.c index 26f523e6ed74..151ec3f52189 100644 --- a/samples/seccomp/bpf-direct.c +++ b/samples/seccomp/bpf-direct.c | |||
@@ -8,6 +8,11 @@ | |||
8 | * and can serve as a starting point for developing | 8 | * and can serve as a starting point for developing |
9 | * applications using prctl(PR_SET_SECCOMP, 2, ...). | 9 | * applications using prctl(PR_SET_SECCOMP, 2, ...). |
10 | */ | 10 | */ |
11 | #if defined(__i386__) || defined(__x86_64__) | ||
12 | #define SUPPORTED_ARCH 1 | ||
13 | #endif | ||
14 | |||
15 | #if defined(SUPPORTED_ARCH) | ||
11 | #define __USE_GNU 1 | 16 | #define __USE_GNU 1 |
12 | #define _GNU_SOURCE 1 | 17 | #define _GNU_SOURCE 1 |
13 | 18 | ||
@@ -43,8 +48,6 @@ | |||
43 | #define REG_ARG3 REG_R10 | 48 | #define REG_ARG3 REG_R10 |
44 | #define REG_ARG4 REG_R8 | 49 | #define REG_ARG4 REG_R8 |
45 | #define REG_ARG5 REG_R9 | 50 | #define REG_ARG5 REG_R9 |
46 | #else | ||
47 | #error Unsupported platform | ||
48 | #endif | 51 | #endif |
49 | 52 | ||
50 | #ifndef PR_SET_NO_NEW_PRIVS | 53 | #ifndef PR_SET_NO_NEW_PRIVS |
@@ -174,3 +177,14 @@ int main(int argc, char **argv) | |||
174 | payload("Error message going to STDERR\n")); | 177 | payload("Error message going to STDERR\n")); |
175 | return 0; | 178 | return 0; |
176 | } | 179 | } |
180 | #else /* SUPPORTED_ARCH */ | ||
181 | /* | ||
182 | * This sample is x86-only. Since kernel samples are compiled with the | ||
183 | * host toolchain, a non-x86 host will result in using only the main() | ||
184 | * below. | ||
185 | */ | ||
186 | int main(void) | ||
187 | { | ||
188 | return 1; | ||
189 | } | ||
190 | #endif /* SUPPORTED_ARCH */ | ||