diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-02-07 19:27:53 -0500 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-09-21 06:13:32 -0400 |
commit | 0e1a43c71612cd0b6b50da03040c85fbf3d24211 (patch) | |
tree | 3287a4782caa59dbcb6e922835d056724759b9ff /fs/hpfs/inode.c | |
parent | 2f2f43d3c7b1da8dba56716dd1be196b6f57bf9b (diff) |
userns: Convert hpfs to use kuid and kgid where appropriate
Cc: Mikulas Patocka <mikulas@artax.karlin.mff.cuni.cz>
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
Diffstat (limited to 'fs/hpfs/inode.c')
-rw-r--r-- | fs/hpfs/inode.c | 19 |
1 files changed, 11 insertions, 8 deletions
diff --git a/fs/hpfs/inode.c b/fs/hpfs/inode.c index ed671e0ea784..804a9a842cbc 100644 --- a/fs/hpfs/inode.c +++ b/fs/hpfs/inode.c | |||
@@ -7,6 +7,7 @@ | |||
7 | */ | 7 | */ |
8 | 8 | ||
9 | #include <linux/slab.h> | 9 | #include <linux/slab.h> |
10 | #include <linux/user_namespace.h> | ||
10 | #include "hpfs_fn.h" | 11 | #include "hpfs_fn.h" |
11 | 12 | ||
12 | void hpfs_init_inode(struct inode *i) | 13 | void hpfs_init_inode(struct inode *i) |
@@ -60,14 +61,14 @@ void hpfs_read_inode(struct inode *i) | |||
60 | if (hpfs_sb(i->i_sb)->sb_eas) { | 61 | if (hpfs_sb(i->i_sb)->sb_eas) { |
61 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "UID", &ea_size))) { | 62 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "UID", &ea_size))) { |
62 | if (ea_size == 2) { | 63 | if (ea_size == 2) { |
63 | i->i_uid = le16_to_cpu(*(__le16*)ea); | 64 | i_uid_write(i, le16_to_cpu(*(__le16*)ea)); |
64 | hpfs_inode->i_ea_uid = 1; | 65 | hpfs_inode->i_ea_uid = 1; |
65 | } | 66 | } |
66 | kfree(ea); | 67 | kfree(ea); |
67 | } | 68 | } |
68 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "GID", &ea_size))) { | 69 | if ((ea = hpfs_get_ea(i->i_sb, fnode, "GID", &ea_size))) { |
69 | if (ea_size == 2) { | 70 | if (ea_size == 2) { |
70 | i->i_gid = le16_to_cpu(*(__le16*)ea); | 71 | i_gid_write(i, le16_to_cpu(*(__le16*)ea)); |
71 | hpfs_inode->i_ea_gid = 1; | 72 | hpfs_inode->i_ea_gid = 1; |
72 | } | 73 | } |
73 | kfree(ea); | 74 | kfree(ea); |
@@ -149,13 +150,13 @@ static void hpfs_write_inode_ea(struct inode *i, struct fnode *fnode) | |||
149 | hpfs_error(i->i_sb, "fnode %08x has some unknown HPFS386 stuctures", i->i_ino); | 150 | hpfs_error(i->i_sb, "fnode %08x has some unknown HPFS386 stuctures", i->i_ino); |
150 | } else*/ if (hpfs_sb(i->i_sb)->sb_eas >= 2) { | 151 | } else*/ if (hpfs_sb(i->i_sb)->sb_eas >= 2) { |
151 | __le32 ea; | 152 | __le32 ea; |
152 | if ((i->i_uid != hpfs_sb(i->i_sb)->sb_uid) || hpfs_inode->i_ea_uid) { | 153 | if (!uid_eq(i->i_uid, hpfs_sb(i->i_sb)->sb_uid) || hpfs_inode->i_ea_uid) { |
153 | ea = cpu_to_le32(i->i_uid); | 154 | ea = cpu_to_le32(i_uid_read(i)); |
154 | hpfs_set_ea(i, fnode, "UID", (char*)&ea, 2); | 155 | hpfs_set_ea(i, fnode, "UID", (char*)&ea, 2); |
155 | hpfs_inode->i_ea_uid = 1; | 156 | hpfs_inode->i_ea_uid = 1; |
156 | } | 157 | } |
157 | if ((i->i_gid != hpfs_sb(i->i_sb)->sb_gid) || hpfs_inode->i_ea_gid) { | 158 | if (!gid_eq(i->i_gid, hpfs_sb(i->i_sb)->sb_gid) || hpfs_inode->i_ea_gid) { |
158 | ea = cpu_to_le32(i->i_gid); | 159 | ea = cpu_to_le32(i_gid_read(i)); |
159 | hpfs_set_ea(i, fnode, "GID", (char *)&ea, 2); | 160 | hpfs_set_ea(i, fnode, "GID", (char *)&ea, 2); |
160 | hpfs_inode->i_ea_gid = 1; | 161 | hpfs_inode->i_ea_gid = 1; |
161 | } | 162 | } |
@@ -261,9 +262,11 @@ int hpfs_setattr(struct dentry *dentry, struct iattr *attr) | |||
261 | hpfs_lock(inode->i_sb); | 262 | hpfs_lock(inode->i_sb); |
262 | if (inode->i_ino == hpfs_sb(inode->i_sb)->sb_root) | 263 | if (inode->i_ino == hpfs_sb(inode->i_sb)->sb_root) |
263 | goto out_unlock; | 264 | goto out_unlock; |
264 | if ((attr->ia_valid & ATTR_UID) && attr->ia_uid >= 0x10000) | 265 | if ((attr->ia_valid & ATTR_UID) && |
266 | from_kuid(&init_user_ns, attr->ia_uid) >= 0x10000) | ||
265 | goto out_unlock; | 267 | goto out_unlock; |
266 | if ((attr->ia_valid & ATTR_GID) && attr->ia_gid >= 0x10000) | 268 | if ((attr->ia_valid & ATTR_GID) && |
269 | from_kgid(&init_user_ns, attr->ia_gid) >= 0x10000) | ||
267 | goto out_unlock; | 270 | goto out_unlock; |
268 | if ((attr->ia_valid & ATTR_SIZE) && attr->ia_size > inode->i_size) | 271 | if ((attr->ia_valid & ATTR_SIZE) && attr->ia_size > inode->i_size) |
269 | goto out_unlock; | 272 | goto out_unlock; |