qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [PATCH v2 0/5] linux-user: Implement x86_64 vsyscalls


From: Laurent Vivier
Subject: Re: [PATCH v2 0/5] linux-user: Implement x86_64 vsyscalls
Date: Tue, 28 Jan 2020 18:26:40 +0100
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.3.1

Le 16/01/2020 à 20:43, Richard Henderson a écrit :
> Changes since v2:
> 
>   * Add /proc/self/maps line
> 
>       I'm not sure this is really necessary.  The linux kernel
>       self-test checks for it, and modifies the set of tests that
>       it runs based on it.  But otherwise I think it's unused.
> 
>   * Fix errors in base gettimeofday syscall
> 
>       This is also checked by test_vsyscall, as noticed by AJB.
> 

Hi Richard,

do you plan to send a v3?

Thanks,
Laurent

> r~
> 
> 
> Original blurb:
> 
> 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.
> 
> 
> Richard Henderson (5):
>   target/i386: Renumber EXCP_SYSCALL
>   linux-user/i386: Split out gen_signal
>   linux-user/i386: Emulate x86_64 vsyscalls
>   linux-user: Add x86_64 vsyscall page to /proc/self/maps
>   linux-user: Flush out implementation of gettimeofday
> 
>  target/i386/cpu.h          |   6 +-
>  linux-user/i386/cpu_loop.c | 198 ++++++++++++++++++++++++++-----------
>  linux-user/syscall.c       |  36 ++++++-
>  target/i386/translate.c    |  16 ++-
>  4 files changed, 190 insertions(+), 66 deletions(-)
> 




reply via email to

[Prev in Thread] Current Thread [Next in Thread]