In the context switch logic Xen attempts to skip an IBPB in the case of
a vCPU returning to a CPU on which it was the previous vCPU to run.
While safe for Xens isolation between vCPUs, this prevents the guest
kernel correctly isolating between tasks. Consider:
- vCPU runs on CPU A, running task 1.
- vCPU moves to CPU B, idle gets scheduled on A. Xen skips IBPB.
- On CPU B, guest kernel switches from task 1 to 2, issuing IBPB.
- vCPU moves back to CPU A. Xen skips IBPB again.
Now, task 2 is running on CPU A with task 1s training still in the BTB.
Weakness
The product does not initialize or incorrectly initializes a resource, which might leave the resource in an unexpected state when it is accessed or used.
Affected Software
| Name | Vendor | Start Version | End Version |
|---|
| Xen | Xen | 4.6.0 (including) | * |
Potential Mitigations
- Use a language that does not allow this weakness to occur or provides constructs that make this weakness easier to avoid.
- For example, in Java, if the programmer does not explicitly initialize a variable, then the code could produce a compile-time error (if the variable is local) or automatically initialize the variable to the default value for the variable’s type. In Perl, if explicit initialization is not performed, then a default value of undef is assigned, which is interpreted as 0, false, or an equivalent value depending on the context in which the variable is accessed.
References