Hi David,
On Thu, Sep 26, 2024 at 07:37:57PM +0100, David Woodhouse wrote:
@@ -392,6 +403,32 @@ static int kvm_psci_1_x_call(struct kvm_vcpu *vcpu, u32 minor) break; } break;
- case PSCI_1_3_FN_SYSTEM_OFF2:
kvm_psci_narrow_to_32bit(vcpu);fallthrough;- case PSCI_1_3_FN64_SYSTEM_OFF2:
if (minor < 3)break;arg = smccc_get_arg1(vcpu);if (arg != PSCI_1_3_HIBERNATE_TYPE_OFF) {val = PSCI_RET_INVALID_PARAMS;break;}
This is missing a check that arg2 must be zero.
kvm_psci_system_off2(vcpu);/** We shouldn't be going back to guest VCPU after* receiving SYSTEM_OFF2 request.** If user space accidentally/deliberately resumes* guest VCPU after SYSTEM_OFF2 request then guest* VCPU should see internal failure from PSCI return* value. To achieve this, we preload r0 (or x0) with* PSCI return value INTERNAL_FAILURE.*/val = PSCI_RET_INTERNAL_FAILURE;ret = 0; default: return kvm_psci_0_2_call(vcpu); }break;-- 2.44.0