Merge tag 'nfsd-4.11' of git://linux-nfs.org/~bfields/linux
Pull nfsd updates from Bruce Fields: "The nfsd update this round is mainly a lot of miscellaneous cleanups and bugfixes. A couple changes could theoretically break working setups on upgrade. I don't expect complaints in practice, but they seem worth calling out just in case: - NFS security labels are now off by default; a new security_label export flag reenables it per export. But, having them on by default is a disaster, as it generally only makes sense if all your clients and servers have similar enough selinux policies. Thanks to Jason Tibbitts for pointing this out. - NFSv4/UDP support is off. It was never really supported, and the spec explicitly forbids it. We only ever left it on out of laziness; thanks to Jeff Layton for finally fixing that" * tag 'nfsd-4.11' of git://linux-nfs.org/~bfields/linux: (34 commits) nfsd: Fix display of the version string nfsd: fix configuration of supported minor versions sunrpc: don't register UDP port with rpcbind when version needs congestion control nfs/nfsd/sunrpc: enforce transport requirements for NFSv4 sunrpc: flag transports as having congestion control sunrpc: turn bitfield flags in svc_version into bools nfsd: remove superfluous KERN_INFO nfsd: special case truncates some more nfsd: minor nfsd_setattr cleanup NFSD: Reserve adequate space for LOCKT operation NFSD: Get response size before operation for all RPCs nfsd/callback: Drop a useless data copy when comparing sessionid nfsd/callback: skip the callback tag nfsd/callback: Cleanup callback cred on shutdown nfsd/idmap: return nfserr_inval for 0-length names SUNRPC/Cache: Always treat the invalid cache as unexpired SUNRPC: Drop all entries from cache_detail when cache_purge() svcrdma: Poll CQs in "workqueue" mode svcrdma: Combine list fields in struct svc_rdma_op_ctxt svcrdma: Remove unused sc_dto_q field ...
This commit is contained in:
@@ -385,7 +385,7 @@ static int svc_uses_rpcbind(struct svc_serv *serv)
|
||||
for (i = 0; i < progp->pg_nvers; i++) {
|
||||
if (progp->pg_vers[i] == NULL)
|
||||
continue;
|
||||
if (progp->pg_vers[i]->vs_hidden == 0)
|
||||
if (!progp->pg_vers[i]->vs_hidden)
|
||||
return 1;
|
||||
}
|
||||
}
|
||||
@@ -976,6 +976,13 @@ int svc_register(const struct svc_serv *serv, struct net *net,
|
||||
if (vers->vs_hidden)
|
||||
continue;
|
||||
|
||||
/*
|
||||
* Don't register a UDP port if we need congestion
|
||||
* control.
|
||||
*/
|
||||
if (vers->vs_need_cong_ctrl && proto == IPPROTO_UDP)
|
||||
continue;
|
||||
|
||||
error = __svc_register(net, progp->pg_name, progp->pg_prog,
|
||||
i, family, proto, port);
|
||||
|
||||
@@ -1169,6 +1176,21 @@ svc_process_common(struct svc_rqst *rqstp, struct kvec *argv, struct kvec *resv)
|
||||
!(versp = progp->pg_vers[vers]))
|
||||
goto err_bad_vers;
|
||||
|
||||
/*
|
||||
* Some protocol versions (namely NFSv4) require some form of
|
||||
* congestion control. (See RFC 7530 section 3.1 paragraph 2)
|
||||
* In other words, UDP is not allowed. We mark those when setting
|
||||
* up the svc_xprt, and verify that here.
|
||||
*
|
||||
* The spec is not very clear about what error should be returned
|
||||
* when someone tries to access a server that is listening on UDP
|
||||
* for lower versions. RPC_PROG_MISMATCH seems to be the closest
|
||||
* fit.
|
||||
*/
|
||||
if (versp->vs_need_cong_ctrl &&
|
||||
!test_bit(XPT_CONG_CTRL, &rqstp->rq_xprt->xpt_flags))
|
||||
goto err_bad_vers;
|
||||
|
||||
procp = versp->vs_proc + proc;
|
||||
if (proc >= versp->vs_nproc || !procp->pc_func)
|
||||
goto err_bad_proc;
|
||||
|
Reference in New Issue
Block a user