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

Re: [Xen-devel] Hypercall privilege check



> Thanks for the quick answer!

np. ;-)

> But I guess my question was not clear enough, because I was actually
> asking about Xen and how it enforces hypercalls to be made only from
> ring 1. I just assumed that Xen checks if int 0x82 is executed with
> the right privilege. But when I tried to find where Xen actually does
> it, I couldn't find it. I hope my question is more clear this time :)

Ah, I see what you mean.

I think the hardware actually enforces this...  lemme see...

Yes, here we are: in xen/arch/x86/x86_32/traps.c::244 we have a:

    /* The hypercall entry vector is only accessible from ring 1. */
    _set_gate(idt_table+HYPERCALL_VECTOR, 14, 1, &hypercall);

So int 0x82 is only permitted to be executed from ring 1.  And the x86 
interrupt gate things enforce it in hardware, I assume.  x86 scares me, and 
so I'm being a bit vague here!

I imagine you'd get a GPF if you tried to hypercall from userspace, but I'm 
not so familiar with lowlevel x86 goop (at least, not when my manual's in 
another building!) so I can't be certain.

Trivia: As a result of hypercalls being only allowed from ring 1, the Minix 
port (for Xen 2.0, I think) which uses ring 1, 2 and 3 has portions of the 
kernel in ring 2 calling portions in ring 1 to actually perform hypercalls.

Cheers,
Mark

> - Steve
>
> On 6/28/07, Mark Williamson <mark.williamson@xxxxxxxxxxxx> wrote:
> > > I'm wondering where Xen actually checks whether a hypercall is made
> > > from ring 1 or ring 3. Could anyone point me out to the code? Any
> > > pointer would be much appreciated. Thanks!
> >
> > Hypercalls are made from ring 1.  The userspace tools do make hypercalls
> > sometimes, but they do it by calling a special kernel driver, which then
> > does the actual hypercall.  *actually* what that does is to jump into the
> > hypercall transfer page at the right location.  This page contains the
> > actual implementation of the hypercall (using this indirection allows
> > future versions of Xen to supply different implementations of the calls,
> > if appropriate).
> >
> > Take a look at:
> > drivers/xen/privcmd/privcmd.c  in the XenLinux tree.  This is used by the
> > dom0 tools to do control plane operations.
> >
> > Also, take a look at: include/asm-i386/mach-xen/asm/hypercall.h which
> > contains implementations of some other hypercalls.
> >
> > HTH,
> > Cheers,
> > mark
> >
> > --
> > Dave: Just a question. What use is a unicyle with no seat?  And no
> > pedals! Mark: To answer a question with a question: What use is a
> > skateboard? Dave: Skateboards have wheels.
> > Mark: My wheel has a wheel!
>
> _______________________________________________
> Xen-devel mailing list
> Xen-devel@xxxxxxxxxxxxxxxxxxx
> http://lists.xensource.com/xen-devel



-- 
Dave: Just a question. What use is a unicyle with no seat?  And no pedals!
Mark: To answer a question with a question: What use is a skateboard?
Dave: Skateboards have wheels.
Mark: My wheel has a wheel!

_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.