Message ID | 20210605122059.25105-1-colin.king@canonical.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Jason Gunthorpe |
Headers | show |
Series | [next] RDMA/irdma: Fix issues with u8 left shift operation | expand |
> Subject: [PATCH][next] RDMA/irdma: Fix issues with u8 left shift operation > > From: Colin Ian King <colin.king@canonical.com> > > The shifting of the u8 integer info->map[i] the left will be promoted to a 32 bit > signed int and then sign-extended to a u64. In the event that the top bit of the u8 is > set then all then all the upper 32 bits of the u64 end up as also being set because > of the sign-extension. > Fix this by casting the u8 values to a u64 before the left shift. This > > Addresses-Coverity: ("Unitentional integer overflow / bad shift operation") > Fixes: 3f49d6842569 ("RDMA/irdma: Implement HW Admin Queue OPs") > Signed-off-by: Colin Ian King <colin.king@canonical.com> > --- > drivers/infiniband/hw/irdma/ctrl.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/infiniband/hw/irdma/ctrl.c b/drivers/infiniband/hw/irdma/ctrl.c > index 5aa112067bce..8bd3aecadaf6 100644 > --- a/drivers/infiniband/hw/irdma/ctrl.c > +++ b/drivers/infiniband/hw/irdma/ctrl.c > @@ -2157,7 +2157,7 @@ static enum irdma_status_code > irdma_sc_set_up_map(struct irdma_sc_cqp *cqp, > return IRDMA_ERR_RING_FULL; > > for (i = 0; i < IRDMA_MAX_USER_PRIORITY; i++) > - temp |= info->map[i] << (i * 8); > + temp |= (u64)info->map[i] << (i * 8); > Acked-by: Shiraz Saleem <shiraz.saleem@intel.com>
On Sat, Jun 05, 2021 at 01:20:59PM +0100, Colin King wrote: > From: Colin Ian King <colin.king@canonical.com> > > The shifting of the u8 integer info->map[i] the left will be promoted > to a 32 bit signed int and then sign-extended to a u64. In the event > that the top bit of the u8 is set then all then all the upper 32 bits > of the u64 end up as also being set because of the sign-extension. > Fix this by casting the u8 values to a u64 before the left shift. This > > Addresses-Coverity: ("Unitentional integer overflow / bad shift operation") > Fixes: 3f49d6842569 ("RDMA/irdma: Implement HW Admin Queue OPs") > Signed-off-by: Colin Ian King <colin.king@canonical.com> > Acked-by: Shiraz Saleem <shiraz.saleem@intel.com> > --- > drivers/infiniband/hw/irdma/ctrl.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) Applied to for-next, thanks Jason
diff --git a/drivers/infiniband/hw/irdma/ctrl.c b/drivers/infiniband/hw/irdma/ctrl.c index 5aa112067bce..8bd3aecadaf6 100644 --- a/drivers/infiniband/hw/irdma/ctrl.c +++ b/drivers/infiniband/hw/irdma/ctrl.c @@ -2157,7 +2157,7 @@ static enum irdma_status_code irdma_sc_set_up_map(struct irdma_sc_cqp *cqp, return IRDMA_ERR_RING_FULL; for (i = 0; i < IRDMA_MAX_USER_PRIORITY; i++) - temp |= info->map[i] << (i * 8); + temp |= (u64)info->map[i] << (i * 8); set_64bit_val(wqe, 0, temp); set_64bit_val(wqe, 40,