public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: Dev Jain <dev.jain@arm.com>
To: shuah@kernel.org, linux-arm-kernel@lists.infradead.org,
	linux-kselftest@vger.kernel.org, Catalin.Marinas@arm.com,
	will@kernel.org
Cc: broonie@kernel.org, ryan.roberts@arm.com, rob.herring@arm.com,
	mark.rutland@arm.com, linux@armlinux.org.uk,
	suzuki.poulose@arm.com, Anshuman.Khandual@arm.com,
	aneesh.kumar@kernel.org, linux-kernel@vger.kernel.org,
	Dev Jain <dev.jain@arm.com>
Subject: [PATCH v3 4/9] selftests/arm: Add signal tests
Date: Tue, 25 Jun 2024 17:54:03 +0530	[thread overview]
Message-ID: <20240625122408.1439097-5-dev.jain@arm.com> (raw)
In-Reply-To: <20240625122408.1439097-1-dev.jain@arm.com>

This patch introduces two signal tests, and generic test wrappers similar
to selftests/arm64/signal directory, along with the mangling testcases
found therein. arm_cpsr, dumped by the kernel to user space in the ucontext
structure to the signal handler, is mangled with. The kernel must spot this
illegal attempt and the testcases are expected to terminate via SEGV.

Signed-off-by: Dev Jain <dev.jain@arm.com>
---
 .../testcases/mangle_cpsr_invalid_aif_bits.c  | 33 +++++++++++++++++++
 .../mangle_cpsr_invalid_compat_toggle.c       | 29 ++++++++++++++++
 2 files changed, 62 insertions(+)
 create mode 100644 tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_aif_bits.c
 create mode 100644 tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_compat_toggle.c

diff --git a/tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_aif_bits.c b/tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_aif_bits.c
new file mode 100644
index 000000000000..ea73a96fb229
--- /dev/null
+++ b/tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_aif_bits.c
@@ -0,0 +1,33 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2024 ARM Limited
+ *
+ * Try to mangle the ucontext from inside a signal handler, mangling the
+ * AIF bits in an illegal manner: this attempt must be spotted by Kernel
+ * and the test case is expected to be terminated via SEGV.
+ *
+ */
+
+#include "test_signals_utils.h"
+
+static int mangle_invalid_cpsr_run(struct tdescr *td, siginfo_t *si,
+				   ucontext_t *uc)
+{
+
+	/*
+	 * This config should trigger a SIGSEGV by Kernel when it checks
+	 * the sigframe consistency in valid_user_regs() routine.
+	 */
+	uc->uc_mcontext.arm_cpsr |= PSR_A_BIT | PSR_I_BIT | PSR_F_BIT;
+
+	return 1;
+}
+
+struct tdescr tde = {
+		.sanity_disabled = true,
+		.name = "MANGLE_CPSR_INVALID_AIF_BITS",
+		.descr = "Mangling uc_mcontext with INVALID AIF_BITS",
+		.sig_trig = SIGUSR1,
+		.sig_ok = SIGSEGV,
+		.run = mangle_invalid_cpsr_run,
+};
diff --git a/tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_compat_toggle.c b/tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_compat_toggle.c
new file mode 100644
index 000000000000..f7ccbccb24e5
--- /dev/null
+++ b/tools/testing/selftests/arm/signal/testcases/mangle_cpsr_invalid_compat_toggle.c
@@ -0,0 +1,29 @@
+// SPDX-License-Identifier: GPL-2.0-only
+/*
+ * Copyright (C) 2024 ARM Limited
+ *
+ * Try to mangle the ucontext from inside a signal handler, toggling
+ * the execution state bit: this attempt must be spotted by Kernel and
+ * the test case is expected to be terminated via SEGV.
+ */
+
+#include "test_signals_utils.h"
+
+static int mangle_invalid_cpsr_run(struct tdescr *td, siginfo_t *si,
+				   ucontext_t *uc)
+{
+
+	/* This config should trigger a SIGSEGV by Kernel */
+	uc->uc_mcontext.arm_cpsr ^= MODE32_BIT;
+
+	return 1;
+}
+
+struct tdescr tde = {
+		.sanity_disabled = true,
+		.name = "MANGLE_CPSR_INVALID_STATE_TOGGLE",
+		.descr = "Mangling uc_mcontext with INVALID STATE_TOGGLE",
+		.sig_trig = SIGUSR1,
+		.sig_ok = SIGSEGV,
+		.run = mangle_invalid_cpsr_run,
+};
-- 
2.39.2


  parent reply	other threads:[~2024-06-25 12:24 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-25 12:23 [PATCH v3 0/9] A new selftests/ directory for arm compatibility testing Dev Jain
2024-06-25 12:24 ` [PATCH v3 1/9] selftests/arm: Add mm test Dev Jain
2024-06-25 12:24 ` [PATCH v3 2/9] selftests/arm: Add elf test Dev Jain
2024-06-25 12:24 ` [PATCH v3 3/9] selftests: arm, arm64: Use ifdeffery to pull signal infrastructure Dev Jain
2024-06-25 15:42   ` Mark Brown
2024-06-25 12:24 ` Dev Jain [this message]
2024-06-25 18:04   ` [PATCH v3 4/9] selftests/arm: Add signal tests Mark Brown
2024-06-25 12:24 ` [PATCH v3 5/9] selftests/arm64: Fix build warnings for ptrace Dev Jain
2024-06-25 14:35   ` Mark Brown
2024-06-25 12:24 ` [PATCH v3 6/9] selftests/arm64: Split ptrace, use ifdeffery Dev Jain
2024-06-25 18:13   ` Mark Brown
2024-06-25 12:24 ` [PATCH v3 7/9] selftests/arm: Add ptrace test Dev Jain
2024-06-25 12:24 ` [PATCH v3 8/9] selftests/arm: Add ptrace_64 test Dev Jain
2024-06-25 18:18   ` Mark Brown
2024-06-25 12:24 ` [PATCH v3 9/9] selftests: Add build infrastructure along with README Dev Jain
2024-06-25 15:32   ` Mark Brown

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240625122408.1439097-5-dev.jain@arm.com \
    --to=dev.jain@arm.com \
    --cc=Anshuman.Khandual@arm.com \
    --cc=Catalin.Marinas@arm.com \
    --cc=aneesh.kumar@kernel.org \
    --cc=broonie@kernel.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-kselftest@vger.kernel.org \
    --cc=linux@armlinux.org.uk \
    --cc=mark.rutland@arm.com \
    --cc=rob.herring@arm.com \
    --cc=ryan.roberts@arm.com \
    --cc=shuah@kernel.org \
    --cc=suzuki.poulose@arm.com \
    --cc=will@kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox