i40e: check queue pairs num in config queues handler
authorSergey Nemov <sergey.nemov@intel.com>
Wed, 19 Dec 2018 14:45:40 +0000 (06:45 -0800)
committerJeff Kirsher <jeffrey.t.kirsher@intel.com>
Tue, 22 Jan 2019 15:51:33 +0000 (07:51 -0800)
Check if num_queue_pairs number requested by VF is less than
maximum possible value in VIRTCHNL_OP_CONFIG_VSI_QUEUES handler.

Also check if local_vf_id >= 0 in common handler since it is of
int type and can potentially be negative.

Signed-off-by: Sergey Nemov <sergey.nemov@intel.com>
Tested-by: Andrew Bowers <andrewx.bowers@intel.com>
Signed-off-by: Jeff Kirsher <jeffrey.t.kirsher@intel.com>
drivers/net/ethernet/intel/i40e/i40e_virtchnl_pf.c

index 2ac23ebfbf31b4398aa0a6505fcd5815685a4d3e..f62937045c5d75b37528a32112b316fe8a066cf5 100644 (file)
@@ -2069,6 +2069,11 @@ static int i40e_vc_config_queues_msg(struct i40e_vf *vf, u8 *msg)
                goto error_param;
        }
 
+       if (qci->num_queue_pairs > I40E_MAX_VF_QUEUES) {
+               aq_ret = I40E_ERR_PARAM;
+               goto error_param;
+       }
+
        for (i = 0; i < qci->num_queue_pairs; i++) {
                qpi = &qci->qpair[i];
 
@@ -3656,7 +3661,7 @@ int i40e_vc_process_vf_msg(struct i40e_pf *pf, s16 vf_id, u32 v_opcode,
        int ret;
 
        pf->vf_aq_requests++;
-       if (local_vf_id >= pf->num_alloc_vfs)
+       if (local_vf_id < 0 || local_vf_id >= pf->num_alloc_vfs)
                return -EINVAL;
        vf = &(pf->vf[local_vf_id]);