NFSv4.0 fix client reference leak in callback
Subsystems (2)
PATCH 1/1 NFSv4.0 fix client reference leak in callback
If there is an error during processing of a callback message, it leads to refrence leak on the client structure and eventually an unclean superblock.
Signed-off-by Olga Kornievskaia <[email protected]>
--- fs/nfs/callback_xdr.c | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-)
fs/nfs/callback_xdr.c +8 -3
@@ -883,16 +883,21 @@ static __be32 nfs4_callback_compound(struct svc_rqst *rqstp)if (hdr_arg.minorversion ==0 ) { cps.clp =nfs4_find_client_ident (SVC_NET (rqstp), hdr_arg.cb_ident); -if (!cps.clp || !check_gss_callback_principal (cps.clp, rqstp)) +if (!cps.clp || !check_gss_callback_principal (cps.clp, rqstp)) { +if (cps.clp) +nfs_put_client (cps.clp); goto out_invalidcred; + } } cps.minorversion = hdr_arg.minorversion; hdr_res.taglen = hdr_arg.taglen; hdr_res.tag = hdr_arg.tag; -if (encode_compound_hdr_res (&xdr_out, &hdr_res) !=0 ) +if (encode_compound_hdr_res (&xdr_out, &hdr_res) !=0 ) { +if (cps.clp) +nfs_put_client (cps.clp);return rpc_system_err; - + }while (status ==0 && nops != hdr_arg.nops) { status = process_op(nops, rqstp, &xdr_in, rqstp->rq_argp, &xdr_out, rqstp->rq_resp,
Signature · 1 line
1.8.3.1