RDMA/cma: Remove open coding of overflow checking for private_data_len
authorHåkon Bugge <haakon.bugge@oracle.com>
Tue, 23 Nov 2021 10:06:18 +0000 (11:06 +0100)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Thu, 27 Jan 2022 10:05:23 +0000 (11:05 +0100)
commit 8d0d2b0f41b1b2add8a30dbd816051a964efa497 upstream.

The existing tests are a little hard to comprehend. Use
check_add_overflow() instead.

Fixes: 04ded1672402 ("RDMA/cma: Verify private data length")
Link: https://lore.kernel.org/r/1637661978-18770-1-git-send-email-haakon.bugge@oracle.com
Signed-off-by: Håkon Bugge <haakon.bugge@oracle.com>
Reviewed-by: Leon Romanovsky <leonro@nvidia.com>
Signed-off-by: Jason Gunthorpe <jgg@nvidia.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
drivers/infiniband/core/cma.c

index 88093bbe3da69d8a1f455f33f2d67a52ece0d589..3d419741e8916cfe6b36bd69c0a67870c73ae788 100644 (file)
@@ -4037,8 +4037,7 @@ static int cma_resolve_ib_udp(struct rdma_id_private *id_priv,
 
        memset(&req, 0, sizeof req);
        offset = cma_user_data_offset(id_priv);
-       req.private_data_len = offset + conn_param->private_data_len;
-       if (req.private_data_len < conn_param->private_data_len)
+       if (check_add_overflow(offset, conn_param->private_data_len, &req.private_data_len))
                return -EINVAL;
 
        if (req.private_data_len) {
@@ -4097,8 +4096,7 @@ static int cma_connect_ib(struct rdma_id_private *id_priv,
 
        memset(&req, 0, sizeof req);
        offset = cma_user_data_offset(id_priv);
-       req.private_data_len = offset + conn_param->private_data_len;
-       if (req.private_data_len < conn_param->private_data_len)
+       if (check_add_overflow(offset, conn_param->private_data_len, &req.private_data_len))
                return -EINVAL;
 
        if (req.private_data_len) {