summaryrefslogtreecommitdiffstats
path: root/fs/cifs
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2020-03-12 18:25:20 -0400
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2020-03-18 07:14:21 +0100
commita8ab0b70979059773f34171c8f05f340f60d47d9 (patch)
tree91bf1dbb00b9d2c7d1ed5868d6afc7aa277674bc /fs/cifs
parenta89327c1f7708173beb037386cea0b77357ed52c (diff)
downloadlinux-stable-a8ab0b70979059773f34171c8f05f340f60d47d9.tar.gz
linux-stable-a8ab0b70979059773f34171c8f05f340f60d47d9.tar.bz2
linux-stable-a8ab0b70979059773f34171c8f05f340f60d47d9.zip
cifs_atomic_open(): fix double-put on late allocation failure
commit d9a9f4849fe0c9d560851ab22a85a666cddfdd24 upstream. several iterations of ->atomic_open() calling conventions ago, we used to need fput() if ->atomic_open() failed at some point after successful finish_open(). Now (since 2016) it's not needed - struct file carries enough state to make fput() work regardless of the point in struct file lifecycle and discarding it on failure exits in open() got unified. Unfortunately, I'd missed the fact that we had an instance of ->atomic_open() (cifs one) that used to need that fput(), as well as the stale comment in finish_open() demanding such late failure handling. Trivially fixed... Fixes: fe9ec8291fca "do_last(): take fput() on error after opening to out:" Cc: stable@kernel.org # v4.7+ Signed-off-by: Al Viro <viro@zeniv.linux.org.uk> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'fs/cifs')
-rw-r--r--fs/cifs/dir.c1
1 files changed, 0 insertions, 1 deletions
diff --git a/fs/cifs/dir.c b/fs/cifs/dir.c
index 2fb6fa51fd3c..f6e3c0089825 100644
--- a/fs/cifs/dir.c
+++ b/fs/cifs/dir.c
@@ -561,7 +561,6 @@ cifs_atomic_open(struct inode *inode, struct dentry *direntry,
if (server->ops->close)
server->ops->close(xid, tcon, &fid);
cifs_del_pending_open(&open);
- fput(file);
rc = -ENOMEM;
}