summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorChuck Lever <chuck.lever@oracle.com>2007-08-21 12:19:13 -0400
committerNeil Brown <neilb@suse.de>2007-08-24 13:15:02 +1000
commitbd8cc33c7c089d5d36151732f4c00a836e7732e6 (patch)
tree333d5f32a0f1c8e9ceda8bceadec2eb42cc6b592
parent29637ac0140db80744b24b0c5d655d435b69ba35 (diff)
downloadnfs-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.c14
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;
}