!cpus_have_final_cap(ARM64_HAS_HCR_NV1))
                return -EINVAL;
 
+       if (!vcpu->arch.ctxt.vncr_array)
+               vcpu->arch.ctxt.vncr_array = (u64 *)__get_free_page(GFP_KERNEL_ACCOUNT |
+                                                                   __GFP_ZERO);
+
+       if (!vcpu->arch.ctxt.vncr_array)
+               return -ENOMEM;
+
        /*
         * Let's treat memory allocation failures as benign: If we fail to
         * allocate anything, return an error and keep the allocated array
                for (int i = kvm->arch.nested_mmus_size; i < num_mmus; i++)
                        kvm_free_stage2_pgd(&kvm->arch.nested_mmus[i]);
 
+               free_page((unsigned long)vcpu->arch.ctxt.vncr_array);
+               vcpu->arch.ctxt.vncr_array = NULL;
+
                return ret;
        }
 
 
        if (sve_state)
                kvm_unshare_hyp(sve_state, sve_state + vcpu_sve_state_size(vcpu));
        kfree(sve_state);
+       free_page((unsigned long)vcpu->arch.ctxt.vncr_array);
        kfree(vcpu->arch.ccsidr);
 }