|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [PATCH v3] x86/CPUID: shrink max_{,sub}leaf fields according to actual leaf contents
On 19.04.2021 11:16, Roger Pau Monné wrote:
> Adding Paul also for the Viridian part.
>
> On Fri, Apr 16, 2021 at 03:16:41PM +0200, Jan Beulich wrote:
>> Zapping leaf data for out of range leaves is just one half of it: To
>> avoid guests (bogusly or worse) inferring information from mere leaf
>> presence, also shrink maximum indicators such that the respective
>> trailing entry is not all blank (unless of course it's the initial
>> subleaf of a leaf that's not the final one).
>>
>> This is also in preparation of bumping the maximum basic leaf we
>> support, to ensure guests not getting exposed related features won't
>> observe a change in behavior.
>>
>> Signed-off-by: Jan Beulich <jbeulich@xxxxxxxx>
>> ---
>> v3: Record the actual non-empty subleaf in p->basic.raw[0x7], rather
>> than subleaf 0. Re-base over Viridian leaf 40000005 addition.
>> v2: New.
>>
>> --- a/tools/tests/cpu-policy/test-cpu-policy.c
>> +++ b/tools/tests/cpu-policy/test-cpu-policy.c
>> @@ -8,10 +8,13 @@
>> #include <err.h>
>>
>> #include <xen-tools/libs.h>
>> +#include <xen/asm/x86-defns.h>
>> #include <xen/asm/x86-vendors.h>
>> #include <xen/lib/x86/cpu-policy.h>
>> #include <xen/domctl.h>
>>
>> +#define XSTATE_FP_SSE (X86_XCR0_FP | X86_XCR0_SSE)
>> +
>> static unsigned int nr_failures;
>> #define fail(fmt, ...) \
>> ({ \
>> @@ -553,6 +556,103 @@ static void test_cpuid_out_of_range_clea
>> }
>> }
>>
>> +static void test_cpuid_maximum_leaf_shrinking(void)
>> +{
>> + static const struct test {
>> + const char *name;
>> + struct cpuid_policy p;
>> + } tests[] = {
>> + {
>> + .name = "basic",
>> + .p = {
>> + /* Very basic information only. */
>> + .basic.max_leaf = 1,
>> + .basic.raw_fms = 0xc2,
>> + },
>> + },
>> + {
>> + .name = "cache",
>> + .p = {
>> + /* Cache subleaves present. */
>> + .basic.max_leaf = 4,
>> + .cache.subleaf[0].type = 1,
>
> On a private conversation with Andrew he raised the issue that the
> shrinking might be overly simplistic. For example if the x2APIC
> feature bit in leaf 1 is set then the max leaf should be at least 0xb
> in order to be able to fetch the x2APIC ID, even if it's 0.
But in such a case the "type" field of leaf 0xb's first sub-leaf is
going to be non-zero, isn't it?
> I also wonder if we are shrinking the leaves too much, for example we
> should always report up to 0x40000000 (or 0x40000100) plus the Xen
> leaves, as we never hide those and it's also documented in the public
> headers?
Not sure I follow - I'm likely confused by you quoting 0x40000000
and 0x40000100 rather than 0x400000nn and 0x400001nn, as elsewhere
you suggested we may not want to clip sub-leaves there. Can you
clarify whether you really mean only the first sub-leaves (each)
here, and if so why you say "up to"? Furthermore for the Xen leaves
I don't think I do excessive clipping ...
Jan
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |