KVM: x86: Add more protection against undefined behavior in rsvd_bits()
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> Message-Id: <20210113204515.3473079-1-seanjc@google.com> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
Родитель
a10f373ad3
Коммит
eb79cd00ce
|
@ -44,8 +44,15 @@
|
||||||
#define PT32_ROOT_LEVEL 2
|
#define PT32_ROOT_LEVEL 2
|
||||||
#define PT32E_ROOT_LEVEL 3
|
#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)
|
if (e < s)
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче