IB/hfi1: Use QPN mask to avoid overflow
authorDennis Dalessandro <dennis.dalessandro@intel.com>
Tue, 30 May 2017 00:19:21 +0000 (17:19 -0700)
committerDoug Ledford <dledford@redhat.com>
Tue, 27 Jun 2017 20:58:12 +0000 (16:58 -0400)
Ensure we can't come up with an array size that is bigger than the array
by applying the QPN mask before the divide in the free_qpn function.

Reviewed-by: Michael J. Ruhl <michael.j.ruhl@intel.com>
Signed-off-by: Dennis Dalessandro <dennis.dalessandro@intel.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
drivers/infiniband/sw/rdmavt/qp.c

index a372afb..2ce0928 100644 (file)
@@ -645,7 +645,7 @@ static void rvt_free_qpn(struct rvt_qpn_table *qpt, u32 qpn)
 {
        struct rvt_qpn_map *map;
 
-       map = qpt->map + qpn / RVT_BITS_PER_PAGE;
+       map = qpt->map + (qpn & RVT_QPN_MASK) / RVT_BITS_PER_PAGE;
        if (map->page)
                clear_bit(qpn & RVT_BITS_PER_PAGE_MASK, map->page);
 }