| From: Edward Liaw <edliaw@google.com> |
| Subject: selftests/harness: remove use of LINE_MAX |
| Date: Thu, 11 Apr 2024 23:19:49 +0000 |
| |
| Android was seeing a compliation error because its C library does not |
| define LINE_MAX. This replaces the use of LINE_MAX / snprintf with |
| asprintf, which will change the behavior to not truncate the test name if |
| it is over 2048 chars long. |
| |
| See also: |
| https://github.com/llvm/llvm-project/issues/88119 |
| |
| [akpm@linux-foundation.org: remove limits.h include, per Edward] |
| [akpm@linux-foundation.org: check asprintf() return] |
| [usama.anjum@collabora.com: fix undeclared function error] |
| Link: https://lkml.kernel.org/r/20240417075530.3807625-1-usama.anjum@collabora.com |
| Link: https://lkml.kernel.org/r/20240411231954.62156-1-edliaw@google.com |
| Fixes: 38c957f07038 ("selftests: kselftest_harness: generate test name once") |
| Signed-off-by: Edward Liaw <edliaw@google.com> |
| Signed-off-by: Muhammad Usama Anjum <usama.anjum@collabora.com> |
| Cc: Andy Lutomirski <luto@amacapital.net> |
| Cc: Axel Rasmussen <axelrasmussen@google.com> |
| Cc: Bill Wendling <morbo@google.com> |
| Cc: David Hildenbrand <david@redhat.com> |
| Cc: Edward Liaw <edliaw@google.com> |
| Cc: Justin Stitt <justinstitt@google.com> |
| Cc: Kees Cook <keescook@chromium.org> |
| Cc: "Mike Rapoport (IBM)" <rppt@kernel.org> |
| Cc: Nathan Chancellor <nathan@kernel.org> |
| Cc: Nick Desaulniers <ndesaulniers@google.com> |
| Cc: Peter Xu <peterx@redhat.com> |
| Cc: Shuah Khan <shuah@kernel.org> |
| Cc: Will Drewry <wad@chromium.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| tools/testing/selftests/kselftest_harness.h | 12 ++++++++---- |
| tools/testing/selftests/mm/mdwe_test.c | 1 + |
| 2 files changed, 9 insertions(+), 4 deletions(-) |
| |
| --- a/tools/testing/selftests/kselftest_harness.h~selftests-harness-remove-use-of-line_max |
| +++ a/tools/testing/selftests/kselftest_harness.h |
| @@ -56,7 +56,6 @@ |
| #include <asm/types.h> |
| #include <ctype.h> |
| #include <errno.h> |
| -#include <limits.h> |
| #include <stdbool.h> |
| #include <stdint.h> |
| #include <stdio.h> |
| @@ -1156,7 +1155,7 @@ void __run_test(struct __fixture_metadat |
| struct __test_metadata *t) |
| { |
| struct __test_xfail *xfail; |
| - char test_name[LINE_MAX]; |
| + char *test_name; |
| const char *diagnostic; |
| |
| /* reset test struct */ |
| @@ -1164,8 +1163,12 @@ void __run_test(struct __fixture_metadat |
| t->trigger = 0; |
| memset(t->results->reason, 0, sizeof(t->results->reason)); |
| |
| - snprintf(test_name, sizeof(test_name), "%s%s%s.%s", |
| - f->name, variant->name[0] ? "." : "", variant->name, t->name); |
| + if (asprintf(&test_name, "%s%s%s.%s", f->name, |
| + variant->name[0] ? "." : "", variant->name, t->name) == -1) { |
| + ksft_print_msg("ERROR ALLOCATING MEMORY\n"); |
| + t->exit_code = KSFT_FAIL; |
| + _exit(t->exit_code); |
| + } |
| |
| ksft_print_msg(" RUN %s ...\n", test_name); |
| |
| @@ -1203,6 +1206,7 @@ void __run_test(struct __fixture_metadat |
| |
| ksft_test_result_code(t->exit_code, test_name, |
| diagnostic ? "%s" : "", diagnostic); |
| + free(test_name); |
| } |
| |
| static int test_harness_run(int argc, char **argv) |
| --- a/tools/testing/selftests/mm/mdwe_test.c~selftests-harness-remove-use-of-line_max |
| +++ a/tools/testing/selftests/mm/mdwe_test.c |
| @@ -7,6 +7,7 @@ |
| #include <linux/mman.h> |
| #include <linux/prctl.h> |
| |
| +#define _GNU_SOURCE |
| #include <stdio.h> |
| #include <stdlib.h> |
| #include <sys/auxv.h> |
| _ |