aboutsummaryrefslogtreecommitdiffstats
path: root/fs/coda/pioctl.c
diff options
context:
space:
mode:
authorAl Viro <viro@zeniv.linux.org.uk>2008-07-22 09:59:21 -0400
committerAl Viro <viro@zeniv.linux.org.uk>2008-07-26 20:53:34 -0400
commit2d8f30380ab8c706f4e0a8f1aaa22b5886e9ac8a (patch)
treeb798097fd831eab39f35c8c2e5a8ccfd7a850ef5 /fs/coda/pioctl.c
parent256984a83880ff7ac78055cb87baea48137f0b77 (diff)
[PATCH] sanitize __user_walk_fd() et.al.
* do not pass nameidata; struct path is all the callers want. * switch to new helpers: user_path_at(dfd, pathname, flags, &path) user_path(pathname, &path) user_lpath(pathname, &path) user_path_dir(pathname, &path) (fail if not a directory) The last 3 are trivial macro wrappers for the first one. * remove nameidata in callers. Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/coda/pioctl.c')
-rw-r--r--fs/coda/pioctl.c14
1 files changed, 7 insertions, 7 deletions
diff --git a/fs/coda/pioctl.c b/fs/coda/pioctl.c
index c38a98974fb0..c51365422aa8 100644
--- a/fs/coda/pioctl.c
+++ b/fs/coda/pioctl.c
@@ -49,7 +49,7 @@ static int coda_ioctl_permission(struct inode *inode, int mask)
49static int coda_pioctl(struct inode * inode, struct file * filp, 49static int coda_pioctl(struct inode * inode, struct file * filp,
50 unsigned int cmd, unsigned long user_data) 50 unsigned int cmd, unsigned long user_data)
51{ 51{
52 struct nameidata nd; 52 struct path path;
53 int error; 53 int error;
54 struct PioctlData data; 54 struct PioctlData data;
55 struct inode *target_inode = NULL; 55 struct inode *target_inode = NULL;
@@ -64,21 +64,21 @@ static int coda_pioctl(struct inode * inode, struct file * filp,
64 * Look up the pathname. Note that the pathname is in 64 * Look up the pathname. Note that the pathname is in
65 * user memory, and namei takes care of this 65 * user memory, and namei takes care of this
66 */ 66 */
67 if ( data.follow ) { 67 if (data.follow) {
68 error = user_path_walk(data.path, &nd); 68 error = user_path(data.path, &path);
69 } else { 69 } else {
70 error = user_path_walk_link(data.path, &nd); 70 error = user_lpath(data.path, &path);
71 } 71 }
72 72
73 if ( error ) { 73 if ( error ) {
74 return error; 74 return error;
75 } else { 75 } else {
76 target_inode = nd.path.dentry->d_inode; 76 target_inode = path.dentry->d_inode;
77 } 77 }
78 78
79 /* return if it is not a Coda inode */ 79 /* return if it is not a Coda inode */
80 if ( target_inode->i_sb != inode->i_sb ) { 80 if ( target_inode->i_sb != inode->i_sb ) {
81 path_put(&nd.path); 81 path_put(&path);
82 return -EINVAL; 82 return -EINVAL;
83 } 83 }
84 84
@@ -87,7 +87,7 @@ static int coda_pioctl(struct inode * inode, struct file * filp,
87 87
88 error = venus_pioctl(inode->i_sb, &(cnp->c_fid), cmd, &data); 88 error = venus_pioctl(inode->i_sb, &(cnp->c_fid), cmd, &data);
89 89
90 path_put(&nd.path); 90 path_put(&path);
91 return error; 91 return error;
92} 92}
93 93