Add a missing nfsrv_freesession() call for an unlikely failure case.

Since NFSv4.1 clients normally create a single session which supports
both fore and back channels, it is unlikely that a callback will fail
due to a lack of a back channel.
However, if this failure occurred, the session wasn't being dereferenced
and would never be free'd.
Found by inspection during pNFS server development.

Tested by:	andreas.nagy@frequentis.com
MFC after:	2 months
This commit is contained in:
rmacklem 2018-05-17 21:17:20 +00:00
parent d465f000e8
commit fafcbcec14

View File

@ -4255,9 +4255,10 @@ nfsrv_docallback(struct nfsclient *clp, int procnum,
*/
(void) newnfs_sndlock(&clp->lc_req.nr_lock);
if (clp->lc_req.nr_client == NULL) {
if ((clp->lc_flags & LCL_NFSV41) != 0)
if ((clp->lc_flags & LCL_NFSV41) != 0) {
error = ECONNREFUSED;
else if (nd->nd_procnum == NFSV4PROC_CBNULL)
nfsrv_freesession(sep, NULL);
} else if (nd->nd_procnum == NFSV4PROC_CBNULL)
error = newnfs_connect(NULL, &clp->lc_req, cred,
NULL, 1);
else