Message ID | 20190613111335.7645-10-cristian.marussi@arm.com (mailing list archive) |
---|---|
State | New |
Headers | show |
Series | Add arm64/signal initial kselftest support | expand |
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
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); + + return 1; +} + +struct tdescr tde = { + .name = "FAKE_SIGRETURN_MISALIGNED_SP", + .descr = "Triggers a fake sigreturn with a misaligned sigframe on SP", + .sig_ok = SIGSEGV, + .timeout = 3, + .run = fake_sigreturn_misaligned_run, +};
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