net: rds: Fix possible NULL-pointer dereference
authorArtem Chernyshev <artem.chernyshev@red-soft.ru>
Mon, 18 Sep 2023 13:56:23 +0000 (16:56 +0300)
committerDavid S. Miller <davem@davemloft.net>
Wed, 20 Sep 2023 07:49:03 +0000 (08:49 +0100)
In rds_rdma_cm_event_handler_cmn() check, if conn pointer exists
before dereferencing it as rdma_set_service_type() argument

Found by Linux Verification Center (linuxtesting.org) with SVACE.

Fixes: fd261ce6a30e ("rds: rdma: update rdma transport for tos")
Signed-off-by: Artem Chernyshev <artem.chernyshev@red-soft.ru>
Signed-off-by: David S. Miller <davem@davemloft.net>
net/rds/rdma_transport.c

index d36f3f6..b15cf31 100644 (file)
@@ -86,11 +86,13 @@ static int rds_rdma_cm_event_handler_cmn(struct rdma_cm_id *cm_id,
                break;
 
        case RDMA_CM_EVENT_ADDR_RESOLVED:
-               rdma_set_service_type(cm_id, conn->c_tos);
-               rdma_set_min_rnr_timer(cm_id, IB_RNR_TIMER_000_32);
-               /* XXX do we need to clean up if this fails? */
-               ret = rdma_resolve_route(cm_id,
-                                        RDS_RDMA_RESOLVE_TIMEOUT_MS);
+               if (conn) {
+                       rdma_set_service_type(cm_id, conn->c_tos);
+                       rdma_set_min_rnr_timer(cm_id, IB_RNR_TIMER_000_32);
+                       /* XXX do we need to clean up if this fails? */
+                       ret = rdma_resolve_route(cm_id,
+                                                RDS_RDMA_RESOLVE_TIMEOUT_MS);
+               }
                break;
 
        case RDMA_CM_EVENT_ROUTE_RESOLVED: