From: Laurent Vivier <laurent@vivier.eu>
To: Peter Maydell <peter.maydell@linaro.org>,
qemu-arm@nongnu.org, qemu-devel@nongnu.org
Cc: patches@linaro.org, Richard Henderson <rth@twiddle.net>,
Riku Voipio <riku.voipio@iki.fi>
Subject: Re: [Qemu-devel] [PATCH for-2.12] linux-user/signal.c: Put AArch64 frame record in the right place
Date: Fri, 13 Apr 2018 16:18:22 +0200 [thread overview]
Message-ID: <380f519b-03e8-db3c-35db-4fe45aa2424d@vivier.eu> (raw)
In-Reply-To: <20180412140222.2096-1-peter.maydell@linaro.org>
Le 12/04/2018 à 16:02, Peter Maydell a écrit :
> AArch64 stack frames include a 'frame record' which holds a pointer
> to the next frame record in the chain and the LR on entry to the
> function. The procedure calling standard doesn't mandate where
> exactly this frame record is in the stack frame, but for signal
> frames the kernel puts it right at the top. We used to put it
> there too, but in commit 7f0f4208b3a96f22 we accidentally put
> the "enlarge to the 4K reserved space minimum" check after the
> "allow for the frame record" code, rather than before it, with
> the effect that the frame record would be inside the reserved
> space and immediately after the last used part of it.
>
> Move the frame record back out of the reserved space to where
> we used to put it.
>
> This bug shouldn't break any sensible guest code, but test
> programs that deliberately look at the internal details
> of the signal frame layout will not find what they are
> expecting to see.
>
> Fixes: 7f0f4208b3a96f22
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> ---
> I'm marking this as for-2.12 on the basis that it puts our frame
> layout back to exactly what 2.11 had, and so seems safest.
> No sensible guest code should really care, though, so this is
> in the "only if we're doing an rc4" bucket; but I think that the
> softfloat fixes deserve an rc4 anyway.
>
> linux-user/signal.c | 12 ++++++------
> 1 file changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/linux-user/signal.c b/linux-user/signal.c
> index 8d9e6e8410..e6dfe0adfd 100644
> --- a/linux-user/signal.c
> +++ b/linux-user/signal.c
> @@ -1843,6 +1843,12 @@ static void target_setup_frame(int usig, struct target_sigaction *ka,
> layout.total_size += sizeof(struct target_aarch64_ctx);
> }
>
> + /* We must always provide at least the standard 4K reserved space,
> + * even if we don't use all of it (this is part of the ABI)
> + */
> + layout.total_size = MAX(layout.total_size,
> + sizeof(struct target_rt_sigframe));
> +
> /* Reserve space for the return code. On a real system this would
> * be within the VDSO. So, despite the name this is not a "real"
> * record within the frame.
> @@ -1850,12 +1856,6 @@ static void target_setup_frame(int usig, struct target_sigaction *ka,
> fr_ofs = layout.total_size;
> layout.total_size += sizeof(struct target_rt_frame_record);
>
> - /* We must always provide at least the standard 4K reserved space,
> - * even if we don't use all of it (this is part of the ABI)
> - */
> - layout.total_size = MAX(layout.total_size,
> - sizeof(struct target_rt_sigframe));
> -
> frame_addr = get_sigframe(ka, env, layout.total_size);
> trace_user_setup_frame(env, frame_addr);
> if (!lock_user_struct(VERIFY_WRITE, frame, frame_addr, 0)) {
>
It's hard to compare this code with the one in kernel, but if I compare
the offset of "fr" in QEMU and the one of "next_frame" they seem identical.
Reviewed-by: Laurent Vivier <laurent@vivier.eu>
next prev parent reply other threads:[~2018-04-13 14:18 UTC|newest]
Thread overview: 5+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-04-12 14:02 [Qemu-devel] [PATCH for-2.12] linux-user/signal.c: Put AArch64 frame record in the right place Peter Maydell
2018-04-13 4:46 ` Richard Henderson
2018-04-16 14:30 ` Peter Maydell
2018-04-13 14:18 ` Laurent Vivier [this message]
2018-04-13 14:20 ` Peter Maydell
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=380f519b-03e8-db3c-35db-4fe45aa2424d@vivier.eu \
--to=laurent@vivier.eu \
--cc=patches@linaro.org \
--cc=peter.maydell@linaro.org \
--cc=qemu-arm@nongnu.org \
--cc=qemu-devel@nongnu.org \
--cc=riku.voipio@iki.fi \
--cc=rth@twiddle.net \
/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;
as well as URLs for NNTP newsgroup(s).