afs: Fix use-after-loss-of-ref
authorDavid Howells <dhowells@redhat.com>
Tue, 14 Jan 2020 16:16:25 +0000 (16:16 +0000)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Fri, 17 Jan 2020 18:48:41 +0000 (19:48 +0100)
commit6f262298328f1d13e7563586b41f1f6dcba5072f
tree03a4607c605e7691dc8f67484faf0229fc52ad98
parent01a107542bc3dca213bd59b20a7e8daa9751fde2
afs: Fix use-after-loss-of-ref

commit 40a708bd622b78582ae3d280de29b09b50bd04c0 upstream.

afs_lookup() has a tracepoint to indicate the outcome of
d_splice_alias(), passing it the inode to retrieve the fid from.
However, the function gave up its ref on that inode when it called
d_splice_alias(), which may have failed and dropped the inode.

Fix this by caching the fid.

Fixes: 80548b03991f ("afs: Add more tracepoints")
Reported-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: David Howells <dhowells@redhat.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
fs/afs/dir.c
include/trace/events/afs.h