diff options
Diffstat (limited to 'fs/inotify_user.c')
| -rw-r--r-- | fs/inotify_user.c | 22 |
1 files changed, 11 insertions, 11 deletions
diff --git a/fs/inotify_user.c b/fs/inotify_user.c index fe79c25d95dc..60249429a253 100644 --- a/fs/inotify_user.c +++ b/fs/inotify_user.c | |||
| @@ -354,20 +354,20 @@ static void inotify_dev_event_dequeue(struct inotify_device *dev) | |||
| 354 | } | 354 | } |
| 355 | 355 | ||
| 356 | /* | 356 | /* |
| 357 | * find_inode - resolve a user-given path to a specific inode and return a nd | 357 | * find_inode - resolve a user-given path to a specific inode |
| 358 | */ | 358 | */ |
| 359 | static int find_inode(const char __user *dirname, struct nameidata *nd, | 359 | static int find_inode(const char __user *dirname, struct path *path, |
| 360 | unsigned flags) | 360 | unsigned flags) |
| 361 | { | 361 | { |
| 362 | int error; | 362 | int error; |
| 363 | 363 | ||
| 364 | error = __user_walk(dirname, flags, nd); | 364 | error = user_path_at(AT_FDCWD, dirname, flags, path); |
| 365 | if (error) | 365 | if (error) |
| 366 | return error; | 366 | return error; |
| 367 | /* you can only watch an inode if you have read permissions on it */ | 367 | /* you can only watch an inode if you have read permissions on it */ |
| 368 | error = vfs_permission(nd, MAY_READ); | 368 | error = inode_permission(path->dentry->d_inode, MAY_READ); |
| 369 | if (error) | 369 | if (error) |
| 370 | path_put(&nd->path); | 370 | path_put(path); |
| 371 | return error; | 371 | return error; |
| 372 | } | 372 | } |
| 373 | 373 | ||
| @@ -650,11 +650,11 @@ asmlinkage long sys_inotify_init(void) | |||
| 650 | return sys_inotify_init1(0); | 650 | return sys_inotify_init1(0); |
| 651 | } | 651 | } |
| 652 | 652 | ||
| 653 | asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask) | 653 | asmlinkage long sys_inotify_add_watch(int fd, const char __user *pathname, u32 mask) |
| 654 | { | 654 | { |
| 655 | struct inode *inode; | 655 | struct inode *inode; |
| 656 | struct inotify_device *dev; | 656 | struct inotify_device *dev; |
| 657 | struct nameidata nd; | 657 | struct path path; |
| 658 | struct file *filp; | 658 | struct file *filp; |
| 659 | int ret, fput_needed; | 659 | int ret, fput_needed; |
| 660 | unsigned flags = 0; | 660 | unsigned flags = 0; |
| @@ -674,12 +674,12 @@ asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask) | |||
| 674 | if (mask & IN_ONLYDIR) | 674 | if (mask & IN_ONLYDIR) |
| 675 | flags |= LOOKUP_DIRECTORY; | 675 | flags |= LOOKUP_DIRECTORY; |
| 676 | 676 | ||
| 677 | ret = find_inode(path, &nd, flags); | 677 | ret = find_inode(pathname, &path, flags); |
| 678 | if (unlikely(ret)) | 678 | if (unlikely(ret)) |
| 679 | goto fput_and_out; | 679 | goto fput_and_out; |
| 680 | 680 | ||
| 681 | /* inode held in place by reference to nd; dev by fget on fd */ | 681 | /* inode held in place by reference to path; dev by fget on fd */ |
| 682 | inode = nd.path.dentry->d_inode; | 682 | inode = path.dentry->d_inode; |
| 683 | dev = filp->private_data; | 683 | dev = filp->private_data; |
| 684 | 684 | ||
| 685 | mutex_lock(&dev->up_mutex); | 685 | mutex_lock(&dev->up_mutex); |
| @@ -688,7 +688,7 @@ asmlinkage long sys_inotify_add_watch(int fd, const char __user *path, u32 mask) | |||
| 688 | ret = create_watch(dev, inode, mask); | 688 | ret = create_watch(dev, inode, mask); |
| 689 | mutex_unlock(&dev->up_mutex); | 689 | mutex_unlock(&dev->up_mutex); |
| 690 | 690 | ||
| 691 | path_put(&nd.path); | 691 | path_put(&path); |
| 692 | fput_and_out: | 692 | fput_and_out: |
| 693 | fput_light(filp, fput_needed); | 693 | fput_light(filp, fput_needed); |
| 694 | return ret; | 694 | return ret; |
