On Wed, Aug 19, 2020 at 2:00 AM Alexander Graf <graf@xxxxxxxxxx> wrote: > Why would we still need this with the allow list and user space #GP > deflection logic in place? Conversion to an allow list is cumbersome when you have a short deny list. Suppose that I want to implement the following deny list: {IA32_ARCH_CAPABILITIES, HV_X64_MSR_REFERENCE_TSC, MSR_GOOGLE_TRUE_TIME, MSR_GOOGLE_FDR_TRACE, MSR_GOOGLE_HBI}. What would the corresponding deny list look like? Given your current implementation, I don't think the corresponding allow list can actually be constructed. I want to allow 2^32-5 MSRs, but I can allow at most 122880, if I've done the math correctly. (10 ranges, each spanning at most 0x600 bytes worth of bitmap.) Perhaps we should adopt allow/deny rules similar to those accepted by most firewalls. Instead of ports, we have MSR indices. Instead of protocols, we have READ, WRITE, or READ/WRITE. Suppose that we supported up to <n> rules of the form: {start index, end index, access modes, allow or deny}? Rules would be processed in the order given, and the first rule that matched a given access would take precedence. Finally, userspace could specify the default behavior (either allow or deny) for any MSR access that didn't match any of the rules. Thoughts?