Re: Making KMSAN compatible with paravirtualization

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On 11/11/2022 15:21, Vitaly Kuznetsov wrote:
> Alexander Potapenko <glider@xxxxxxxxxx> writes:
>
>> Hi,
>>
>> While investigating KMSAN's incompatibilities with the default Ubuntu
>> config (https://github.com/google/kmsan/issues/89#issuecomment-1310702949),
>> I figured out that a kernel won't boot with both CONFIG_KMSAN=y and
>> CONFIG_XEN_PV=y.
>>
>> In particular, it may crash in load_percpu_segment():
>>
>>         __loadsegment_simple(gs, 0);
>>         wrmsrl(MSR_GS_BASE, cpu_kernelmode_gs_base(cpu));
>>
>> Here the value of %gs between __loadsegment_simple() and wrmsrl() is
>> zero, so when KMSAN's __msan_get_context_state() instrumentation
>> function is called before the actual WRMSR instruction is performed,
>> it will attempt to access percpu data and crash.
>>
>> Unless instructed otherwise (by noinstr or __no_sanitize_memory on the
>> source level, or by KMSAN_SANITIZE := n on the Makefile level), KMSAN
>> inserts instrumentation at function prologue for every non-inlined
>> function, including native_write_msr().
>>
>> Marking native_write_msr() noinstr actually makes the kernel boot for
>> me, but I am not sure if this is enough. In fact we'll need to fix
>> every situation in which instrumentation code may be called with
>> invalid %gs value. Do you think this is feasible? Overall, should we
>> care about KMSAN working with paravirtualization?
> I think XEN PV is really special, let's Cc: xen-devel@ first.

Xen PV has some some quirks, but it's really not as special as most
people think.  Certainly not relevant here.

It's actually load_percpu_segment() which is broken here, and was fixed
in the call depth tracking series.

https://lore.kernel.org/lkml/166601847113.401.13616810593513367893.tip-bot2@tip-bot2/

~Andrew




[Index of Archives]     [KVM ARM]     [KVM ia64]     [KVM ppc]     [Virtualization Tools]     [Spice Development]     [Libvirt]     [Libvirt Users]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite Questions]     [Linux Kernel]     [Linux SCSI]     [XFree86]

  Powered by Linux