Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'for-3.11' of git://linux-nfs.org/~bfields/linux

Pull nfsd bugfixes from Bruce Fields:
"Most of this is due to a screwup on my part -- some gss-proxy crashes
got fixed before the merge window but somehow never made it out of a
temporary git repo on my laptop...."

* 'for-3.11' of git://linux-nfs.org/~bfields/linux:
svcrpc: set cr_gss_mech from gss-proxy as well as legacy upcall
svcrpc: fix kfree oops in gss-proxy code
svcrpc: fix gss-proxy xdr decoding oops
svcrpc: fix gss_rpc_upcall create error
NFSD/sunrpc: avoid deadlock on TCP connection due to memory pressure.

+10 -8
+1 -2
net/sunrpc/auth_gss/gss_rpc_upcall.c
··· 120 120 if (IS_ERR(clnt)) { 121 121 dprintk("RPC: failed to create AF_LOCAL gssproxy " 122 122 "client (errno %ld).\n", PTR_ERR(clnt)); 123 - result = -PTR_ERR(clnt); 123 + result = PTR_ERR(clnt); 124 124 *_clnt = NULL; 125 125 goto out; 126 126 } ··· 328 328 kfree(data->in_handle.data); 329 329 kfree(data->out_handle.data); 330 330 kfree(data->out_token.data); 331 - kfree(data->mech_oid.data); 332 331 free_svc_cred(&data->creds); 333 332 } 334 333
+5 -4
net/sunrpc/auth_gss/gss_rpc_xdr.c
··· 430 430 static int dummy_dec_nameattr_array(struct xdr_stream *xdr, 431 431 struct gssx_name_attr_array *naa) 432 432 { 433 - struct gssx_name_attr dummy; 433 + struct gssx_name_attr dummy = { .attr = {.len = 0} }; 434 434 u32 count, i; 435 435 __be32 *p; 436 436 ··· 493 493 return err; 494 494 } 495 495 496 + 496 497 static int gssx_dec_name(struct xdr_stream *xdr, 497 498 struct gssx_name *name) 498 499 { 499 - struct xdr_netobj dummy_netobj; 500 - struct gssx_name_attr_array dummy_name_attr_array; 501 - struct gssx_option_array dummy_option_array; 500 + struct xdr_netobj dummy_netobj = { .len = 0 }; 501 + struct gssx_name_attr_array dummy_name_attr_array = { .count = 0 }; 502 + struct gssx_option_array dummy_option_array = { .count = 0 }; 502 503 int err; 503 504 504 505 /* name->display_name */
+1 -1
net/sunrpc/auth_gss/svcauth_gss.c
··· 1180 1180 gm = gss_mech_get_by_OID(&ud->mech_oid); 1181 1181 if (!gm) 1182 1182 goto out; 1183 + rsci.cred.cr_gss_mech = gm; 1183 1184 1184 1185 status = -EINVAL; 1185 1186 /* mech-specific data: */ ··· 1196 1195 rscp = rsc_update(cd, &rsci, rscp); 1197 1196 status = 0; 1198 1197 out: 1199 - gss_mech_put(gm); 1200 1198 rsc_free(&rsci); 1201 1199 if (rscp) 1202 1200 cache_put(&rscp->h, cd);
+3 -1
net/sunrpc/svcsock.c
··· 1193 1193 if (test_bit(XPT_LISTENER, &xprt->xpt_flags)) 1194 1194 return 1; 1195 1195 required = atomic_read(&xprt->xpt_reserved) + serv->sv_max_mesg; 1196 - if (sk_stream_wspace(svsk->sk_sk) >= required) 1196 + if (sk_stream_wspace(svsk->sk_sk) >= required || 1197 + (sk_stream_min_wspace(svsk->sk_sk) == 0 && 1198 + atomic_read(&xprt->xpt_reserved) == 0)) 1197 1199 return 1; 1198 1200 set_bit(SOCK_NOSPACE, &svsk->sk_sock->flags); 1199 1201 return 0;