diff options
| author | Dave Hansen <haveblue@us.ibm.com> | 2008-02-15 17:37:46 -0500 |
|---|---|---|
| committer | Al Viro <viro@zeniv.linux.org.uk> | 2008-04-19 00:29:24 -0400 |
| commit | 42a74f206b914db13ee1f5ae932dcd91a77c8579 (patch) | |
| tree | 24e3dbe55edaacc750067ab9e01778255a6bff08 /fs/ocfs2 | |
| parent | 20ddee2c75339cc095f6191c3115f81da8955e96 (diff) | |
[PATCH] r/o bind mounts: elevate write count for ioctls()
Some ioctl()s can cause writes to the filesystem. Take these, and make them
use mnt_want/drop_write() instead.
[AV: updated]
Acked-by: Al Viro <viro@ZenIV.linux.org.uk>
Signed-off-by: Christoph Hellwig <hch@lst.de>
Signed-off-by: Dave Hansen <haveblue@us.ibm.com>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Al Viro <viro@zeniv.linux.org.uk>
Diffstat (limited to 'fs/ocfs2')
| -rw-r--r-- | fs/ocfs2/ioctl.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/fs/ocfs2/ioctl.c b/fs/ocfs2/ioctl.c index b413166dd163..7b142f0ce995 100644 --- a/fs/ocfs2/ioctl.c +++ b/fs/ocfs2/ioctl.c | |||
| @@ -60,10 +60,6 @@ static int ocfs2_set_inode_attr(struct inode *inode, unsigned flags, | |||
| 60 | goto bail; | 60 | goto bail; |
| 61 | } | 61 | } |
| 62 | 62 | ||
| 63 | status = -EROFS; | ||
| 64 | if (IS_RDONLY(inode)) | ||
| 65 | goto bail_unlock; | ||
| 66 | |||
| 67 | status = -EACCES; | 63 | status = -EACCES; |
| 68 | if (!is_owner_or_cap(inode)) | 64 | if (!is_owner_or_cap(inode)) |
| 69 | goto bail_unlock; | 65 | goto bail_unlock; |
| @@ -134,8 +130,13 @@ long ocfs2_ioctl(struct file *filp, unsigned int cmd, unsigned long arg) | |||
| 134 | if (get_user(flags, (int __user *) arg)) | 130 | if (get_user(flags, (int __user *) arg)) |
| 135 | return -EFAULT; | 131 | return -EFAULT; |
| 136 | 132 | ||
| 137 | return ocfs2_set_inode_attr(inode, flags, | 133 | status = mnt_want_write(filp->f_path.mnt); |
| 134 | if (status) | ||
| 135 | return status; | ||
| 136 | status = ocfs2_set_inode_attr(inode, flags, | ||
| 138 | OCFS2_FL_MODIFIABLE); | 137 | OCFS2_FL_MODIFIABLE); |
| 138 | mnt_drop_write(filp->f_path.mnt); | ||
| 139 | return status; | ||
| 139 | case OCFS2_IOC_RESVSP: | 140 | case OCFS2_IOC_RESVSP: |
| 140 | case OCFS2_IOC_RESVSP64: | 141 | case OCFS2_IOC_RESVSP64: |
| 141 | case OCFS2_IOC_UNRESVSP: | 142 | case OCFS2_IOC_UNRESVSP: |
