diff options
author | Al Viro <viro@zeniv.linux.org.uk> | 2008-07-22 09:59:21 -0400 |
---|---|---|
committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-07-26 20:53:34 -0400 |
commit | 2d8f30380ab8c706f4e0a8f1aaa22b5886e9ac8a (patch) | |
tree | b798097fd831eab39f35c8c2e5a8ccfd7a850ef5 /fs/coda/pioctl.c | |
parent | 256984a83880ff7ac78055cb87baea48137f0b77 (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.c | 14 |
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) | |||
49 | static int coda_pioctl(struct inode * inode, struct file * filp, | 49 | static 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 | ||