From: Paolo Bonzini <pbonzini@redhat.com>
To: Bin Meng <bmeng.cn@gmail.com>
Cc: kvm@vger.kernel.org, Bin Meng <bin.meng@windriver.com>
Subject: Re: [kvm-unit-tests][RFC PATCH] x86: Add a new test case for ret/iret with a nullified segment
Date: Mon, 18 Jan 2021 18:54:42 +0100 [thread overview]
Message-ID: <246dcfb6-cfcc-8213-eae8-634efbee159c@redhat.com> (raw)
In-Reply-To: <CAEUhbmUVBCNh8DiPusqSm20vRsvMRBDj2Rqu+QOyg3shTSPAug@mail.gmail.com>
On 16/01/21 15:16, Bin Meng wrote:
> Hi Paolo,
>
> On Tue, Nov 24, 2020 at 5:12 PM Paolo Bonzini <pbonzini@redhat.com> wrote:
>>
>> On 24/11/20 09:33, Bin Meng wrote:
>>> From: Bin Meng <bin.meng@windriver.com>
>>>
>>> This makes up the test case for the following QEMU patch:
>>> http://patchwork.ozlabs.org/project/qemu-devel/patch/1605261378-77971-1-git-send-email-bmeng.cn@gmail.com/
>>>
>>> Note the test case only fails on an unpatched QEMU with "accel=tcg".
>>>
>>> Signed-off-by: Bin Meng <bin.meng@windriver.com>
>>> ---
>>> Sending this as RFC since I am new to kvm-unit-tests
>>>
>>> x86/emulator.c | 38 ++++++++++++++++++++++++++++++++++++++
>>> 1 file changed, 38 insertions(+)
>>>
>>> diff --git a/x86/emulator.c b/x86/emulator.c
>>> index e46d97e..6100b6d 100644
>>> --- a/x86/emulator.c
>>> +++ b/x86/emulator.c
>>> @@ -6,10 +6,14 @@
>>> #include "processor.h"
>>> #include "vmalloc.h"
>>> #include "alloc_page.h"
>>> +#include "usermode.h"
>>>
>>> #define memset __builtin_memset
>>> #define TESTDEV_IO_PORT 0xe0
>>>
>>> +#define MAGIC_NUM 0xdeadbeefdeadbeefUL
>>> +#define GS_BASE 0x400000
>>> +
>>> static int exceptions;
>>>
>>> /* Forced emulation prefix, used to invoke the emulator unconditionally. */
>>> @@ -925,6 +929,39 @@ static void test_sreg(volatile uint16_t *mem)
>>> write_ss(ss);
>>> }
>>>
>>> +static uint64_t usr_gs_mov(void)
>>> +{
>>> + static uint64_t dummy = MAGIC_NUM;
>>> + uint64_t dummy_ptr = (uint64_t)&dummy;
>>> + uint64_t ret;
>>> +
>>> + dummy_ptr -= GS_BASE;
>>> + asm volatile("mov %%gs:(%%rcx), %%rax" : "=a"(ret): "c"(dummy_ptr) :);
>>> +
>>> + return ret;
>>> +}
>>> +
>>> +static void test_iret(void)
>>> +{
>>> + uint64_t val;
>>> + bool raised_vector;
>>> +
>>> + /* Update GS base to 4MiB */
>>> + wrmsr(MSR_GS_BASE, GS_BASE);
>>> +
>>> + /*
>>> + * Per the SDM, jumping to user mode via `iret`, which is returning to
>>> + * outer privilege level, for segment registers (ES, FS, GS, and DS)
>>> + * if the check fails, the segment selector becomes null.
>>> + *
>>> + * In our test case, GS becomes null.
>>> + */
>>> + val = run_in_user((usermode_func)usr_gs_mov, GP_VECTOR,
>>> + 0, 0, 0, 0, &raised_vector);
>>> +
>>> + report(val == MAGIC_NUM, "Test ret/iret with a nullified segment");
>>> +}
>>> +
>>> /* Broken emulation causes triple fault, which skips the other tests. */
>>> #if 0
>>> static void test_lldt(volatile uint16_t *mem)
>>> @@ -1074,6 +1111,7 @@ int main(void)
>>> test_shld_shrd(mem);
>>> //test_lgdt_lidt(mem);
>>> test_sreg(mem);
>>> + test_iret();
>>> //test_lldt(mem);
>>> test_ltr(mem);
>>> test_cmov(mem);
>>>
>>
>> Thanks, the patch is good.
>
> Is this patch applied?
>
> Regards,
> Bin
>
Yes, it is.
Paolo
prev parent reply other threads:[~2021-01-18 17:56 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-11-24 8:33 [kvm-unit-tests][RFC PATCH] x86: Add a new test case for ret/iret with a nullified segment Bin Meng
2020-11-24 9:12 ` Paolo Bonzini
2021-01-16 14:16 ` Bin Meng
2021-01-18 17:54 ` Paolo Bonzini [this message]
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=246dcfb6-cfcc-8213-eae8-634efbee159c@redhat.com \
--to=pbonzini@redhat.com \
--cc=bin.meng@windriver.com \
--cc=bmeng.cn@gmail.com \
--cc=kvm@vger.kernel.org \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.