]> www.infradead.org Git - users/dwmw2/linux.git/commitdiff
rpc_pipefs: fix double-dput()
authorAl Viro <viro@zeniv.linux.org.uk>
Tue, 3 Apr 2018 05:15:46 +0000 (01:15 -0400)
committerSasha Levin <alexander.levin@microsoft.com>
Wed, 23 May 2018 01:36:35 +0000 (21:36 -0400)
[ Upstream commit 4a3877c4cedd95543f8726b0a98743ed8db0c0fb ]

if we ever hit rpc_gssd_dummy_depopulate() dentry passed to
it has refcount equal to 1.  __rpc_rmpipe() drops it and
dput() done after that hits an already freed dentry.

Cc: stable@kernel.org
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Signed-off-by: Sasha Levin <alexander.levin@microsoft.com>
net/sunrpc/rpc_pipe.c

index d81186d34558c8c206c65bc5d05f36977734aafd..9103dd15511ccfb488c740ca29a21a4aa395a785 100644 (file)
@@ -1375,6 +1375,7 @@ rpc_gssd_dummy_depopulate(struct dentry *pipe_dentry)
        struct dentry *clnt_dir = pipe_dentry->d_parent;
        struct dentry *gssd_dir = clnt_dir->d_parent;
 
+       dget(pipe_dentry);
        __rpc_rmpipe(d_inode(clnt_dir), pipe_dentry);
        __rpc_depopulate(clnt_dir, gssd_dummy_info_file, 0, 1);
        __rpc_depopulate(gssd_dir, gssd_dummy_clnt_dir, 0, 1);