Message ID | 20250304110833.95997-7-martyna.szapar-mudlaw@linux.intel.com |
---|---|
State | Accepted |
Delegated to: | Anthony Nguyen |
Headers | show |
Series | ice: fix validation issues in virtchnl parameters | expand |
> -----Original Message----- > From: Intel-wired-lan <intel-wired-lan-bounces@osuosl.org> On Behalf Of > Martyna Szapar-Mudlaw > Sent: Tuesday, March 4, 2025 12:09 PM > To: intel-wired-lan@lists.osuosl.org > Cc: netdev@vger.kernel.org; Czapnik, Lukasz <lukasz.czapnik@intel.com>; > Jagielski, Jedrzej <jedrzej.jagielski@intel.com>; Simon Horman > <horms@kernel.org>; Martyna Szapar-Mudlaw <martyna.szapar- > mudlaw@linux.intel.com> > Subject: [Intel-wired-lan] [iwl-net v3 4/5] ice: fix input validation for virtchnl BW > > From: Lukasz Czapnik <lukasz.czapnik@intel.com> > > Add missing validation of tc and queue id values sent by a VF in > ice_vc_cfg_q_bw(). > Additionally fixed logged value in the warning message, where max_tx_rate was > incorrectly referenced instead of min_tx_rate. > Also correct error handling in this function by properly exiting when invalid > configuration is detected. > > Fixes: 015307754a19 ("ice: Support VF queue rate limit and quanta size > configuration") > Reviewed-by: Jedrzej Jagielski <jedrzej.jagielski@intel.com> > Reviewed-by: Simon Horman <horms@kernel.org> > Signed-off-by: Lukasz Czapnik <lukasz.czapnik@intel.com> > Co-developed-by: Martyna Szapar-Mudlaw <martyna.szapar- > mudlaw@linux.intel.com> > Signed-off-by: Martyna Szapar-Mudlaw <martyna.szapar- > mudlaw@linux.intel.com> > --- > drivers/net/ethernet/intel/ice/ice_virtchnl.c | 24 ++++++++++++++++--- > 1 file changed, 21 insertions(+), 3 deletions(-) > > diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl.c > b/drivers/net/ethernet/intel/ice/ice_virtchnl.c > index adb1bf12542f..824ef849b0ea 100644 > --- a/drivers/net/ethernet/intel/ice/ice_virtchnl.c > +++ b/drivers/net/ethernet/intel/ice/ice_virtchnl.c > @@ -1865,15 +1865,33 @@ static int ice_vc_cfg_q_bw(struct ice_vf *vf, u8 Tested-by: Rafal Romanowski <rafal.romanowski@intel.com>
diff --git a/drivers/net/ethernet/intel/ice/ice_virtchnl.c b/drivers/net/ethernet/intel/ice/ice_virtchnl.c index adb1bf12542f..824ef849b0ea 100644 --- a/drivers/net/ethernet/intel/ice/ice_virtchnl.c +++ b/drivers/net/ethernet/intel/ice/ice_virtchnl.c @@ -1865,15 +1865,33 @@ static int ice_vc_cfg_q_bw(struct ice_vf *vf, u8 *msg) for (i = 0; i < qbw->num_queues; i++) { if (qbw->cfg[i].shaper.peak != 0 && vf->max_tx_rate != 0 && - qbw->cfg[i].shaper.peak > vf->max_tx_rate) + qbw->cfg[i].shaper.peak > vf->max_tx_rate) { dev_warn(ice_pf_to_dev(vf->pf), "The maximum queue %d rate limit configuration may not take effect because the maximum TX rate for VF-%d is %d\n", qbw->cfg[i].queue_id, vf->vf_id, vf->max_tx_rate); + v_ret = VIRTCHNL_STATUS_ERR_PARAM; + goto err; + } if (qbw->cfg[i].shaper.committed != 0 && vf->min_tx_rate != 0 && - qbw->cfg[i].shaper.committed < vf->min_tx_rate) + qbw->cfg[i].shaper.committed < vf->min_tx_rate) { dev_warn(ice_pf_to_dev(vf->pf), "The minimum queue %d rate limit configuration may not take effect because the minimum TX rate for VF-%d is %d\n", qbw->cfg[i].queue_id, vf->vf_id, - vf->max_tx_rate); + vf->min_tx_rate); + v_ret = VIRTCHNL_STATUS_ERR_PARAM; + goto err; + } + if (qbw->cfg[i].queue_id > vf->num_vf_qs) { + dev_warn(ice_pf_to_dev(vf->pf), "VF-%d trying to configure invalid queue_id\n", + vf->vf_id); + v_ret = VIRTCHNL_STATUS_ERR_PARAM; + goto err; + } + if (qbw->cfg[i].tc >= ICE_MAX_TRAFFIC_CLASS) { + dev_warn(ice_pf_to_dev(vf->pf), "VF-%d trying to configure a traffic class higher than allowed\n", + vf->vf_id); + v_ret = VIRTCHNL_STATUS_ERR_PARAM; + goto err; + } } for (i = 0; i < qbw->num_queues; i++) {