diff options
author | Chuck Lever <chuck.lever@oracle.com> | 2007-08-21 12:19:13 -0400 |
---|---|---|
committer | Neil Brown <neilb@suse.de> | 2007-08-24 13:15:02 +1000 |
commit | bd8cc33c7c089d5d36151732f4c00a836e7732e6 (patch) | |
tree | 333d5f32a0f1c8e9ceda8bceadec2eb42cc6b592 | |
parent | 29637ac0140db80744b24b0c5d655d435b69ba35 (diff) | |
download | nfs-utils-bd8cc33c7c089d5d36151732f4c00a836e7732e6.tar.gz nfs-utils-bd8cc33c7c089d5d36151732f4c00a836e7732e6.tar.xz nfs-utils-bd8cc33c7c089d5d36151732f4c00a836e7732e6.zip |
mount.nfs: getport() should avoid modifying passed-in arguments
Defensive coding: getport() shouldn't alter the passed-in server address,
but should treat it as read only. Have it operate on a copy.
Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: Neil Brown <neilb@suse.de>
-rw-r--r-- | utils/mount/network.c | 14 |
1 files changed, 9 insertions, 5 deletions
diff --git a/utils/mount/network.c b/utils/mount/network.c index eb59c1f..9f803a4 100644 --- a/utils/mount/network.c +++ b/utils/mount/network.c @@ -303,14 +303,16 @@ static unsigned short getport(struct sockaddr_in *saddr, unsigned long version, unsigned int proto) { + struct sockaddr_in bind_saddr; unsigned short port = 0; int socket; CLIENT *clnt = NULL; enum clnt_stat stat; + + bind_saddr = *saddr; + bind_saddr.sin_port = htons(PMAPPORT); - saddr->sin_port = htons(PMAPPORT); - - socket = get_socket(saddr, proto, PMAP_TIMEOUT, FALSE, FALSE); + socket = get_socket(&bind_saddr, proto, PMAP_TIMEOUT, FALSE, FALSE); if (socket == RPC_ANYSOCK) { if (proto == IPPROTO_TCP && rpc_createerr.cf_error.re_errno == ETIMEDOUT) @@ -320,14 +322,16 @@ static unsigned short getport(struct sockaddr_in *saddr, switch (proto) { case IPPROTO_UDP: - clnt = clntudp_bufcreate(saddr, + clnt = clntudp_bufcreate(&bind_saddr, PMAPPROG, PMAPVERS, RETRY_TIMEOUT, &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE); break; case IPPROTO_TCP: - clnt = clnttcp_create(saddr, PMAPPROG, PMAPVERS, &socket, + clnt = clnttcp_create(&bind_saddr, + PMAPPROG, PMAPVERS, + &socket, RPCSMALLMSGSIZE, RPCSMALLMSGSIZE); break; } |