Skip to content

Commit b6c71c6

Browse files
committed
NFSD: Fix potential use-after-free in nfsd_file_put()
nfsd_file_put_noref() can free @nf, so don't dereference @nf immediately upon return from nfsd_file_put_noref(). Suggested-by: Trond Myklebust <[email protected]> Fixes: 9993979 ("nfsd: Clean up nfsd_file_put()") Signed-off-by: Chuck Lever <[email protected]>
1 parent 9ff9f77 commit b6c71c6

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

fs/nfsd/filecache.c

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -308,11 +308,12 @@ nfsd_file_put(struct nfsd_file *nf)
308308
if (test_bit(NFSD_FILE_HASHED, &nf->nf_flags) == 0) {
309309
nfsd_file_flush(nf);
310310
nfsd_file_put_noref(nf);
311-
} else {
311+
} else if (nf->nf_file) {
312312
nfsd_file_put_noref(nf);
313-
if (nf->nf_file)
314-
nfsd_file_schedule_laundrette();
315-
}
313+
nfsd_file_schedule_laundrette();
314+
} else
315+
nfsd_file_put_noref(nf);
316+
316317
if (atomic_long_read(&nfsd_filecache_count) >= NFSD_FILE_LRU_LIMIT)
317318
nfsd_file_gc();
318319
}

0 commit comments

Comments
 (0)