]> git.ipfire.org Git - thirdparty/kernel/stable.git/commit
nfsd4: fix leak of inode reference on delegation failure
authorJ. Bruce Fields <bfields@redhat.com>
Thu, 15 Aug 2013 20:55:26 +0000 (16:55 -0400)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 14 Oct 2013 01:14:23 +0000 (18:14 -0700)
commitba3460519e393d0f212403ae3535305f423d84ed
tree63706337bcaa032ab893134d4427fa499f9ae67c
parent90fec8195469fbcf32d668949fb4a25c9442523e
nfsd4: fix leak of inode reference on delegation failure

commit bf7bd3e98be5c74813bee6ad496139fb0a011b3b upstream.

This fixes a regression from 68a3396178e6688ad7367202cdf0af8ed03c8727
"nfsd4: shut down more of delegation earlier".

After that commit, nfs4_set_delegation() failures result in
nfs4_put_delegation being called, but nfs4_put_delegation doesn't free
the nfs4_file that has already been set by alloc_init_deleg().

This can result in an oops on later unmounting the exported filesystem.

Note also delaying the fi_had_conflict check we're able to return a
better error (hence give 4.1 clients a better idea why the delegation
failed; though note CONFLICT isn't an exact match here, as that's
supposed to indicate a current conflict, but all we know here is that
there was one recently).

Reported-by: Toralf Förster <toralf.foerster@gmx.de>
Tested-by: Toralf Förster <toralf.foerster@gmx.de>
Signed-off-by: J. Bruce Fields <bfields@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/nfsd/nfs4state.c