|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v2] Sanity check xsave area when migrating or restoring from older Xen verions
>>> On 18.10.14 at 01:36, <andrew.cooper3@xxxxxxxxxx> wrote:
> On 17/10/2014 18:11, Don Koch wrote:
>> +
>> + /* Check to see if the xsave_area is the maximum size.
>> + If so, it is likely the save is from an older xen. */
>> + cpuid_count(XSTATE_CPUID, 0, &eax, &ebx, &ecx, &edx);
>
> This check is bogus for heterogeneous hardware. We have no way of
> calculating what the maximum xsave area size was on the sending side
> should have been...
Actually we have a way, using the xfeature_mask field that you
made being ignored a while back. And I think applying sanity
checks where they can be applied is a good thing. But of course
we can't blindly compare against the full size found on the receiving
host. We could get the size from xstate_ctxt_size() unless the
sending host had features we don't have, in which case we'd need
to resort to manually calculating the value.
>> + if ( desc->length !=
>> + ecx + offsetof(struct hvm_hw_cpu_xsave, save_area) ) {
>> + printk(XENLOG_G_WARNING
>> + "HVM%d.%d restore mismatch: xsave length %u != %u\n",
>> + d->domain_id, vcpuid, desc->length, ecx +
>> + (u32)offsetof(struct hvm_hw_cpu_xsave, save_area));
>> + return -EOPNOTSUPP;
>> + }
>> +
>> + /* Make sure unused bytes are all zero. */
>
> ...which is fine, as we literally only care whether the overflow data is
> all zeros of not.
>
> It is is all empty, we really don't care how large it was supposed to be
> before. If it is not empty, then something is certainly corrupt in this
> record.
Not sure - as said above, if we can determine the precise size, then
I don't see why we shouldn't be making use of this value.
>> + {
>> + if ( *(overflow_start + i) )
>> + {
>> + printk(XENLOG_G_WARNING
>> + "HVM%d.%d restore mismatch: xsave[%d] has non-zero
>> data: %x\n",
>> + d->domain_id, vcpuid, i, *(overflow_start +i));
>
> I don't think it is useful to print the value of the first non-zero
> byte. I would reduce it just to "junk found in overflow space".
I think "non-zero" is better than "junk", but I agree that printing a
single byte's value here isn't very helpful. Printing the offset, otoh,
may well provide a clue at what went wrong.
Jan
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |