diff mbox series

[1/3] x86/Viridian: fix error code use

Message ID cf0d323d-6ef3-0b35-8423-5adab75ab4f1@suse.com (mailing list archive)
State New, archived
Headers show
Series x86/Viridian: ExProcessorMasks handling improvements | expand

Commit Message

Jan Beulich Nov. 18, 2021, 1:13 p.m. UTC
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>

Comments

Paul Durrant Nov. 18, 2021, 6:43 p.m. UTC | #1
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>
diff mbox series

Patch

--- 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 )