net/sfc/base: fix shift by more bits than field width
authorMark Spender <mspender@solarflare.com>
Mon, 10 Jun 2019 07:38:18 +0000 (08:38 +0100)
committerFerruh Yigit <ferruh.yigit@intel.com>
Thu, 20 Jun 2019 21:42:04 +0000 (23:42 +0200)
This was probably an oversight when support for multiple sensor pages
was added.

Despite being undefined behaviour in C, it probably worked on Intel
x32/x64 as on them bit shift operations wrap round.

Fixes: dfb3b1ce15f6 ("net/sfc/base: import monitors access via MCDI")
Cc: stable@dpdk.org
Signed-off-by: Mark Spender <mspender@solarflare.com>
Signed-off-by: Andrew Rybchenko <arybchenko@solarflare.com>
drivers/net/sfc/base/mcdi_mon.c

index b53de0d..d0247dc 100644 (file)
@@ -73,7 +73,8 @@ mcdi_mon_decode_stats(
                        /* This sensor is one of the page boundary bits. */
                }
 
-               if (~(sensor_mask[page]) & (1U << sensor))
+               if (~(sensor_mask[page]) &
+                   (1U << (sensor % (sizeof (sensor_mask[page]) * 8))))
                        continue;
                /* This sensor not in DMA buffer */