mirror of
https://github.com/projectacrn/acrn-hypervisor.git
synced 2025-06-24 14:33:38 +00:00
hv:fix crash issue when handling HC_NOTIFY_REQUEST_FINISH
Input 'vcpu_id' and the state of target vCPU should be validated properly: - 'vcpu_id' shall be less than 'vm->hw.created_vcpus' instead of 'MAX_VCPUS_PER_VM'. - The state of target vCPU should be "VCPU_PAUSED", and reject all other states. Tracked-On: #4245 Signed-off-by: Yonghua Huang <yonghua.huang@intel.com> Acked-by: Eddie Dong <eddie.dong@intel.com>
This commit is contained in:
parent
5702619620
commit
d4677a8917
@ -548,12 +548,12 @@ int32_t hcall_notify_ioreq_finish(uint16_t vmid, uint16_t vcpu_id)
|
|||||||
dev_dbg(ACRN_DBG_HYCALL, "[%d] NOTIFY_FINISH for vcpu %d",
|
dev_dbg(ACRN_DBG_HYCALL, "[%d] NOTIFY_FINISH for vcpu %d",
|
||||||
vmid, vcpu_id);
|
vmid, vcpu_id);
|
||||||
|
|
||||||
if (vcpu_id >= MAX_VCPUS_PER_VM) {
|
if (vcpu_id >= target_vm->hw.created_vcpus) {
|
||||||
pr_err("%s, failed to get VCPU %d context from VM %d\n",
|
pr_err("%s, failed to get VCPU %d context from VM %d\n",
|
||||||
__func__, vcpu_id, target_vm->vm_id);
|
__func__, vcpu_id, target_vm->vm_id);
|
||||||
} else {
|
} else {
|
||||||
vcpu = vcpu_from_vid(target_vm, vcpu_id);
|
vcpu = vcpu_from_vid(target_vm, vcpu_id);
|
||||||
if (vcpu->state != VCPU_OFFLINE) {
|
if (vcpu->state == VCPU_PAUSED) {
|
||||||
if (!vcpu->vm->sw.is_completion_polling) {
|
if (!vcpu->vm->sw.is_completion_polling) {
|
||||||
resume_vcpu(vcpu);
|
resume_vcpu(vcpu);
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user