Gitweb:     
http://git.kernel.org/git/?p=linux/kernel/git/torvalds/linux-2.6.git;a=commit;h=9f6ad26d2abfd9a2ec4a34b934ca75c4239ab8cf
Commit:     9f6ad26d2abfd9a2ec4a34b934ca75c4239ab8cf
Parent:     510deb0d7035d4fd465627deb3a119ca854f9e00
Author:     Chuck Lever <[EMAIL PROTECTED]>
AuthorDate: Mon Dec 10 14:56:31 2007 -0500
Committer:  Trond Myklebust <[EMAIL PROTECTED]>
CommitDate: Wed Jan 30 02:05:50 2008 -0500

    SUNRPC: Fix socket address handling in rpcb_clnt
    
    Make sure rpcb_clnt passes the correct address length to rpc_create().
    
    Signed-off-by: Chuck Lever <[EMAIL PROTECTED]>
    Signed-off-by: Trond Myklebust <[EMAIL PROTECTED]>
---
 net/sunrpc/rpcb_clnt.c |   20 ++++++++++++--------
 1 files changed, 12 insertions(+), 8 deletions(-)

diff --git a/net/sunrpc/rpcb_clnt.c b/net/sunrpc/rpcb_clnt.c
index f876e37..c1310f7 100644
--- a/net/sunrpc/rpcb_clnt.c
+++ b/net/sunrpc/rpcb_clnt.c
@@ -148,12 +148,13 @@ static void rpcb_wake_rpcbind_waiters(struct rpc_xprt 
*xprt, int status)
 }
 
 static struct rpc_clnt *rpcb_create(char *hostname, struct sockaddr *srvaddr,
-                                       int proto, int version, int privileged)
+                                   size_t salen, int proto, int version,
+                                   int privileged)
 {
        struct rpc_create_args args = {
                .protocol       = proto,
                .address        = srvaddr,
-               .addrsize       = sizeof(struct sockaddr_in),
+               .addrsize       = salen,
                .servername     = hostname,
                .program        = &rpcb_program,
                .version        = version,
@@ -216,7 +217,7 @@ int rpcb_register(u32 prog, u32 vers, int prot, unsigned 
short port, int *okay)
                        prog, vers, prot, port);
 
        rpcb_clnt = rpcb_create("localhost", (struct sockaddr *) &sin,
-                                       XPRT_TRANSPORT_UDP, 2, 1);
+                               sizeof(sin), XPRT_TRANSPORT_UDP, 2, 1);
        if (IS_ERR(rpcb_clnt))
                return PTR_ERR(rpcb_clnt);
 
@@ -265,7 +266,8 @@ int rpcb_getport_sync(struct sockaddr_in *sin, __u32 prog,
                __FUNCTION__, NIPQUAD(sin->sin_addr.s_addr), prog, vers, prot);
 
        sprintf(hostname, NIPQUAD_FMT, NIPQUAD(sin->sin_addr.s_addr));
-       rpcb_clnt = rpcb_create(hostname, (struct sockaddr *)sin, prot, 2, 0);
+       rpcb_clnt = rpcb_create(hostname, (struct sockaddr *)sin,
+                               sizeof(sin), prot, 2, 0);
        if (IS_ERR(rpcb_clnt))
                return PTR_ERR(rpcb_clnt);
 
@@ -314,7 +316,9 @@ void rpcb_getport_async(struct rpc_task *task)
        struct rpc_clnt *rpcb_clnt;
        static struct rpcbind_args *map;
        struct rpc_task *child;
-       struct sockaddr addr;
+       struct sockaddr_storage addr;
+       struct sockaddr *sap = (struct sockaddr *)&addr;
+       size_t salen;
        int status;
        struct rpcb_info *info;
 
@@ -344,10 +348,10 @@ void rpcb_getport_async(struct rpc_task *task)
                goto bailout_nofree;
        }
 
-       rpc_peeraddr(clnt, (void *)&addr, sizeof(addr));
+       salen = rpc_peeraddr(clnt, sap, sizeof(addr));
 
        /* Don't ever use rpcbind v2 for AF_INET6 requests */
-       switch (addr.sa_family) {
+       switch (sap->sa_family) {
        case AF_INET:
                info = rpcb_next_version;
                break;
@@ -372,7 +376,7 @@ void rpcb_getport_async(struct rpc_task *task)
        dprintk("RPC: %5u %s: trying rpcbind version %u\n",
                task->tk_pid, __FUNCTION__, bind_version);
 
-       rpcb_clnt = rpcb_create(clnt->cl_server, &addr, xprt->prot,
+       rpcb_clnt = rpcb_create(clnt->cl_server, sap, salen, xprt->prot,
                                bind_version, 0);
        if (IS_ERR(rpcb_clnt)) {
                status = PTR_ERR(rpcb_clnt);
-
To unsubscribe from this list: send the line "unsubscribe git-commits-head" in
the body of a message to [EMAIL PROTECTED]
More majordomo info at  http://vger.kernel.org/majordomo-info.html

Reply via email to