[LTP] [PATCH 2/2] lib: Add .skip_in_compat flag

Richard Palethorpe rpalethorpe@suse.com
Mon Nov 15 16:20:29 CET 2021


Some tests can never be run under 32-bit compatibility mode. This adds
a flag to skip them. This will show up in the meta data in addition to
causing the test to exit with TCONF if compat mode is detected at
runtime.

It's possible that support for compat mode will be added to
CAN. If this happens then we will have to probe the interface for
support when in 32-bit compat mode.

Signed-off-by: Richard Palethorpe <rpalethorpe@suse.com>
Suggested-by: Cyril Hrubis <chrubis@suse.cz>
---
 include/tst_test.h                          |  1 +
 lib/tst_test.c                              |  4 ++++
 testcases/kernel/syscalls/ptrace/ptrace08.c | 13 +++++--------
 testcases/network/can/cve/can_bcm01.c       |  5 +++++
 4 files changed, 15 insertions(+), 8 deletions(-)

diff --git a/include/tst_test.h b/include/tst_test.h
index 3dcb45de0..602ce3090 100644
--- a/include/tst_test.h
+++ b/include/tst_test.h
@@ -164,6 +164,7 @@ struct tst_test {
 	 */
 	int all_filesystems:1;
 	int skip_in_lockdown:1;
+	int skip_in_compat:1;
 
 	/*
 	 * The skip_filesystem is a NULL terminated list of filesystems the
diff --git a/lib/tst_test.c b/lib/tst_test.c
index 02ae28335..c1fab3b18 100644
--- a/lib/tst_test.c
+++ b/lib/tst_test.c
@@ -18,6 +18,7 @@
 #define TST_NO_DEFAULT_MAIN
 #include "tst_test.h"
 #include "tst_device.h"
+#include "lapi/abisize.h"
 #include "lapi/futex.h"
 #include "lapi/syscalls.h"
 #include "tst_ansi_color.h"
@@ -978,6 +979,9 @@ static void do_setup(int argc, char *argv[])
 	if (tst_test->skip_in_lockdown && tst_lockdown_enabled())
 		tst_brk(TCONF, "Kernel is locked down, skipping test");
 
+	if (tst_test->skip_in_compat && TST_ABI != tst_kernel_bits())
+		tst_brk(TCONF, "Running in 32-bit compat mode");
+
 	if (tst_test->needs_cmds) {
 		const char *cmd;
 		char path[PATH_MAX];
diff --git a/testcases/kernel/syscalls/ptrace/ptrace08.c b/testcases/kernel/syscalls/ptrace/ptrace08.c
index f86f69a9c..170cae64c 100644
--- a/testcases/kernel/syscalls/ptrace/ptrace08.c
+++ b/testcases/kernel/syscalls/ptrace/ptrace08.c
@@ -66,14 +66,6 @@ static struct tst_kern_exv kvers[] = {
 
 static void setup(void)
 {
-	/*
-	 * When running in compat mode we can't pass 64 address to ptrace so we
-	 * have to skip the test.
-	 */
-	if (tst_kernel_bits() != KERN_ADDR_BITS)
-		tst_brk(TCONF, "Cannot pass 64bit kernel address in compat mode");
-
-
 	/*
 	 * The original fix for the kernel haven't rejected the kernel address
 	 * right away when breakpoint was modified from userspace it was
@@ -164,6 +156,11 @@ static struct tst_test test = {
 	.setup = setup,
 	.cleanup = cleanup,
 	.forks_child = 1,
+	/*
+	 * When running in compat mode we can't pass 64 address to ptrace so we
+	 * have to skip the test.
+	 */
+	.skip_in_compat = 1,
 	.tags = (const struct tst_tag[]) {
 		{"linux-git", "f67b15037a7a"},
 		{"CVE", "2018-1000199"},
diff --git a/testcases/network/can/cve/can_bcm01.c b/testcases/network/can/cve/can_bcm01.c
index 1c527da7a..d4f1e4ec4 100644
--- a/testcases/network/can/cve/can_bcm01.c
+++ b/testcases/network/can/cve/can_bcm01.c
@@ -11,6 +11,10 @@
  *  Date:   Sat Jun 19 13:18:13 2021 -0300
  *
  *  can: bcm: delay release of struct bcm_op after synchronize_rcu()
+ *
+ * The test is skipped when running in 32-bit compat mode. The kernel
+ * compatibility layer for CAN structures is not implemented at the
+ * time of writing.
  */
 
 #include "config.h"
@@ -137,6 +141,7 @@ static struct tst_test test = {
 	.cleanup = cleanup,
 	.taint_check = TST_TAINT_W | TST_TAINT_D,
 	.needs_root = 1,
+	.skip_in_compat = 1,
 	.needs_drivers = (const char *const[]) {
 		"vcan",
 		"can-bcm",
-- 
2.33.1



More information about the ltp mailing list