On 16/10/19 13:23, Xiaoyao Li wrote: > KVM always traps #AC, and only advertises split-lock detection to guest > when the global variable split_lock_detection_enabled in host is true. > > - If guest enables #AC (CPL3 alignment check or split-lock detection > enabled), injecting #AC back into guest since it's supposed capable of > handling it. > - If guest doesn't enable #AC, KVM reports #AC to userspace (like other > unexpected exceptions), and we can print a hint in kernel, or let > userspace (e.g., QEMU) tell the user guest is killed because there is a > split-lock in guest. > > In this way, malicious guests always get killed by userspace and old > sane guests cannot survive as well if it causes split-lock. If we do > want old sane guests work we have to disable the split-lock detection > (through booting parameter or debugfs) in the host just the same as we > want to run an old and split-lock generating userspace binary. Old guests are prevalent enough that enabling split-lock detection by default would be a big usability issue. And even ignoring that, you would get the issue you describe below: > But there is an issue that we advertise split-lock detection to guest > based on the value of split_lock_detection_enabled to be true in host, > which can be turned into false dynamically when split-lock happens in > host kernel. ... which means that supposedly safe guests become unsafe, and that is bad. > This causes guest's capability changes at run time and I > don't if there is a better way to inform guest? Maybe we need a pv > interface? Even a PV interface would not change the basic fact that a supposedly safe configuration becomes unsafe. Paolo