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

Re: [Xen-devel] [PATCH 4/9] x86/pv: Implement pv_hypercall() in C



>>> On 02.08.16 at 16:06, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 02/08/16 14:12, Jan Beulich wrote:
>>>>> On 18.07.16 at 11:51, <andrew.cooper3@xxxxxxxxxx> wrote:
>>> +long pv_hypercall(struct cpu_user_regs *regs)
>>> +{
>>> +    struct vcpu *curr = current;
>>> +#ifndef NDEBUG
>>> +    unsigned long old_rip = regs->rip;
>>> +#endif
>>> +    long ret;
>>> +    uint32_t eax = regs->eax;
>>> +
>>> +    ASSERT(curr->arch.flags & TF_kernel_mode);
>> I'm afraid TF_kernel_mode can't be relied on for 32-bit guests, so
>> this needs to move into the if() below.
> 
> In which case it should become ASSERT(guest_mode_kernel(curr, regs))

Ah, yes.

>>> +    if ( (eax >= NR_hypercalls) || !hypercall_table[eax] )
>>> +         return -ENOSYS;
>>> +
>>> +    if ( !is_pv_32bit_vcpu(curr) )
>>> +    {
>>> +        unsigned long rdi = regs->rdi;
>>> +        unsigned long rsi = regs->rsi;
>>> +        unsigned long rdx = regs->rdx;
>>> +        unsigned long r10 = regs->r10;
>>> +        unsigned long r8 = regs->r8;
>>> +        unsigned long r9 = regs->r9;
>>> +
>>> +#ifndef NDEBUG
>>> +        /* Deliberately corrupt parameter regs not used by this hypercall. 
>>> */
>>> +        switch ( hypercall_args_table[eax] )
>>> +        {
>>> +        case 0: rdi = 0xdeadbeefdeadf00dUL;
>>> +        case 1: rsi = 0xdeadbeefdeadf00dUL;
>>> +        case 2: rdx = 0xdeadbeefdeadf00dUL;
>>> +        case 3: r10 = 0xdeadbeefdeadf00dUL;
>>> +        case 4: r8 = 0xdeadbeefdeadf00dUL;
>>> +        case 5: r9 = 0xdeadbeefdeadf00dUL;
>> Without comments, aren't these going to become 5 new Coverity
>> issues?
> 
> There are no current warnings from the HVM side, so I doubt it. 
> Coverities' logic is rather complicated, but in this case I think the
> lack of any break statements at all is a sufficient hint that its fine.

Okay.

Jan


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
https://lists.xen.org/xen-devel

 


Rackspace

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