Message ID | cf0d323d-6ef3-0b35-8423-5adab75ab4f1@suse.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | x86/Viridian: ExProcessorMasks handling improvements | expand |
On 18/11/2021 13:13, Jan Beulich wrote: > Both the wrong use of HV_STATUS_* and the return type of > hv_vpset_to_vpmask() can lead to viridian_hypercall()'s > ASSERT_UNREACHABLE() triggering when translating error codes from Xen > to Viridian representation. > > Fixes: b4124682db6e ("viridian: add ExProcessorMasks variants of the flush hypercalls") > Fixes: 9afa867d42ba ("viridian: add ExProcessorMasks variant of the IPI hypercall") > Signed-off-by: Jan Beulich <jbeulich@suse.com> Reviewed-by: Paul Durrant <paul@xen.org>
--- a/xen/arch/x86/hvm/viridian/viridian.c +++ b/xen/arch/x86/hvm/viridian/viridian.c @@ -628,8 +628,8 @@ static unsigned int hv_vpset_nr_banks(st return hweight64(vpset->valid_bank_mask); } -static uint16_t hv_vpset_to_vpmask(const struct hv_vpset *set, - struct hypercall_vpmask *vpmask) +static int hv_vpset_to_vpmask(const struct hv_vpset *set, + struct hypercall_vpmask *vpmask) { #define NR_VPS_PER_BANK (HV_VPSET_BANK_SIZE * 8) @@ -919,10 +919,10 @@ static int hvcall_ipi_ex(const union hyp input_params.reserved_zero[0] || input_params.reserved_zero[1] || input_params.reserved_zero[2] ) - return HV_STATUS_INVALID_PARAMETER; + return -EINVAL; if ( input_params.vector < 0x10 || input_params.vector > 0xff ) - return HV_STATUS_INVALID_PARAMETER; + return -EINVAL; *set = input_params.set; if ( set->format == HV_GENERIC_SET_SPARSE_4K )
Both the wrong use of HV_STATUS_* and the return type of hv_vpset_to_vpmask() can lead to viridian_hypercall()'s ASSERT_UNREACHABLE() triggering when translating error codes from Xen to Viridian representation. Fixes: b4124682db6e ("viridian: add ExProcessorMasks variants of the flush hypercalls") Fixes: 9afa867d42ba ("viridian: add ExProcessorMasks variant of the IPI hypercall") Signed-off-by: Jan Beulich <jbeulich@suse.com>