We don't need to store any CPUID data for function we know nothing about. However, this limit may need to be increased in the future when libvirt learns features described by a CPUID function greater than 10. The comparison is done after subtracting high-bits prefix, so currently functions 0x00000000 to 0x0000000a and 0x80000000 to 0x8000000a are stored. --- src/cpu/cpu_x86.c | 5 +++++ src/cpu/cpu_x86_data.h | 1 + 2 files changed, 6 insertions(+) diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index dbbcfd2..bd3f2b0 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -314,6 +314,11 @@ x86DataAddCpuid(struct cpuX86Data *data, cpuids = &data->extended; } + if (pos > CPUX86_MAX_FUNCTION) { + VIR_DEBUG("Ignoring unhandled function 0x%x", cpuid->function); + return 0; + } + if (x86DataExpand(data, basic_by, extended_by) < 0) return -1; diff --git a/src/cpu/cpu_x86_data.h b/src/cpu/cpu_x86_data.h index dc972a6..af470e4 100644 --- a/src/cpu/cpu_x86_data.h +++ b/src/cpu/cpu_x86_data.h @@ -36,6 +36,7 @@ struct cpuX86cpuid { # define CPUX86_BASIC 0x0 # define CPUX86_EXTENDED 0x80000000 +# define CPUX86_MAX_FUNCTION 10 struct cpuX86Data { size_t basic_len; -- 1.8.3.2 -- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list