|
@@ -3619,6 +3619,7 @@ static void seg_setup(int seg)
|
|
|
|
|
|
static int alloc_apic_access_page(struct kvm *kvm)
|
|
|
{
|
|
|
+ struct page *page;
|
|
|
struct kvm_userspace_memory_region kvm_userspace_mem;
|
|
|
int r = 0;
|
|
|
|
|
@@ -3633,7 +3634,13 @@ static int alloc_apic_access_page(struct kvm *kvm)
|
|
|
if (r)
|
|
|
goto out;
|
|
|
|
|
|
- kvm->arch.apic_access_page = gfn_to_page(kvm, 0xfee00);
|
|
|
+ page = gfn_to_page(kvm, 0xfee00);
|
|
|
+ if (is_error_page(page)) {
|
|
|
+ r = -EFAULT;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ kvm->arch.apic_access_page = page;
|
|
|
out:
|
|
|
mutex_unlock(&kvm->slots_lock);
|
|
|
return r;
|
|
@@ -3641,6 +3648,7 @@ out:
|
|
|
|
|
|
static int alloc_identity_pagetable(struct kvm *kvm)
|
|
|
{
|
|
|
+ struct page *page;
|
|
|
struct kvm_userspace_memory_region kvm_userspace_mem;
|
|
|
int r = 0;
|
|
|
|
|
@@ -3656,8 +3664,13 @@ static int alloc_identity_pagetable(struct kvm *kvm)
|
|
|
if (r)
|
|
|
goto out;
|
|
|
|
|
|
- kvm->arch.ept_identity_pagetable = gfn_to_page(kvm,
|
|
|
- kvm->arch.ept_identity_map_addr >> PAGE_SHIFT);
|
|
|
+ page = gfn_to_page(kvm, kvm->arch.ept_identity_map_addr >> PAGE_SHIFT);
|
|
|
+ if (is_error_page(page)) {
|
|
|
+ r = -EFAULT;
|
|
|
+ goto out;
|
|
|
+ }
|
|
|
+
|
|
|
+ kvm->arch.ept_identity_pagetable = page;
|
|
|
out:
|
|
|
mutex_unlock(&kvm->slots_lock);
|
|
|
return r;
|