| From: John Hubbard <jhubbard@nvidia.com> |
| Subject: selftests/mm: fix two -Wformat-security warnings in uffd builds |
| Date: Tue, 6 Jun 2023 00:16:32 -0700 |
| |
| The uffd tests generate two compile time warnings from clang's |
| -Wformat-security setting. These trigger at the call sites for |
| uffd_test_start() and uffd_test_skip(). |
| |
| 1) Fix the uffd_test_start() issue by removing the intermediate |
| test_name variable (thanks to David Hildenbrand for showing how to do |
| this). |
| |
| 2) Fix the uffd_test_skip() issue by observing that there is no need for |
| a macro and a variable args approach, because all callers of |
| uffd_test_skip() pass in a simple char* string, without any format |
| specifiers. So just change uffd_test_skip() into a regular C function. |
| |
| Link: https://lkml.kernel.org/r/20230606071637.267103-7-jhubbard@nvidia.com |
| Signed-off-by: John Hubbard <jhubbard@nvidia.com> |
| Reviewed-by: David Hildenbrand <david@redhat.com> |
| Reviewed-by: Peter Xu <peterx@redhat.com> |
| Tested-by: Muhammad Usama Anjum <usama.anjum@collabora.com> |
| Cc: Jonathan Corbet <corbet@lwn.net> |
| Cc: Nathan Chancellor <nathan@kernel.org> |
| Cc: Shuah Khan <shuah@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| tools/testing/selftests/mm/uffd-unit-tests.c | 16 ++++++---------- |
| 1 file changed, 6 insertions(+), 10 deletions(-) |
| |
| --- a/tools/testing/selftests/mm/uffd-unit-tests.c~selftests-mm-fix-two-wformat-security-warnings-in-uffd-builds |
| +++ a/tools/testing/selftests/mm/uffd-unit-tests.c |
| @@ -109,12 +109,11 @@ static void uffd_test_pass(void) |
| ksft_inc_fail_cnt(); \ |
| } while (0) |
| |
| -#define uffd_test_skip(...) do { \ |
| - printf("skipped [reason: "); \ |
| - printf(__VA_ARGS__); \ |
| - printf("]\n"); \ |
| - ksft_inc_xskip_cnt(); \ |
| - } while (0) |
| +static void uffd_test_skip(const char *message) |
| +{ |
| + printf("skipped [reason: %s]\n", message); |
| + ksft_inc_xskip_cnt(); |
| +} |
| |
| /* |
| * Returns 1 if specific userfaultfd supported, 0 otherwise. Note, we'll |
| @@ -1149,7 +1148,6 @@ int main(int argc, char *argv[]) |
| uffd_test_case_t *test; |
| mem_type_t *mem_type; |
| uffd_test_args_t args; |
| - char test_name[128]; |
| const char *errmsg; |
| int has_uffd, opt; |
| int i, j; |
| @@ -1192,10 +1190,8 @@ int main(int argc, char *argv[]) |
| mem_type = &mem_types[j]; |
| if (!(test->mem_targets & mem_type->mem_flag)) |
| continue; |
| - snprintf(test_name, sizeof(test_name), |
| - "%s on %s", test->name, mem_type->name); |
| |
| - uffd_test_start(test_name); |
| + uffd_test_start("%s on %s", test->name, mem_type->name); |
| if (!uffd_feature_supported(test)) { |
| uffd_test_skip("feature missing"); |
| continue; |
| _ |