From: "Alex Bennée" <alex.bennee@linaro.org>
To: Richard Henderson <richard.henderson@linaro.org>
Cc: qemu-devel@nongnu.org, pbonzini@redhat.com, riku.voipio@iki.fi,
laurent@vivier.eu, peter.maydell@linaro.org
Subject: Re: [PATCH 0/3] linux-user: Implement x86_64 vsyscalls
Date: Thu, 16 Jan 2020 14:30:28 +0000 [thread overview]
Message-ID: <87imlblbi3.fsf@linaro.org> (raw)
In-Reply-To: <20200114210921.11216-1-richard.henderson@linaro.org>
Richard Henderson <richard.henderson@linaro.org> writes:
> The x86_64 abi has a legacy vsyscall page. The kernel folk
> have been trying to deprecate this since at least v3.1, but
>
> (1) We don't implement the vdso that replaces vsyscalls,
> (2) As of v5.5, the vsyscall page is still enabled by default.
>
> This lack is affecting Peter's linux-user testing.
>
> The dependency is not obvious because Peter is running the tests
> on x86_64, so the host is providing a vsyscall page to qemu.
>
> Because of how user-only memory operations are handled, with no
> validation of guest vs host pages, so long as qemu chooses to
> run with guest_base == 0, the guest may Just So Happen to read
> the host's vsyscall page.
>
> Complicating this, new OS releases may use a kernel configured
> with CONFIG_LEGACY_VSYSCALL_XONLY=y, which means the the vsyscall
> page cannot be read, only executed. Which means that the guest
> then cannot read the host vsyscall page during translation and
> will SIGSEGV.
>
> Exactly which of these many variables is affecting Peter's testing
> with Ubuntu 18.04 of my TCG merge, I'm not exactly sure. I suspect
> that it is the change to drop the textseg_addr adjustment to user-only
> static binaries. IIRC bionic does not support -static-pie, which is
> the preferred replacement. This could mean that the host and guest
> binaries overlap, which leads to guest_base != 0.
>
> I vaguely remember someone (Paolo?) implementing something like
> this many years ago, but clearly it never got merged.
>
> In any case, this emulation has been missing for too long.
>
>
> r~
>
>
> Richard Henderson (3):
> target/i386: Renumber EXCP_SYSCALL
> linux-user/i386: Split out gen_signal
> linux-user/i386: Emulate x86_64 vsyscalls
And realising I didn't read it properly:
/x86_64-linux-user/qemu-x86_64 ~/lsrc/linux.git/tools/testing/selftests/x86/test_vsyscall_64
[WARN] failed to find vDSO
no vsyscall map in /proc/self/maps
[RUN] test gettimeofday()
[RUN] test time()
[RUN] getcpu() on CPU 0
[RUN] getcpu() on CPU 1
[RUN] Checking read access to the vsyscall page
[OK] We do not have read access: #PF(0x4)
[RUN] Make sure that vsyscalls really page fault
**
ERROR:/home/alex/lsrc/qemu.git/linux-user/x86_64/../i386/cpu_loop.c:185:emulate_vsyscall: assertion failed: (ret != -TARGET_EFAULT)
qemu:handle_cpu_signal received signal outside vCPU context @ pc=0x7f6eed31b613
--
Alex Bennée
next prev parent reply other threads:[~2020-01-16 14:31 UTC|newest]
Thread overview: 21+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-01-14 21:09 [PATCH 0/3] linux-user: Implement x86_64 vsyscalls Richard Henderson
2020-01-14 21:09 ` [PATCH 1/3] target/i386: Renumber EXCP_SYSCALL Richard Henderson
2020-01-15 7:22 ` Philippe Mathieu-Daudé
2020-01-15 9:55 ` Alex Bennée
2020-01-14 21:09 ` [PATCH 2/3] linux-user/i386: Split out gen_signal Richard Henderson
2020-01-15 7:22 ` Philippe Mathieu-Daudé
2020-01-15 9:58 ` Alex Bennée
2020-01-14 21:09 ` [PATCH 3/3] linux-user/i386: Emulate x86_64 vsyscalls Richard Henderson
2020-01-16 10:51 ` Alex Bennée
2020-01-16 16:26 ` Alex Bennée
2020-01-16 18:19 ` Richard Henderson
2020-01-16 18:22 ` Richard Henderson
2020-01-16 20:15 ` Alex Bennée
2020-01-14 23:35 ` [PATCH 0/3] linux-user: Implement " Paolo Bonzini
2020-01-15 7:01 ` Laurent Desnogues
2020-01-15 10:14 ` Laurent Vivier
2020-01-15 17:28 ` Richard Henderson
2020-01-16 14:05 ` Alex Bennée
2020-01-16 19:37 ` Richard Henderson
2020-01-16 14:30 ` Alex Bennée [this message]
2020-01-16 18:31 ` Richard Henderson
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=87imlblbi3.fsf@linaro.org \
--to=alex.bennee@linaro.org \
--cc=laurent@vivier.eu \
--cc=pbonzini@redhat.com \
--cc=peter.maydell@linaro.org \
--cc=qemu-devel@nongnu.org \
--cc=richard.henderson@linaro.org \
--cc=riku.voipio@iki.fi \
/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).