NFSD: Fix memory leak in encoding denied lock
Subsystems (2)
PATCH 1/4 NFSD: Fix memory leak in encoding denied lock
Commit 8c7424cff6 (nfsd4: don't try to encode conflicting owner if low on space) forgot free conf->data in nfsd4_encode_lockt and before sign conf->data to NULL in nfsd4_encode_lock_denied.
Signed-off-by Kinglong Mee <[email protected]>
--- fs/nfsd/nfs4xdr.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-)
fs/nfsd/nfs4xdr.c +3 -1
@@ -2884,6 +2884,7 @@ again:* return the conflicting open: */ if (conf->len) { +kfree (conf->data); conf->len =0 ; conf->data =NULL ; goto again;
@@ -2896,6 +2897,7 @@ again:if (conf->len) { p =xdr_encode_opaque_fixed (p, &ld->ld_clientid,8 ); p =xdr_encode_opaque (p, conf->data, conf->len); +kfree (conf->data); }else {/* non - nfsv4 lock in conflict, no clientid nor owner */ p =xdr_encode_hyper (p, (u64 )0 );/* clientid */ *p++ =cpu_to_be32 (0 );/* length of owner name */
@@ -2912,7 +2914,7 @@ nfsd4_encode_lock(struct nfsd4_compoundres *resp, __be32 nfserr, struct nfsd4_lo nfserr =nfsd4_encode_stateid (xdr, &lock->lk_resp_stateid); else if (nfserr == nfserr_denied) nfserr =nfsd4_encode_lock_denied (xdr, &lock->lk_denied); -kfree (lock->lk_denied.ld_owner.data); +return nfserr; }
Signature · 1 line
1.9.3