• Andre Przywara's avatar
    KVM: SVM: implement NEXTRIPsave SVM feature · 6bc31bdc
    Andre Przywara authored
    On SVM we set the instruction length of skipped instructions
    to hard-coded, well known values, which could be wrong when (bogus,
    but valid) prefixes (REX, segment override) are used.
    Newer AMD processors (Fam10h 45nm and better, aka. PhenomII or
    AthlonII) have an explicit NEXTRIP field in the VMCB containing the
    desired information.
    Since it is cheap to do so, we use this field to override the guessed
    value on newer processors.
    A fix for older CPUs would be rather expensive, as it would require
    to fetch and partially decode the instruction. As the problem is not
    a security issue and needs special, handcrafted code to trigger
    (no compiler will ever generate such code), I omit a fix for older
    CPUs.
    If someone is interested, I have both a patch for these CPUs as well as
    demo code triggering this issue: It segfaults under KVM, but runs
    perfectly on native Linux.
    Signed-off-by: default avatarAndre Przywara <andre.przywara@amd.com>
    Signed-off-by: default avatarMarcelo Tosatti <mtosatti@redhat.com>
    6bc31bdc
svm.c 84.8 KB