Skip to content
Snippets Groups Projects
Commit c5685cc9 authored by Arshad Hussain's avatar Arshad Hussain Committed by Oleg Drokin
Browse files

LU-17000 lnet: Fix dereference after NULL under ksocknal_recv_hello


This patch fixes 'conn->ksnc_proto' which was
dereferenced under function ksocknal_recv_hello()
even though it could be NULL.

This patch also removes 'returns' in between
the function and replaces it with 'goto'.
Allowing exit from a single place.

CoverityID: 410244 ("Dereference after null check")
Test-Parameters: trivial testlist=sanity-lnet
Signed-off-by: default avatarArshad Hussain <arshad.hussain@aeoncomputing.com>
Fixes: cb5f92c0 (LU-10391 ksocklnd: use ksocknal_protocol v4 for IPv6)
Change-Id: I95196d481b537281ab8643f1ee6162db450bef20
Reviewed-on: https://review.whamcloud.com/c/fs/lustre-release/+/53305


Tested-by: default avatarjenkins <devops@whamcloud.com>
Tested-by: default avatarMaloo <maloo@whamcloud.com>
Reviewed-by: default avatarJames Simmons <jsimmons@infradead.org>
Reviewed-by: default avatarChris Horn <chris.horn@hpe.com>
Reviewed-by: default avatarFrank Sehr <fsehr@whamcloud.com>
Reviewed-by: default avatarOleg Drokin <green@whamcloud.com>
parent f76d6ecc
No related branches found
No related tags found
No related merge requests found
......@@ -1794,7 +1794,7 @@ ksocknal_recv_hello(struct lnet_ni *ni, struct ksock_conn *conn,
CERROR("Error %d reading HELLO from %pISc\n",
rc, &conn->ksnc_peeraddr);
LASSERT(rc < 0);
return rc;
goto out_fatal;
}
if (hello->kshm_magic != LNET_PROTO_MAGIC &&
......@@ -1804,7 +1804,7 @@ ksocknal_recv_hello(struct lnet_ni *ni, struct ksock_conn *conn,
CERROR("Bad magic(1) %#08x (%#08x expected) from %pISc\n",
__cpu_to_le32 (hello->kshm_magic),
LNET_PROTO_TCP_MAGIC, &conn->ksnc_peeraddr);
return -EPROTO;
goto out_unknown;
}
rc = lnet_sock_read(sock, &hello->kshm_version,
......@@ -1813,7 +1813,7 @@ ksocknal_recv_hello(struct lnet_ni *ni, struct ksock_conn *conn,
CERROR("Error %d reading HELLO from %pISc\n",
rc, &conn->ksnc_peeraddr);
LASSERT(rc < 0);
return rc;
goto out_fatal;
}
proto = ksocknal_parse_proto_version(hello);
......@@ -1834,18 +1834,22 @@ ksocknal_recv_hello(struct lnet_ni *ni, struct ksock_conn *conn,
else if (*ksocknal_tunables.ksnd_protocol == 1)
conn->ksnc_proto = &ksocknal_protocol_v1x;
#endif
if (!conn->ksnc_proto)
goto unknown;
if (!conn->ksnc_proto) {
CERROR("Unknown protocol.Error reading HELLO from %pISc\n",
&conn->ksnc_peeraddr);
goto out_unknown;
}
hello->kshm_nips = 0;
ksocknal_send_hello(ni, conn, &ni->ni_nid,
hello);
}
unknown:
CERROR("Unknown protocol version (%d.x expected) from %pISc\n",
conn->ksnc_proto->pro_version, &conn->ksnc_peeraddr);
return -EPROTO;
out_unknown:
rc = -EPROTO;
out_fatal:
return rc;
}
proto_match = (conn->ksnc_proto == proto);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment