diff options
author | Steve Muckle <smuckle@google.com> | 2018-02-01 23:22:19 +0000 |
---|---|---|
committer | android-build-merger <android-build-merger@google.com> | 2018-02-01 23:22:19 +0000 |
commit | d758b2ba2a95bda117863b956c6948499ace6efd (patch) | |
tree | cb16d83ebd6b8517796a5eb5507c19c1a610846c | |
parent | daf54e903d0a40def409165832d40b971d9b4aec (diff) | |
parent | b31f7a7e098201784fabcd458234be1e191ce00c (diff) | |
download | linux-kselftest-d758b2ba2a95bda117863b956c6948499ace6efd.tar.gz |
ANDROID: update patch stack
am: b31f7a7e09
Change-Id: Ia206fbe1059b675be9f62da48afb4506d0bac007
4 files changed, 139 insertions, 180 deletions
diff --git a/android/patches/0006-selftests-exec-include-cwd-in-long-path-calculation.patch b/android/patches/0006-selftests-exec-include-cwd-in-long-path-calculation.patch deleted file mode 100644 index f43c46ea9683..000000000000 --- a/android/patches/0006-selftests-exec-include-cwd-in-long-path-calculation.patch +++ /dev/null @@ -1,113 +0,0 @@ -From 95e8aad6260e79f8c8f6afc52c5b6b0bb447342f Mon Sep 17 00:00:00 2001 -From: Steve Muckle <smuckle@google.com> -Date: Fri, 6 Oct 2017 15:18:31 -0700 -Subject: [PATCH] selftests/exec: include cwd in long path calculation - -When creating a pathname close to PATH_MAX to test execveat, factor in -the current working directory path otherwise we end up with an absolute -path that is longer than PATH_MAX. While execveat() may succeed, subsequent -calls to the kernel from the runtime environment which are required to -successfully execute the test binary/script may fail because of this. - -To keep the semantics of the test the same, rework the relative pathname -part of the test to be relative to the root directory so it isn't -decreased by the length of the current working directory path. - -Bug: 67016227 -Test: run vts-kernel -m VtsKernelLinuxKselftestStaging -Change-Id: Ib407d1afc52de7e58cb208fd41ade6e8c38d8bfd -Signed-off-by: Steve Muckle <smuckle@google.com> ---- - tools/testing/selftests/exec/execveat.c | 27 +++++++++++++++++++-------- - 1 file changed, 19 insertions(+), 8 deletions(-) - -diff --git a/tools/testing/selftests/exec/execveat.c b/tools/testing/selftests/exec/execveat.c -index 8d5d1d2ee7c1..67cd4597db2b 100644 ---- a/tools/testing/selftests/exec/execveat.c -+++ b/tools/testing/selftests/exec/execveat.c -@@ -147,7 +147,7 @@ static void exe_cp(const char *src, const char *dest) - } - - #define XX_DIR_LEN 200 --static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script) -+static int check_execveat_pathmax(int root_dfd, const char *src, int is_script) - { - int fail = 0; - int ii, count, len; -@@ -156,20 +156,30 @@ static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script) - - if (*longpath == '\0') { - /* Create a filename close to PATH_MAX in length */ -+ char *cwd = getcwd(NULL, 0); -+ -+ if (!cwd) { -+ printf("Failed to getcwd(), errno=%d (%s)\n", -+ errno, strerror(errno)); -+ return 2; -+ } -+ strcpy(longpath, cwd); -+ strcat(longpath, "/"); - memset(longname, 'x', XX_DIR_LEN - 1); - longname[XX_DIR_LEN - 1] = '/'; - longname[XX_DIR_LEN] = '\0'; -- count = (PATH_MAX - 3) / XX_DIR_LEN; -+ count = (PATH_MAX - 3 - strlen(cwd)) / XX_DIR_LEN; - for (ii = 0; ii < count; ii++) { - strcat(longpath, longname); - mkdir(longpath, 0755); - } -- len = (PATH_MAX - 3) - (count * XX_DIR_LEN); -+ len = (PATH_MAX - 3 - strlen(cwd)) - (count * XX_DIR_LEN); - if (len <= 0) - len = 1; - memset(longname, 'y', len); - longname[len] = '\0'; - strcat(longpath, longname); -+ free(cwd); - } - exe_cp(src, longpath); - -@@ -190,7 +200,7 @@ static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script) - } - - /* -- * Execute as a long pathname relative to ".". If this is a script, -+ * Execute as a long pathname relative to "/". If this is a script, - * the interpreter will launch but fail to open the script because its - * name ("/dev/fd/5/xxx....") is bigger than PATH_MAX. - * -@@ -200,10 +210,10 @@ static int check_execveat_pathmax(int dot_dfd, const char *src, int is_script) - * the exit status shall be 126."), so allow either. - */ - if (is_script) -- fail += check_execveat_invoked_rc(dot_dfd, longpath, 0, -+ fail += check_execveat_invoked_rc(root_dfd, longpath + 1, 0, - 127, 126); - else -- fail += check_execveat(dot_dfd, longpath, 0); -+ fail += check_execveat(root_dfd, longpath + 1, 0); - - return fail; - } -@@ -218,6 +228,7 @@ static int run_tests(void) - int subdir_dfd_ephemeral = open_or_die("subdir.ephemeral", - O_DIRECTORY|O_RDONLY); - int dot_dfd = open_or_die(".", O_DIRECTORY|O_RDONLY); -+ int root_dfd = open_or_die("/", O_DIRECTORY|O_RDONLY); - int dot_dfd_path = open_or_die(".", O_DIRECTORY|O_RDONLY|O_PATH); - int dot_dfd_cloexec = open_or_die(".", O_DIRECTORY|O_RDONLY|O_CLOEXEC); - int fd = open_or_die("execveat", O_RDONLY); -@@ -353,8 +364,8 @@ static int run_tests(void) - /* Attempt to execute relative to non-directory => ENOTDIR */ - fail += check_execveat_fail(fd, "execveat", 0, ENOTDIR); - -- fail += check_execveat_pathmax(dot_dfd, "execveat", 0); -- fail += check_execveat_pathmax(dot_dfd, "script", 1); -+ fail += check_execveat_pathmax(root_dfd, "execveat", 0); -+ fail += check_execveat_pathmax(root_dfd, "script", 1); - return fail; - } - --- -2.16.0.rc1.238.g530d649a79-goog - diff --git a/android/patches/0014-selftests-vdso_test-support-ARM64-targets.patch b/android/patches/0014-selftests-vdso_test-support-ARM64-targets.patch deleted file mode 100644 index 22a161cc3826..000000000000 --- a/android/patches/0014-selftests-vdso_test-support-ARM64-targets.patch +++ /dev/null @@ -1,67 +0,0 @@ -From ff03117f4a19cdf536f9bb7e28c9785c18616412 Mon Sep 17 00:00:00 2001 -From: Greg Hackmann <ghackmann@google.com> -Date: Wed, 1 Nov 2017 14:34:26 -0700 -Subject: [PATCH] selftests: vdso_test: support ARM64 targets - -ARM64's vDSO exports its gettimeofday() implementation with a different -name (__kernel_gettimeofday) and version (LINUX_2.6.39) from other -architectures. Add a corresponding special-case to vdso_test. - -Signed-off-by: Greg Hackmann <ghackmann@google.com> -Bug: 67017029 -Test: make -j vts -Change-Id: I54b2dfa99717da22b12783a98ef19291b5c581f5 -Signed-off-by: Steve Muckle <smuckle@google.com> ---- - tools/testing/selftests/vDSO/vdso_test.c | 19 ++++++++++++++++--- - 1 file changed, 16 insertions(+), 3 deletions(-) - -diff --git a/tools/testing/selftests/vDSO/vdso_test.c b/tools/testing/selftests/vDSO/vdso_test.c -index 8daeb7d7032c..2df26bd0099c 100644 ---- a/tools/testing/selftests/vDSO/vdso_test.c -+++ b/tools/testing/selftests/vDSO/vdso_test.c -@@ -19,6 +19,19 @@ extern void *vdso_sym(const char *version, const char *name); - extern void vdso_init_from_sysinfo_ehdr(uintptr_t base); - extern void vdso_init_from_auxv(void *auxv); - -+/* -+ * ARM64's vDSO exports its gettimeofday() implementation with a different -+ * name and version from other architectures, so we need to handle it as -+ * a special case. -+ */ -+#if defined(__aarch64__) -+const char *version = "LINUX_2.6.39"; -+const char *name = "__kernel_gettimeofday"; -+#else -+const char *version = "LINUX_2.6"; -+const char *name = "__vdso_gettimeofday"; -+#endif -+ - int main(int argc, char **argv) - { - unsigned long sysinfo_ehdr = getauxval(AT_SYSINFO_EHDR); -@@ -31,10 +44,10 @@ int main(int argc, char **argv) - - /* Find gettimeofday. */ - typedef long (*gtod_t)(struct timeval *tv, struct timezone *tz); -- gtod_t gtod = (gtod_t)vdso_sym("LINUX_2.6", "__vdso_gettimeofday"); -+ gtod_t gtod = (gtod_t)vdso_sym(version, name); - - if (!gtod) { -- printf("Could not find __vdso_gettimeofday\n"); -+ printf("Could not find %s\n", name); - return 1; - } - -@@ -45,7 +58,7 @@ int main(int argc, char **argv) - printf("The time is %lld.%06lld\n", - (long long)tv.tv_sec, (long long)tv.tv_usec); - } else { -- printf("__vdso_gettimeofday failed\n"); -+ printf("%s failed\n", name); - } - - return 0; --- -2.16.0.rc1.238.g530d649a79-goog - diff --git a/android/patches/0016-ksft_exit_skip_noreturn.patch b/android/patches/0016-ksft_exit_skip_noreturn.patch new file mode 100644 index 000000000000..9126d71bc971 --- /dev/null +++ b/android/patches/0016-ksft_exit_skip_noreturn.patch @@ -0,0 +1,13 @@ +diff --git a/tools/testing/selftests/kselftest.h b/tools/testing/selftests/kselftest.h +index 1ae565ed9bf0..05a4b9ad80c9 100644 +--- a/tools/testing/selftests/kselftest.h ++++ b/tools/testing/selftests/kselftest.h +@@ -165,7 +165,7 @@ static inline int ksft_exit_xpass(void) + exit(KSFT_XPASS); + } + +-static inline int ksft_exit_skip(const char *msg, ...) ++static inline void __noreturn ksft_exit_skip(const char *msg, ...) + { + if (msg) { + va_list args; diff --git a/android/patches/0017-seccomp_bpf_disable_tests.patch b/android/patches/0017-seccomp_bpf_disable_tests.patch new file mode 100644 index 000000000000..75b35938db06 --- /dev/null +++ b/android/patches/0017-seccomp_bpf_disable_tests.patch @@ -0,0 +1,126 @@ +diff --git a/tools/testing/selftests/seccomp/seccomp_bpf.c b/tools/testing/selftests/seccomp/seccomp_bpf.c +index 34d9582aefb4..843ba80c401b 100644 +--- a/tools/testing/selftests/seccomp/seccomp_bpf.c ++++ b/tools/testing/selftests/seccomp/seccomp_bpf.c +@@ -12,12 +12,14 @@ + * we need to use the kernel's siginfo.h file and trick glibc + * into accepting it. + */ ++#if defined(__GLIBC_PREREQ) + #if !__GLIBC_PREREQ(2, 26) + # include <asm/siginfo.h> + # define __have_siginfo_t 1 + # define __have_sigval_t 1 + # define __have_sigevent_t 1 + #endif ++#endif + + #include <errno.h> + #include <linux/filter.h> +@@ -404,6 +406,7 @@ TEST(empty_prog) + EXPECT_EQ(EINVAL, errno); + } + ++#if 0 + TEST(log_all) + { + struct sock_filter filter[] = { +@@ -425,6 +428,7 @@ TEST(log_all) + /* getppid() should succeed and be logged (no check for logging) */ + EXPECT_EQ(parent, syscall(__NR_getppid)); + } ++#endif + + TEST_SIGNAL(unknown_ret_is_kill_inside, SIGSYS) + { +@@ -677,6 +681,7 @@ void kill_thread_or_group(struct __test_metadata *_metadata, bool kill_process) + exit(42); + } + ++#if 0 + TEST(KILL_thread) + { + int status; +@@ -695,6 +700,7 @@ TEST(KILL_thread) + ASSERT_TRUE(WIFEXITED(status)); + ASSERT_EQ(42, WEXITSTATUS(status)); + } ++#endif + + TEST(KILL_process) + { +@@ -1242,6 +1248,7 @@ TEST_F(precedence, trace_is_fourth_in_any_order) + EXPECT_EQ(-1, syscall(__NR_getpid)); + } + ++#if 0 + TEST_F(precedence, log_is_fifth) + { + pid_t mypid, parent; +@@ -1281,6 +1288,7 @@ TEST_F(precedence, log_is_fifth_in_any_order) + /* Should also work just fine */ + EXPECT_EQ(mypid, syscall(__NR_getpid)); + } ++#endif + + #ifndef PTRACE_O_TRACESECCOMP + #define PTRACE_O_TRACESECCOMP 0x00000080 +@@ -1717,8 +1725,10 @@ void tracer_ptrace(struct __test_metadata *_metadata, pid_t tracee, + + if (nr == __NR_getpid) + change_syscall(_metadata, tracee, __NR_getppid); ++#ifdef __NR_open + if (nr == __NR_open) + change_syscall(_metadata, tracee, -1); ++#endif + } + + FIXTURE_DATA(TRACE_syscall) { +@@ -1784,6 +1794,7 @@ TEST_F(TRACE_syscall, ptrace_syscall_redirected) + EXPECT_NE(self->mypid, syscall(__NR_getpid)); + } + ++#ifdef __NR_open + TEST_F(TRACE_syscall, ptrace_syscall_dropped) + { + /* Swap SECCOMP_RET_TRACE tracer for PTRACE_SYSCALL tracer. */ +@@ -1794,6 +1805,7 @@ TEST_F(TRACE_syscall, ptrace_syscall_dropped) + /* Tracer should skip the open syscall, resulting in EPERM. */ + EXPECT_SYSCALL_RETURN(EPERM, syscall(__NR_open)); + } ++#endif + + TEST_F(TRACE_syscall, syscall_allowed) + { +@@ -2059,6 +2071,7 @@ TEST(seccomp_syscall_mode_lock) + } + } + ++#if 0 + /* + * Test detection of known and unknown filter flags. Userspace needs to be able + * to check if a filter flag is supported by the current kernel and a good way +@@ -2119,6 +2132,7 @@ TEST(detect_seccomp_filter_flags) + flag); + } + } ++#endif + + TEST(TSYNC_first) + { +@@ -2759,6 +2773,7 @@ TEST(syscall_restart) + _metadata->passed = 0; + } + ++#if 0 + TEST_SIGNAL(filter_flag_log, SIGSYS) + { + struct sock_filter allow_filter[] = { +@@ -2851,6 +2866,7 @@ TEST(get_action_avail) + EXPECT_EQ(ret, -1); + EXPECT_EQ(errno, EOPNOTSUPP); + } ++#endif + + /* + * TODO: |