On 6/17/24 7:24 PM, John Hubbard wrote:
Clean up and move some copy-pasted items into a new mseal_helpers.h.
- The test macros can be made safer and simpler, by observing that they
are invariably called when about to return. This means that the macros
do not need an intrusive label to goto; they can simply return.
- PKEY* items. We cannot, unfortunately use pkey-helpers.h. The best we
can do is to factor out these few items into mseal_helpers.h.
- These tests still need their own definition of u64, so also move that
to the header file.
And I just noticed that I left out this one:
4. Be sure to include the new mseal_helpers.h in the Makefile dependencies.
In other words, this hunk is also needed:
diff --git a/tools/testing/selftests/mm/Makefile b/tools/testing/selftests/mm/Makefile
index 3b49bc3d0a3b..23daa097d5b7 100644
--- a/tools/testing/selftests/mm/Makefile
+++ b/tools/testing/selftests/mm/Makefile
@@ -2,6 +2,7 @@
# Makefile for mm selftests
LOCAL_HDRS += $(selfdir)/mm/local_config.h $(top_srcdir)/mm/gup_test.h
+LOCAL_HDRS += $(selfdir)/mm/mseal_helpers.h
include local_config.mk
I'll send out a v4 with that, once we resolve the discussion around patch 1/6.
thanks,
--
John Hubbard
NVIDIA
>
> Cc: Jeff Xu
jeffxu@chromium.org
> Acked-by: David Hildenbrand
david@redhat.com
> Signed-off-by: John Hubbard
jhubbard@nvidia.com
> ---
> tools/testing/selftests/mm/mseal_helpers.h | 41 ++++++++++++++++++
> tools/testing/selftests/mm/mseal_test.c | 49 +---------------------
> tools/testing/selftests/mm/seal_elf.c | 33 +--------------
> 3 files changed, 43 insertions(+), 80 deletions(-)
> create mode 100644 tools/testing/selftests/mm/mseal_helpers.h
>
> diff --git a/tools/testing/selftests/mm/mseal_helpers.h b/tools/testing/selftests/mm/mseal_helpers.h
> new file mode 100644
> index 000000000000..108d3fd0becb
> --- /dev/null
> +++ b/tools/testing/selftests/mm/mseal_helpers.h
> @@ -0,0 +1,41 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +
> +#define FAIL_TEST_IF_FALSE(test_passed) \
> + do { \
> + if (!(test_passed)) { \
> + ksft_test_result_fail("%s: line:%d\n", \
> + __func__, __LINE__); \
> + return; \
> + } \
> + } while (0)
> +
> +#define SKIP_TEST_IF_FALSE(test_passed) \
> + do { \
> + if (!(test_passed)) { \
> + ksft_test_result_skip("%s: line:%d\n", \
> + __func__, __LINE__); \
> + return; \
> + } \
> + } while (0)
> +
> +#define TEST_END_CHECK() ksft_test_result_pass("%s\n", __func__)
> +
> +#ifndef PKEY_DISABLE_ACCESS
> +#define PKEY_DISABLE_ACCESS 0x1
> +#endif
> +
> +#ifndef PKEY_DISABLE_WRITE
> +#define PKEY_DISABLE_WRITE 0x2
> +#endif
> +
> +#ifndef PKEY_BITS_PER_PKEY
> +#define PKEY_BITS_PER_PKEY 2
> +#endif
> +
> +#ifndef PKEY_MASK
> +#define PKEY_MASK (PKEY_DISABLE_ACCESS | PKEY_DISABLE_WRITE)
> +#endif
> +
> +#ifndef u64
> +#define u64 unsigned long long
> +#endif
> diff --git a/tools/testing/selftests/mm/mseal_test.c b/tools/testing/selftests/mm/mseal_test.c
> index 58c888529f42..d4d6ae42f502 100644
> --- a/tools/testing/selftests/mm/mseal_test.c
> +++ b/tools/testing/selftests/mm/mseal_test.c
> @@ -17,54 +17,7 @@
> #include <sys/ioctl.h>
> #include <sys/vfs.h>
> #include <sys/stat.h>
> -
> -/*
> - * need those definition for manually build using gcc.
> - * gcc -I ../../../../usr/include -DDEBUG -O3 -DDEBUG -O3 mseal_test.c -o mseal_test
> - */
> -#ifndef PKEY_DISABLE_ACCESS
> -# define PKEY_DISABLE_ACCESS 0x1
> -#endif
> -
> -#ifndef PKEY_DISABLE_WRITE
> -# define PKEY_DISABLE_WRITE 0x2
> -#endif
> -
> -#ifndef PKEY_BITS_PER_PKEY
> -#define PKEY_BITS_PER_PKEY 2
> -#endif
> -
> -#ifndef PKEY_MASK
> -#define PKEY_MASK (PKEY_DISABLE_ACCESS | PKEY_DISABLE_WRITE)
> -#endif
> -
> -#define FAIL_TEST_IF_FALSE(c) do {\
> - if (!(c)) {\
> - ksft_test_result_fail("%s, line:%d\n", __func__, __LINE__);\
> - goto test_end;\
> - } \
> - } \
> - while (0)
> -
> -#define SKIP_TEST_IF_FALSE(c) do {\
> - if (!(c)) {\
> - ksft_test_result_skip("%s, line:%d\n", __func__, __LINE__);\
> - goto test_end;\
> - } \
> - } \
> - while (0)
> -
> -
> -#define TEST_END_CHECK() {\
> - ksft_test_result_pass("%s\n", __func__);\
> - return;\
> -test_end:\
> - return;\
> -}
> -
> -#ifndef u64
> -#define u64 unsigned long long
> -#endif
> +#include "mseal_helpers.h"
>
> static unsigned long get_vma_size(void *addr, int *prot)
> {
> diff --git a/tools/testing/selftests/mm/seal_elf.c b/tools/testing/selftests/mm/seal_elf.c
> index 27bf2f84231d..45c73213775b 100644
> --- a/tools/testing/selftests/mm/seal_elf.c
> +++ b/tools/testing/selftests/mm/seal_elf.c
> @@ -16,38 +16,7 @@
> #include <sys/ioctl.h>
> #include <sys/vfs.h>
> #include <sys/stat.h>
> -
> -/*
> - * need those definition for manually build using gcc.
> - * gcc -I ../../../../usr/include -DDEBUG -O3 -DDEBUG -O3 seal_elf.c -o seal_elf
> - */
> -#define FAIL_TEST_IF_FALSE(c) do {\
> - if (!(c)) {\
> - ksft_test_result_fail("%s, line:%d\n", __func__, __LINE__);\
> - goto test_end;\
> - } \
> - } \
> - while (0)
> -
> -#define SKIP_TEST_IF_FALSE(c) do {\
> - if (!(c)) {\
> - ksft_test_result_skip("%s, line:%d\n", __func__, __LINE__);\
> - goto test_end;\
> - } \
> - } \
> - while (0)
> -
> -
> -#define TEST_END_CHECK() {\
> - ksft_test_result_pass("%s\n", __func__);\
> - return;\
> -test_end:\
> - return;\
> -}
> -
> -#ifndef u64
> -#define u64 unsigned long long
> -#endif
> +#include "mseal_helpers.h"
>
> /*
> * define sys_xyx to call syscall directly.