Explorar o código

IB/core: Fix dereference before check

Sparse complains about dereference before check. Fixing this by
moving the check before the dereference.

Fixes: 200298326b27 ('IB/core: Validate route when we init ah')
Signed-off-by: Matan Barak <matanb@mellanox.com>
Signed-off-by: Doug Ledford <dledford@redhat.com>
Matan Barak %!s(int64=9) %!d(string=hai) anos
pai
achega
9506902b7b
Modificáronse 1 ficheiros con 5 adicións e 4 borrados
  1. 5 4
      drivers/infiniband/core/addr.c

+ 5 - 4
drivers/infiniband/core/addr.c

@@ -497,13 +497,14 @@ int rdma_resolve_ip_route(struct sockaddr *src_addr,
 	struct sockaddr_storage ssrc_addr = {};
 	struct sockaddr_storage ssrc_addr = {};
 	struct sockaddr *src_in = (struct sockaddr *)&ssrc_addr;
 	struct sockaddr *src_in = (struct sockaddr *)&ssrc_addr;
 
 
-	if (src_addr->sa_family != dst_addr->sa_family)
-		return -EINVAL;
+	if (src_addr) {
+		if (src_addr->sa_family != dst_addr->sa_family)
+			return -EINVAL;
 
 
-	if (src_addr)
 		memcpy(src_in, src_addr, rdma_addr_size(src_addr));
 		memcpy(src_in, src_addr, rdma_addr_size(src_addr));
-	else
+	} else {
 		src_in->sa_family = dst_addr->sa_family;
 		src_in->sa_family = dst_addr->sa_family;
+	}
 
 
 	return addr_resolve(src_in, dst_addr, addr, false);
 	return addr_resolve(src_in, dst_addr, addr, false);
 }
 }