From: Shuo A Liu <shuo.a.liu@intel.com>
To: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: linux-kernel@vger.kernel.org, x86@kernel.org,
"H . Peter Anvin" <hpa@zytor.com>,
Thomas Gleixner <tglx@linutronix.de>,
Ingo Molnar <mingo@redhat.com>, Borislav Petkov <bp@alien8.de>,
Sean Christopherson <sean.j.christopherson@intel.com>,
Yu Wang <yu1.wang@intel.com>,
Reinette Chatre <reinette.chatre@intel.com>,
Zhi Wang <zhi.a.wang@intel.com>,
Zhenyu Wang <zhenyuw@linux.intel.com>
Subject: Re: [PATCH v5 07/17] virt: acrn: Introduce an ioctl to set vCPU registers state
Date: Wed, 11 Nov 2020 20:03:48 +0800 [thread overview]
Message-ID: <20201111120348.GI17702@shuo-intel.sh.intel.com> (raw)
In-Reply-To: <X6u82BylaUR8nZec@kroah.com>
On Wed 11.Nov'20 at 11:28:40 +0100, Greg Kroah-Hartman wrote:
>On Wed, Nov 11, 2020 at 05:54:31PM +0800, Shuo A Liu wrote:
>> On Tue 10.Nov'20 at 15:54:26 +0100, Greg Kroah-Hartman wrote:
>> > On Tue, Nov 10, 2020 at 09:14:19PM +0800, Shuo A Liu wrote:
>> > > > And there really is no validation of
>> > > > any fields?
>> > >
>> > > Yes. Because HSM driver has little knowledge to do the validation.
>> >
>> > What is "HSM driver"? And you all are ready for fuzzers to break this
>> > into small pieces, right? No validation of any input parameters feels
>> > really really wrong. Best of luck!
>>
>> This driver is HSM (Hypervisor Service Module) driver.
>> Take this hypercall for example. The register values are set by user, we
>> can do nothing to verify them. If the values are wrong, the VM will
>> crash and the hypervisor will handle that.
>
>Ah, nice, so you are creating a situation where any user can crash the
>VM, what can go wrong :(
Not any user, only the one who create the VM. Others cannot access the
same VM. Let me list a piece of pesudo code of the device usage:
fd = open the /dev/acrn_hsm, HSM driver binds a VM with the fd
ioctl (fd, CREATE_VM, SET_VCPU_REGS, START_VM ...)
close fd
The one who create the VM should have full control of the VM.
>
>> > > >
>> > > > Is there a pointer to a public document for all of these structures
>> > > > somewhere?
>> > >
>> > > Unfortunately, no. I have added some documents for some strutures
>> > > in the code via kernel-doc format.
>> >
>> > Is this not the hypervisor that this code is for:
>> > https://projectacrn.org/
>> > ?
>> >
>> > If not, what is this thing?
>> >
>> > If so, how is there not documentation for it?
>>
>> Oh, yes. We have the structures documentation on the website. Pls refer
>> https://projectacrn.github.io/latest/api/hypercall_api.html#
>> I meant that some fields of structures might be lack of explanation.
>
>Please work on the documentation of the fields, otherwise it doesn't
>really make much sense what is happening here, right?
Right. We will try to enrich them.
>
>Along these lines, where is the userspace code that makes all of these
>ioctls? Surely the fields must be documented there, right?
A userspace tool uses the ioctls, you can find the source from:
https://github.com/projectacrn/acrn-hypervisor/blob/master/devicemodel/core/vmmapi.c
There is a bit difference with the version i posted as i did some
polish for upstream.
>
>> > > > > + struct acrn_regs vcpu_regs;
>> > > > > +} __attribute__((aligned(8)));
>> > > >
>> > > > What does the alignment do here?
>> > >
>> > > The hypervisor wants to access aligned data block to improve the
>> > > efficiency. Currently, the hypervisor only runs on x86_64 platform.
>> >
>> > That's nice, but what do you think that adding this attribute to a
>> > structure provides you? Have you tested this really is doing what you
>> > think it is doing?
>>
>> It could make the compiler put the data structure at aligned address.
>
>Are you sure this is the correct way to do that?
I tried the attribute it works.
test.c:
struct foo_256_aligned {
int a;
unsigned char b;
} __attribute__((aligned(256)));
struct foo {
int a;
unsigned char b;
};
int main(int argc, char** argv) {
struct foo_256_aligned a;
struct foo b;
printf("%p %p\n", &a, &b);
}
# gcc -o test test.c && ./test
0x7ffe2af04b00 0x7ffe2af04af8
>
>> In the kernel the structures are almost from kmalloc, so the attribute
>> might be not meaningful. But in the hypervisor, there are many such data
>> structures in stack or in static pool, this attribute can make sure the
>> data structures are located at the aligned address.
>
>This is kernel data, not hypervisor data, in kernel memory. If you
>require the hypervisor to get the structures at a specific alignment in
>memory, you better check that in the kernel code, otherwise how can you
>ensure it?
Oh, this is a public header file which will be used by the hypervisor as
well. For kernel data from kmalloc, it should be also ok even if it
isn't 8 bytes aligned. The hypervisor will copy them if need keep
persistent.
Thanks
shuo
next prev parent reply other threads:[~2020-11-11 12:04 UTC|newest]
Thread overview: 61+ messages / expand[flat|nested] mbox.gz Atom feed top
2020-10-19 6:17 [PATCH v5 00/17] HSM driver for ACRN hypervisor shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 01/17] docs: acrn: Introduce ACRN shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 02/17] x86/acrn: Introduce acrn_{setup, remove}_intr_handler() shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 03/17] x86/acrn: Introduce an API to check if a VM is privileged shuo.a.liu
2020-11-02 14:37 ` Borislav Petkov
2020-11-03 6:27 ` Shuo A Liu
2020-11-03 10:25 ` Borislav Petkov
2020-11-04 3:50 ` Shuo A Liu
2020-11-04 18:51 ` Borislav Petkov
2020-11-05 3:25 ` Shuo A Liu
2020-10-19 6:17 ` [PATCH v5 04/17] x86/acrn: Introduce hypercall interfaces shuo.a.liu
2020-10-19 21:53 ` Nick Desaulniers
2020-10-19 22:15 ` Arvind Sankar
2020-10-20 1:38 ` Shuo A Liu
2020-10-20 2:08 ` Arvind Sankar
2020-10-20 2:30 ` Shuo A Liu
2020-10-20 14:16 ` Arvind Sankar
2020-10-21 1:16 ` Shuo A Liu
2020-11-02 14:56 ` Borislav Petkov
2020-11-02 16:09 ` Segher Boessenkool
2020-11-02 17:19 ` Borislav Petkov
2020-11-02 18:10 ` Segher Boessenkool
2020-11-02 18:34 ` Borislav Petkov
2020-11-02 20:01 ` Segher Boessenkool
2020-11-02 22:54 ` Borislav Petkov
2020-11-02 23:18 ` Segher Boessenkool
2020-11-03 16:44 ` Borislav Petkov
2020-11-03 18:47 ` Segher Boessenkool
2020-11-03 19:43 ` Borislav Petkov
2020-10-19 6:17 ` [PATCH v5 05/17] virt: acrn: Introduce ACRN HSM basic driver shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 06/17] virt: acrn: Introduce VM management interfaces shuo.a.liu
2020-11-04 19:02 ` Greg Kroah-Hartman
2020-11-05 3:10 ` Shuo A Liu
2020-11-05 6:29 ` Greg Kroah-Hartman
2020-11-05 7:35 ` Shuo A Liu
2020-11-05 8:26 ` Greg Kroah-Hartman
2020-11-05 9:02 ` Shuo A Liu
2020-11-05 9:16 ` Greg Kroah-Hartman
2020-11-05 12:48 ` Shuo A Liu
2020-11-05 13:04 ` Greg Kroah-Hartman
2020-10-19 6:17 ` [PATCH v5 07/17] virt: acrn: Introduce an ioctl to set vCPU registers state shuo.a.liu
2020-11-09 17:09 ` Greg Kroah-Hartman
2020-11-10 13:14 ` Shuo A Liu
2020-11-10 14:54 ` Greg Kroah-Hartman
2020-11-11 9:54 ` Shuo A Liu
2020-11-11 10:28 ` Greg Kroah-Hartman
2020-11-11 12:03 ` Shuo A Liu [this message]
2020-11-11 12:29 ` Greg Kroah-Hartman
2020-11-11 16:55 ` Shuo A Liu
2020-10-19 6:17 ` [PATCH v5 08/17] virt: acrn: Introduce EPT mapping management shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 09/17] virt: acrn: Introduce I/O request management shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 10/17] virt: acrn: Introduce PCI configuration space PIO accesses combiner shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 11/17] virt: acrn: Introduce interfaces for PCI device passthrough shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 12/17] virt: acrn: Introduce interrupt injection interfaces shuo.a.liu
2020-10-19 6:17 ` [PATCH v5 13/17] virt: acrn: Introduce interfaces to query C-states and P-states allowed by hypervisor shuo.a.liu
2020-10-19 6:18 ` [PATCH v5 14/17] virt: acrn: Introduce I/O ranges operation interfaces shuo.a.liu
2020-10-19 6:18 ` [PATCH v5 15/17] virt: acrn: Introduce ioeventfd shuo.a.liu
2020-10-19 6:18 ` [PATCH v5 16/17] virt: acrn: Introduce irqfd shuo.a.liu
2020-10-19 6:18 ` [PATCH v5 17/17] virt: acrn: Introduce an interface for Service VM to control vCPU shuo.a.liu
2020-10-21 15:19 ` [PATCH v5 00/17] HSM driver for ACRN hypervisor Dave Hansen
2020-10-26 0:39 ` Shuo A Liu
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=20201111120348.GI17702@shuo-intel.sh.intel.com \
--to=shuo.a.liu@intel.com \
--cc=bp@alien8.de \
--cc=gregkh@linuxfoundation.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=reinette.chatre@intel.com \
--cc=sean.j.christopherson@intel.com \
--cc=tglx@linutronix.de \
--cc=x86@kernel.org \
--cc=yu1.wang@intel.com \
--cc=zhenyuw@linux.intel.com \
--cc=zhi.a.wang@intel.com \
/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
Powered by JetHome