From: Avinash Dayanand The condition 'tc < adapter->num_tc' only gates the destination-port check for in-range TCs; when tc is out of range (tc >= num_tc) the if body is skipped entirely and the function falls through to VIRTCHNL_ACTION_TC_REDIRECT and returns 0, silently steering traffic to a non-existent traffic class instead of rejecting the request. Simply flipping the comparison to 'tc > adapter->num_tc' does not fix this: it would let every in-range, non-zero tc (tc <= num_tc) skip the destination-port requirement entirely, while an out-of-range tc with a destination port set would still fall through and return 0. Fix this by explicitly rejecting tc >= adapter->num_tc with -EINVAL, and only then requiring a destination port for the remaining in-range, non-zero TCs. Fixes: 0075fa0fadd0 ("i40evf: Add support to apply cloud filters") Cc: stable@vger.kernel.org Signed-off-by: Avinash Dayanand Signed-off-by: Aleksandr Loktionov --- drivers/net/ethernet/intel/iavf/iavf_main.c | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/drivers/net/ethernet/intel/iavf/iavf_main.c b/drivers/net/ethernet/intel/iavf/iavf_main.c index 29b8403..deb03f2 100644 --- a/drivers/net/ethernet/intel/iavf/iavf_main.c +++ b/drivers/net/ethernet/intel/iavf/iavf_main.c @@ -4047,12 +4047,15 @@ static int iavf_handle_tclass(struct iavf_adapter *adapter, u32 tc, { if (tc == 0) return 0; - if (tc < adapter->num_tc) { - if (!filter->f.data.tcp_spec.dst_port) { - dev_err(&adapter->pdev->dev, - "Specify destination port to redirect to traffic class other than TC0\n"); - return -EINVAL; - } + if (tc >= adapter->num_tc) { + dev_err(&adapter->pdev->dev, + "Unable to add filter because of invalid destination traffic class\n"); + return -EINVAL; + } + if (!filter->f.data.tcp_spec.dst_port) { + dev_err(&adapter->pdev->dev, + "Specify destination port to redirect to traffic class other than TC0\n"); + return -EINVAL; } /* redirect to a traffic class on the same device */ filter->f.action = VIRTCHNL_ACTION_TC_REDIRECT; -- 2.52.0