net/i40e: fix unintended sign extension
authorSlawomir Mrozowicz <slawomirx.mrozowicz@intel.com>
Fri, 20 May 2016 13:03:36 +0000 (15:03 +0200)
committerBruce Richardson <bruce.richardson@intel.com>
Wed, 15 Jun 2016 15:13:55 +0000 (17:13 +0200)
Suspicious implicit sign extension: pf->fdir.match_counter_index
with type unsigned short (16 bits, unsigned) is promoted in
"pf->fdir.match_counter_index << 20" to type int (32 bits, signed),
then sign-extended to type unsigned long (64 bits, unsigned).
If "pf->fdir.match_counter_index << 20" is greater than 0x7FFFFFFF,
the upper bits of the result will all be 1.

To fix the issue explicitly cast pf->fdir.match_counter_index to uint32_t.

Coverity issue: 13315
Fixes: 05999aab4ca6 ("i40e: add or delete flow director")

Signed-off-by: Slawomir Mrozowicz <slawomirx.mrozowicz@intel.com>
Acked-by: Bruce Richardson <bruce.richardson@intel.com>
drivers/net/i40e/i40e_fdir.c

index efbcd18..f65c411 100644 (file)
@@ -1143,7 +1143,8 @@ i40e_fdir_filter_programming(struct i40e_pf *pf,
        fdirdp->dtype_cmd_cntindex |=
                        rte_cpu_to_le_32(I40E_TXD_FLTR_QW1_CNT_ENA_MASK);
        fdirdp->dtype_cmd_cntindex |=
-                       rte_cpu_to_le_32((pf->fdir.match_counter_index <<
+                       rte_cpu_to_le_32(
+                       ((uint32_t)pf->fdir.match_counter_index <<
                        I40E_TXD_FLTR_QW1_CNTINDEX_SHIFT) &
                        I40E_TXD_FLTR_QW1_CNTINDEX_MASK);