On Thu, Jun 13, 2019 at 12:13:31PM +0100, Cristian Marussi wrote:
Added a simple fake_sigreturn testcase which builds a good ucontext_t and tries to place it onto the stack in a misaligned way. Expects a SIGSEGV on test PASS.
Signed-off-by: Cristian Marussi cristian.marussi@arm.com
.../arm64/signal/testcases/.gitignore | 1 + .../testcases/fake_sigreturn_misaligned.c | 30 +++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 tools/testing/selftests/arm64/signal/testcases/fake_sigreturn_misaligned.c
diff --git a/tools/testing/selftests/arm64/signal/testcases/.gitignore b/tools/testing/selftests/arm64/signal/testcases/.gitignore index c2972c3f33ca..3e6b26be6727 100644 --- a/tools/testing/selftests/arm64/signal/testcases/.gitignore +++ b/tools/testing/selftests/arm64/signal/testcases/.gitignore @@ -6,3 +6,4 @@ mangle_pstate_invalid_mode_el1 mangle_pstate_invalid_mode_el2 mangle_pstate_invalid_mode_el3 mangle_pstate_ssbs_regs +fake_sigreturn_misaligned diff --git a/tools/testing/selftests/arm64/signal/testcases/fake_sigreturn_misaligned.c b/tools/testing/selftests/arm64/signal/testcases/fake_sigreturn_misaligned.c new file mode 100644 index 000000000000..d551858dd9dd --- /dev/null +++ b/tools/testing/selftests/arm64/signal/testcases/fake_sigreturn_misaligned.c @@ -0,0 +1,30 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +/* Copyright (C) 2019 ARM Limited */
+#include <ucontext.h>
+#include "test_signals_utils.h" +#include "testcases.h"
+struct a_sigframe sf;
+static int fake_sigreturn_misaligned_run(struct tdescr *td,
siginfo_t *si, ucontext_t *uc)
+{
- /* just to fill the ucontext_t with something real */
- if (!get_current_context(td, &sf.uc))
return 1;
- /* Forcing sigframe on misaligned (=!16) SP */
- fake_sigreturn(&sf, sizeof(sf), 8);
Does this do the right thing? From the asm code, it looks like fake_sigreturn will ensure that SP % 8 == 0, but that may still be fine (i.e., SP % 16 == 0 and SP % 8 == 0 can both be true, depending on the precise value of sizeof(sf)).
Maybe I misunderstood what fake_sigreturn is doing.
Instead, do we want to ensure that SP % 16 != 0 here?
[...]
Cheers ---Dave