Messages in this thread | | | Subject | Re: [PATCH] KVM: x86: Add more protection against undefined behavior in rsvd_bits() | From | Paolo Bonzini <> | Date | Mon, 18 Jan 2021 18:34:19 +0100 |
| |
On 13/01/21 21:45, Sean Christopherson wrote: > Add compile-time asserts in rsvd_bits() to guard against KVM passing in > garbage hardcoded values, and cap the upper bound at '63' for dynamic > values to prevent generating a mask that would overflow a u64. > > Suggested-by: Paolo Bonzini <pbonzini@redhat.com> > Signed-off-by: Sean Christopherson <seanjc@google.com> > --- > arch/x86/kvm/mmu.h | 9 ++++++++- > 1 file changed, 8 insertions(+), 1 deletion(-) > > diff --git a/arch/x86/kvm/mmu.h b/arch/x86/kvm/mmu.h > index 581925e476d6..261be1d2032b 100644 > --- a/arch/x86/kvm/mmu.h > +++ b/arch/x86/kvm/mmu.h > @@ -44,8 +44,15 @@ > #define PT32_ROOT_LEVEL 2 > #define PT32E_ROOT_LEVEL 3 > > -static inline u64 rsvd_bits(int s, int e) > +static __always_inline u64 rsvd_bits(int s, int e) > { > + BUILD_BUG_ON(__builtin_constant_p(e) && __builtin_constant_p(s) && e < s); > + > + if (__builtin_constant_p(e)) > + BUILD_BUG_ON(e > 63); > + else > + e &= 63; > + > if (e < s) > return 0; > >
Queued for 5.11, thanks.
Paolo
| |