From: Mr NeilBrown Date: Wed, 9 Jun 2021 00:27:38 +0000 (+1000) Subject: LU-10391 socklnd: large processid for ksocknal_get_peer_info X-Git-Tag: 2.15.51~229 X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=commitdiff_plain;h=e4a49294530a5d5f78b970f562165f598813c3fc LU-10391 socklnd: large processid for ksocknal_get_peer_info Have ksocknal_launch_packet() report a 'struct lnet_processid' with a large address. Test-Parameters: trivial testlist=sanity-lnet Test-Parameters: serverversion=2.12 serverdistro=el7.9 testlist=runtests Test-Parameters: clientversion=2.12 testlist=runtests Signed-off-by: Mr NeilBrown Change-Id: I6dd4b11e0361d893dea519287448028ca0a1ab97 Reviewed-on: https://review.whamcloud.com/44622 Reviewed-by: James Simmons Tested-by: jenkins Tested-by: Maloo Reviewed-by: Chris Horn Reviewed-by: Oleg Drokin --- diff --git a/lnet/klnds/socklnd/socklnd.c b/lnet/klnds/socklnd/socklnd.c index 4d6907e..9005154 100644 --- a/lnet/klnds/socklnd/socklnd.c +++ b/lnet/klnds/socklnd/socklnd.c @@ -291,7 +291,7 @@ ksocknal_unlink_peer_locked(struct ksock_peer_ni *peer_ni) static int ksocknal_get_peer_info(struct lnet_ni *ni, int index, - struct lnet_process_id *id, __u32 *myip, __u32 *peer_ip, + struct lnet_processid *id, __u32 *myip, __u32 *peer_ip, int *port, int *conn_count, int *share_count) { struct ksock_peer_ni *peer_ni; @@ -312,8 +312,7 @@ ksocknal_get_peer_info(struct lnet_ni *ni, int index, if (index-- > 0) continue; - id->pid = peer_ni->ksnp_id.pid; - id->nid = lnet_nid_to_nid4(&peer_ni->ksnp_id.nid); + *id = peer_ni->ksnp_id; *myip = 0; *peer_ip = 0; *port = 0; @@ -327,8 +326,7 @@ ksocknal_get_peer_info(struct lnet_ni *ni, int index, if (index-- > 0) continue; - id->pid = peer_ni->ksnp_id.pid; - id->nid = lnet_nid_to_nid4(&peer_ni->ksnp_id.nid); + *id = peer_ni->ksnp_id; *myip = peer_ni->ksnp_passive_ips[j]; *peer_ip = 0; *port = 0; @@ -344,8 +342,7 @@ ksocknal_get_peer_info(struct lnet_ni *ni, int index, conn_cb = peer_ni->ksnp_conn_cb; - id->pid = peer_ni->ksnp_id.pid; - id->nid = lnet_nid_to_nid4(&peer_ni->ksnp_id.nid); + *id = peer_ni->ksnp_id; if (conn_cb->ksnr_addr.ss_family == AF_INET) { struct sockaddr_in *sa = (void *)&conn_cb->ksnr_addr; @@ -1792,18 +1789,19 @@ ksocknal_ctl(struct lnet_ni *ni, unsigned int cmd, void *arg) int share_count = 0; rc = ksocknal_get_peer_info(ni, data->ioc_count, - &id4, &myip, &ip, &port, + &id, &myip, &ip, &port, &conn_count, &share_count); if (rc != 0) return rc; - - data->ioc_nid = id4.nid; + if (!nid_is_nid4(&id.nid)) + return -EINVAL; + data->ioc_nid = lnet_nid_to_nid4(&id.nid); data->ioc_count = share_count; data->ioc_u32[0] = ip; data->ioc_u32[1] = port; data->ioc_u32[2] = myip; data->ioc_u32[3] = conn_count; - data->ioc_u32[4] = id4.pid; + data->ioc_u32[4] = id.pid; return 0; }