diff options
Diffstat (limited to 'tools')
-rw-r--r-- | tools/lib/bpf/libbpf.c | 2 | ||||
-rw-r--r-- | tools/testing/selftests/bpf/test_verifier.c | 5 | ||||
-rw-r--r-- | tools/testing/selftests/seccomp/seccomp_bpf.c | 22 |
3 files changed, 25 insertions, 4 deletions
diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c index 5922443063f0..0f9f06df49bc 100644 --- a/tools/lib/bpf/libbpf.c +++ b/tools/lib/bpf/libbpf.c | |||
@@ -2035,7 +2035,7 @@ int bpf_prog_load_xattr(const struct bpf_prog_load_attr *attr, | |||
2035 | return -EINVAL; | 2035 | return -EINVAL; |
2036 | 2036 | ||
2037 | obj = bpf_object__open(attr->file); | 2037 | obj = bpf_object__open(attr->file); |
2038 | if (IS_ERR(obj)) | 2038 | if (IS_ERR_OR_NULL(obj)) |
2039 | return -ENOENT; | 2039 | return -ENOENT; |
2040 | 2040 | ||
2041 | bpf_object__for_each_program(prog, obj) { | 2041 | bpf_object__for_each_program(prog, obj) { |
diff --git a/tools/testing/selftests/bpf/test_verifier.c b/tools/testing/selftests/bpf/test_verifier.c index 3e7718b1a9ae..fd7de7eb329e 100644 --- a/tools/testing/selftests/bpf/test_verifier.c +++ b/tools/testing/selftests/bpf/test_verifier.c | |||
@@ -11713,6 +11713,11 @@ static void get_unpriv_disabled() | |||
11713 | FILE *fd; | 11713 | FILE *fd; |
11714 | 11714 | ||
11715 | fd = fopen("/proc/sys/"UNPRIV_SYSCTL, "r"); | 11715 | fd = fopen("/proc/sys/"UNPRIV_SYSCTL, "r"); |
11716 | if (!fd) { | ||
11717 | perror("fopen /proc/sys/"UNPRIV_SYSCTL); | ||
11718 | unpriv_disabled = true; | ||
11719 | return; | ||
11720 | } | ||
11716 | if (fgets(buf, 2, fd) == buf && atoi(buf)) | 11721 | if (fgets(buf, 2, fd) == buf && atoi(buf)) |
11717 | unpriv_disabled = true; | 11722 | unpriv_disabled = true; |
11718 | fclose(fd); | 11723 | fclose(fd); |
diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c index 168c66d74fc5..e1473234968d 100644 --- a/tools/testing/selftests/seccomp/seccomp_bpf.c +++ b/tools/testing/selftests/seccomp/seccomp_bpf.c | |||
@@ -134,11 +134,15 @@ struct seccomp_data { | |||
134 | #endif | 134 | #endif |
135 | 135 | ||
136 | #ifndef SECCOMP_FILTER_FLAG_TSYNC | 136 | #ifndef SECCOMP_FILTER_FLAG_TSYNC |
137 | #define SECCOMP_FILTER_FLAG_TSYNC 1 | 137 | #define SECCOMP_FILTER_FLAG_TSYNC (1UL << 0) |
138 | #endif | 138 | #endif |
139 | 139 | ||
140 | #ifndef SECCOMP_FILTER_FLAG_LOG | 140 | #ifndef SECCOMP_FILTER_FLAG_LOG |
141 | #define SECCOMP_FILTER_FLAG_LOG 2 | 141 | #define SECCOMP_FILTER_FLAG_LOG (1UL << 1) |
142 | #endif | ||
143 | |||
144 | #ifndef SECCOMP_FILTER_FLAG_SPEC_ALLOW | ||
145 | #define SECCOMP_FILTER_FLAG_SPEC_ALLOW (1UL << 2) | ||
142 | #endif | 146 | #endif |
143 | 147 | ||
144 | #ifndef PTRACE_SECCOMP_GET_METADATA | 148 | #ifndef PTRACE_SECCOMP_GET_METADATA |
@@ -2072,14 +2076,26 @@ TEST(seccomp_syscall_mode_lock) | |||
2072 | TEST(detect_seccomp_filter_flags) | 2076 | TEST(detect_seccomp_filter_flags) |
2073 | { | 2077 | { |
2074 | unsigned int flags[] = { SECCOMP_FILTER_FLAG_TSYNC, | 2078 | unsigned int flags[] = { SECCOMP_FILTER_FLAG_TSYNC, |
2075 | SECCOMP_FILTER_FLAG_LOG }; | 2079 | SECCOMP_FILTER_FLAG_LOG, |
2080 | SECCOMP_FILTER_FLAG_SPEC_ALLOW }; | ||
2076 | unsigned int flag, all_flags; | 2081 | unsigned int flag, all_flags; |
2077 | int i; | 2082 | int i; |
2078 | long ret; | 2083 | long ret; |
2079 | 2084 | ||
2080 | /* Test detection of known-good filter flags */ | 2085 | /* Test detection of known-good filter flags */ |
2081 | for (i = 0, all_flags = 0; i < ARRAY_SIZE(flags); i++) { | 2086 | for (i = 0, all_flags = 0; i < ARRAY_SIZE(flags); i++) { |
2087 | int bits = 0; | ||
2088 | |||
2082 | flag = flags[i]; | 2089 | flag = flags[i]; |
2090 | /* Make sure the flag is a single bit! */ | ||
2091 | while (flag) { | ||
2092 | if (flag & 0x1) | ||
2093 | bits ++; | ||
2094 | flag >>= 1; | ||
2095 | } | ||
2096 | ASSERT_EQ(1, bits); | ||
2097 | flag = flags[i]; | ||
2098 | |||
2083 | ret = seccomp(SECCOMP_SET_MODE_FILTER, flag, NULL); | 2099 | ret = seccomp(SECCOMP_SET_MODE_FILTER, flag, NULL); |
2084 | ASSERT_NE(ENOSYS, errno) { | 2100 | ASSERT_NE(ENOSYS, errno) { |
2085 | TH_LOG("Kernel does not support seccomp syscall!"); | 2101 | TH_LOG("Kernel does not support seccomp syscall!"); |