|
|
|
[PATCH 1/3] fs: move path_put on failure out of ->follow_link | |
| [Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] | |
Currently the non-nd_set_link based versions of ->follow_link are expected
to do a path_put(&nd->path). This calling convention is unexpected,
undocumented and doesn't match what the nd_set_link-based instance do.
Move the path_put out of the only non-nd_set_link based ->follow_link
instance into the caller.
Signed-off-by: Christoph Hellwig <hch@xxxxxx>
---
fs/namei.c | 3 +--
fs/proc/base.c | 12 ++++++++----
2 files changed, 9 insertions(+), 6 deletions(-)
Index: linux-2.6/fs/namei.c
===================================================================
--- linux-2.6.orig/fs/namei.c 2012-06-18 12:46:47.560143542 +0200
+++ linux-2.6/fs/namei.c 2012-06-18 12:47:02.424143920 +0200
@@ -615,7 +615,7 @@ follow_link(struct path *link, struct na
*p = dentry->d_inode->i_op->follow_link(dentry, nd);
error = PTR_ERR(*p);
if (IS_ERR(*p))
- goto out_put_link;
+ goto out_put_nd_path;
error = 0;
s = nd_get_link(nd);
@@ -640,7 +640,6 @@ follow_link(struct path *link, struct na
out_put_nd_path:
path_put(&nd->path);
-out_put_link:
path_put(link);
return error;
}
Index: linux-2.6/fs/proc/base.c
===================================================================
--- linux-2.6.orig/fs/proc/base.c 2012-06-18 12:46:47.560143542 +0200
+++ linux-2.6/fs/proc/base.c 2012-06-18 12:47:02.424143920 +0200
@@ -1427,16 +1427,20 @@ static int proc_exe_link(struct dentry *
static void *proc_pid_follow_link(struct dentry *dentry, struct nameidata *nd)
{
struct inode *inode = dentry->d_inode;
+ struct path path;
int error = -EACCES;
- /* We don't need a base pointer in the /proc filesystem */
- path_put(&nd->path);
-
/* Are we allowed to snoop on the tasks file descriptors? */
if (!proc_fd_access_allowed(inode))
goto out;
- error = PROC_I(inode)->op.proc_get_link(dentry, &nd->path);
+ error = PROC_I(inode)->op.proc_get_link(dentry, &path);
+ if (error)
+ goto out;
+
+ path_put(&nd->path);
+ nd->path = path;
+ return NULL;
out:
return ERR_PTR(error);
}
--
To unsubscribe from this list: send the line "unsubscribe linux-fsdevel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
[Linux Ext4 Filesystem] [Ecryptfs] [AutoFS] [Kernel Newbies] [Share Photos] [Security] [Netfilter] [Bugtraq] [Photo] [Yosemite] [Yosemite News] [MIPS Linux] [ARM Linux] [Linux Security] [Linux Cachefs] [Reiser Filesystem] [Linux RAID] [Samba] [Video 4 Linux] [Device Mapper] [CEPH Filesystem]
![]() |