remarkable-linux/net/sunrpc
Chuck Lever 9247685088 SUNRPC: Properly initialize sock_xprt.srcaddr in all cases
The source address field in the transport's sock_xprt is initialized
ONLY IF the RPC application passed a pointer to a source address
during the call to rpc_create().  However, xs_bind() subsequently uses
the value of this field without regard to whether the source address
was initialized during transport creation or not.

So far we've been lucky: the uninitialized value of this field is
zeroes.  xs_bind(), until recently, used only the sin[6]_addr field in
this sockaddr, and all zeroes is a valid value for this: it means
ANYADDR.  This is a happy coincidence.

However, xs_bind() now wants to use the sa_family field as well, and
expects it to be initialized to something other than zero.

Therefore, the source address sockaddr field should be fully
initialized at transport create time in _every_ case, not just when
the RPC application wants to use a specific bind address.

Bruce added a workaround for this missing initialization by adjusting
commit 6bc9638a, but the "right" way to do this is to ensure that the
source address sockaddr is always correctly initialized from the
get-go.

This patch doesn't introduce a behavior change.  It's simply a
clean-up of Bruce's fix, to prevent future problems of this kind.  It
may look like overkill, but

  a) it clearly documents the default initial value of this field,

  b) it doesn't assume that the sockaddr_storage memory is first
     initialized to any particular value, and

  c) it will fail verbosely if some unknown address family is passed
     in

Originally introduced by commit d3bc9a1d.

Signed-off-by: Chuck Lever <chuck.lever@oracle.com>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
2010-10-21 10:11:47 -04:00
..
auth_gss nfsd4: remove spkm3 2010-10-01 18:09:55 -04:00
xprtrdma sunrpc/xprtrdma: clean up workqueue usage 2010-10-21 10:11:45 -04:00
addr.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
auth.c sunrpc: fix up rpcauth_remove_module section mismatch 2010-09-29 12:27:37 -04:00
auth_generic.c sunrpc: fix up rpcauth_remove_module section mismatch 2010-09-29 12:27:37 -04:00
auth_null.c SUNRPC: Move the bound cred to struct rpc_rqst 2010-08-04 08:54:09 -04:00
auth_unix.c SUNRPC: Move the bound cred to struct rpc_rqst 2010-08-04 08:54:09 -04:00
backchannel_rqst.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
bc_svc.c Merge branch 'master' of master.kernel.org:/pub/scm/linux/kernel/git/davem/net-2.6 2010-04-11 14:53:53 -07:00
cache.c sunrpc/cache: centralise handling of size limit on deferred list. 2010-10-11 19:30:28 -04:00
clnt.c sunrpc: Add net to xprt_create 2010-10-01 17:18:57 -04:00
Kconfig nfsd4: remove spkm3 2010-10-01 18:09:55 -04:00
Makefile
netns.h sunrpc: Make the ip_map_cache be per-net 2010-09-27 10:16:12 -04:00
rpc_pipe.c SUNRPC: Fix a race in rpc_info_open 2010-09-12 19:55:25 -04:00
rpcb_clnt.c sunrpc: Don't return NULL from rpcb_create 2010-10-19 10:48:16 -04:00
sched.c SUNRPC: Reduce asynchronous RPC task stack usage 2010-08-04 08:54:09 -04:00
socklib.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
stats.c sunrpc: Make the /proc/net/rpc appear in net namespaces 2010-09-27 10:16:12 -04:00
sunrpc.h
sunrpc_syms.c sunrpc: Make the ip_map_cache be per-net 2010-09-27 10:16:12 -04:00
svc.c sunrpc: close connection when a request is irretrievably lost. 2010-09-21 16:57:49 -04:00
svc_xprt.c sunrpc: Turn list_for_each-s into the ..._entry-s 2010-10-19 10:48:16 -04:00
svcauth.c net: Move && and || to end of previous line 2009-11-29 16:55:45 -08:00
svcauth_unix.c sunrpc: Use helper to set v4 mapped addr in ip_map_parse 2010-10-11 20:00:17 -04:00
svcsock.c sunrpc: Turn list_for_each-s into the ..._entry-s 2010-10-19 10:48:16 -04:00
sysctl.c sysctl: Drop & in front of every proc_handler. 2009-11-18 08:37:40 -08:00
timer.c
xdr.c xdr: Add an export for the helper function write_bytes_to_xdr_buf() 2010-05-14 15:09:18 -04:00
xprt.c sunrpc: Turn list_for_each-s into the ..._entry-s 2010-10-19 10:48:16 -04:00
xprtsock.c SUNRPC: Properly initialize sock_xprt.srcaddr in all cases 2010-10-21 10:11:47 -04:00