On 10/09/21 03:59, Xiaoyao Li wrote:
Ugh, looking at the rest of the code, even this isn't sufficient
because pt_desc.guest.addr_{a,b} are hardcoded at 4 entries, i.e.
running KVM on hardware with >4 entries will lead to buffer
overflows.
it's hardcoded to 4 because there is a note of "no processors support
more than 4 address ranges" in SDM vol.3 Chapter 31.3.1, table
31-11
True, but I agree with Sean that it's not pretty.
One option would be to bump that to the theoretical max of 15,
which doesn't seem too horrible, especially if pt_desc as a whole
is allocated on-demand, which it probably should be since it isn't
exactly tiny (nor ubiquitous)
A different option would be to let userspace define whatever it
wants for guest CPUID, and instead cap nr_addr_ranges at
min(host.cpuid, guest.cpuid, RTIT_ADDR_RANGE).
This is the safest option.
Paolo