diff options
Diffstat (limited to 'net/sunrpc')
| -rw-r--r-- | net/sunrpc/auth_gss/svcauth_gss.c | 12 | ||||
| -rw-r--r-- | net/sunrpc/rpc_pipe.c | 1 | ||||
| -rw-r--r-- | net/sunrpc/xprtsock.c | 15 | 
3 files changed, 19 insertions, 9 deletions
diff --git a/net/sunrpc/auth_gss/svcauth_gss.c b/net/sunrpc/auth_gss/svcauth_gss.c index f7d34e7b6f8..5ead6055089 100644 --- a/net/sunrpc/auth_gss/svcauth_gss.c +++ b/net/sunrpc/auth_gss/svcauth_gss.c @@ -447,17 +447,21 @@ static int rsc_parse(struct cache_detail *cd,  	else {  		int N, i; +		/* +		 * NOTE: we skip uid_valid()/gid_valid() checks here: +		 * instead, * -1 id's are later mapped to the +		 * (export-specific) anonymous id by nfsd_setuser. +		 * +		 * (But supplementary gid's get no such special +		 * treatment so are checked for validity here.) +		 */  		/* uid */  		rsci.cred.cr_uid = make_kuid(&init_user_ns, id); -		if (!uid_valid(rsci.cred.cr_uid)) -			goto out;  		/* gid */  		if (get_int(&mesg, &id))  			goto out;  		rsci.cred.cr_gid = make_kgid(&init_user_ns, id); -		if (!gid_valid(rsci.cred.cr_gid)) -			goto out;  		/* number of additional gid's */  		if (get_int(&mesg, &N)) diff --git a/net/sunrpc/rpc_pipe.c b/net/sunrpc/rpc_pipe.c index a0f48a51e14..a9129f8d707 100644 --- a/net/sunrpc/rpc_pipe.c +++ b/net/sunrpc/rpc_pipe.c @@ -1175,6 +1175,7 @@ static struct file_system_type rpc_pipe_fs_type = {  	.kill_sb	= rpc_kill_sb,  };  MODULE_ALIAS_FS("rpc_pipefs"); +MODULE_ALIAS("rpc_pipefs");  static void  init_once(void *foo) diff --git a/net/sunrpc/xprtsock.c b/net/sunrpc/xprtsock.c index c1d8476b769..3d02130828d 100644 --- a/net/sunrpc/xprtsock.c +++ b/net/sunrpc/xprtsock.c @@ -849,6 +849,14 @@ static void xs_tcp_close(struct rpc_xprt *xprt)  		xs_tcp_shutdown(xprt);  } +static void xs_local_destroy(struct rpc_xprt *xprt) +{ +	xs_close(xprt); +	xs_free_peer_addresses(xprt); +	xprt_free(xprt); +	module_put(THIS_MODULE); +} +  /**   * xs_destroy - prepare to shutdown a transport   * @xprt: doomed transport @@ -862,10 +870,7 @@ static void xs_destroy(struct rpc_xprt *xprt)  	cancel_delayed_work_sync(&transport->connect_worker); -	xs_close(xprt); -	xs_free_peer_addresses(xprt); -	xprt_free(xprt); -	module_put(THIS_MODULE); +	xs_local_destroy(xprt);  }  static inline struct rpc_xprt *xprt_from_sock(struct sock *sk) @@ -2482,7 +2487,7 @@ static struct rpc_xprt_ops xs_local_ops = {  	.send_request		= xs_local_send_request,  	.set_retrans_timeout	= xprt_set_retrans_timeout_def,  	.close			= xs_close, -	.destroy		= xs_destroy, +	.destroy		= xs_local_destroy,  	.print_stats		= xs_local_print_stats,  };  |