RDMA/rtrs: Fix a couple off by one bugs in rtrs_srv_rdma_done()
authorDan Carpenter <dan.carpenter@oracle.com>
Tue, 19 May 2020 15:45:25 +0000 (18:45 +0300)
committerJason Gunthorpe <jgg@mellanox.com>
Tue, 19 May 2020 23:40:21 +0000 (20:40 -0300)
These > comparisons should be >= to prevent accessing one element beyond
the end of the buffer.

Fixes: 9cb837480424 ("RDMA/rtrs: server: main functionality")
Link: https://lore.kernel.org/r/20200519154525.GA66801@mwanda
Signed-off-by: Dan Carpenter <dan.carpenter@oracle.com>
Acked-by: Danil Kipnis <danil.kipnis@cloud.ionos.com>
Signed-off-by: Jason Gunthorpe <jgg@mellanox.com>
drivers/infiniband/ulp/rtrs/rtrs-srv.c

index eefd149..863b394 100644 (file)
@@ -1213,8 +1213,8 @@ static void rtrs_srv_rdma_done(struct ib_cq *cq, struct ib_wc *wc)
 
                        msg_id = imm_payload >> sess->mem_bits;
                        off = imm_payload & ((1 << sess->mem_bits) - 1);
-                       if (unlikely(msg_id > srv->queue_depth ||
-                                    off > max_chunk_size)) {
+                       if (unlikely(msg_id >= srv->queue_depth ||
+                                    off >= max_chunk_size)) {
                                rtrs_err(s, "Wrong msg_id %u, off %u\n",
                                          msg_id, off);
                                close_sess(sess);