diff options
author | Eric W. Biederman <ebiederm@xmission.com> | 2012-02-07 19:26:59 -0500 |
---|---|---|
committer | Eric W. Biederman <ebiederm@xmission.com> | 2012-09-21 06:13:11 -0400 |
commit | 43b5e4ccd463a5b42e0531c32628ac462081cab8 (patch) | |
tree | c405232b59c77064146991fceec17991956237e3 | |
parent | d001b0536562f816af7eb9947e49de58f504958a (diff) |
userns: Convert hfs to use kuid and kgid where appropriate
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
-rw-r--r-- | fs/hfs/hfs_fs.h | 4 | ||||
-rw-r--r-- | fs/hfs/inode.c | 4 | ||||
-rw-r--r-- | fs/hfs/super.c | 16 | ||||
-rw-r--r-- | init/Kconfig | 1 |
4 files changed, 17 insertions, 8 deletions
diff --git a/fs/hfs/hfs_fs.h b/fs/hfs/hfs_fs.h index 8275175acf6e..693df9fe52b2 100644 --- a/fs/hfs/hfs_fs.h +++ b/fs/hfs/hfs_fs.h | |||
@@ -134,8 +134,8 @@ struct hfs_sb_info { | |||
134 | permissions on all files */ | 134 | permissions on all files */ |
135 | umode_t s_dir_umask; /* The umask applied to the | 135 | umode_t s_dir_umask; /* The umask applied to the |
136 | permissions on all dirs */ | 136 | permissions on all dirs */ |
137 | uid_t s_uid; /* The uid of all files */ | 137 | kuid_t s_uid; /* The uid of all files */ |
138 | gid_t s_gid; /* The gid of all files */ | 138 | kgid_t s_gid; /* The gid of all files */ |
139 | 139 | ||
140 | int session, part; | 140 | int session, part; |
141 | struct nls_table *nls_io, *nls_disk; | 141 | struct nls_table *nls_io, *nls_disk; |
diff --git a/fs/hfs/inode.c b/fs/hfs/inode.c index ee1bc55677f1..5d5c22da1960 100644 --- a/fs/hfs/inode.c +++ b/fs/hfs/inode.c | |||
@@ -594,9 +594,9 @@ int hfs_inode_setattr(struct dentry *dentry, struct iattr * attr) | |||
594 | 594 | ||
595 | /* no uig/gid changes and limit which mode bits can be set */ | 595 | /* no uig/gid changes and limit which mode bits can be set */ |
596 | if (((attr->ia_valid & ATTR_UID) && | 596 | if (((attr->ia_valid & ATTR_UID) && |
597 | (attr->ia_uid != hsb->s_uid)) || | 597 | (!uid_eq(attr->ia_uid, hsb->s_uid))) || |
598 | ((attr->ia_valid & ATTR_GID) && | 598 | ((attr->ia_valid & ATTR_GID) && |
599 | (attr->ia_gid != hsb->s_gid)) || | 599 | (!gid_eq(attr->ia_gid, hsb->s_gid))) || |
600 | ((attr->ia_valid & ATTR_MODE) && | 600 | ((attr->ia_valid & ATTR_MODE) && |
601 | ((S_ISDIR(inode->i_mode) && | 601 | ((S_ISDIR(inode->i_mode) && |
602 | (attr->ia_mode != inode->i_mode)) || | 602 | (attr->ia_mode != inode->i_mode)) || |
diff --git a/fs/hfs/super.c b/fs/hfs/super.c index 4eb873e0c07b..0b63d135a092 100644 --- a/fs/hfs/super.c +++ b/fs/hfs/super.c | |||
@@ -138,7 +138,9 @@ static int hfs_show_options(struct seq_file *seq, struct dentry *root) | |||
138 | seq_printf(seq, ",creator=%.4s", (char *)&sbi->s_creator); | 138 | seq_printf(seq, ",creator=%.4s", (char *)&sbi->s_creator); |
139 | if (sbi->s_type != cpu_to_be32(0x3f3f3f3f)) | 139 | if (sbi->s_type != cpu_to_be32(0x3f3f3f3f)) |
140 | seq_printf(seq, ",type=%.4s", (char *)&sbi->s_type); | 140 | seq_printf(seq, ",type=%.4s", (char *)&sbi->s_type); |
141 | seq_printf(seq, ",uid=%u,gid=%u", sbi->s_uid, sbi->s_gid); | 141 | seq_printf(seq, ",uid=%u,gid=%u", |
142 | from_kuid_munged(&init_user_ns, sbi->s_uid), | ||
143 | from_kgid_munged(&init_user_ns, sbi->s_gid)); | ||
142 | if (sbi->s_file_umask != 0133) | 144 | if (sbi->s_file_umask != 0133) |
143 | seq_printf(seq, ",file_umask=%o", sbi->s_file_umask); | 145 | seq_printf(seq, ",file_umask=%o", sbi->s_file_umask); |
144 | if (sbi->s_dir_umask != 0022) | 146 | if (sbi->s_dir_umask != 0022) |
@@ -254,14 +256,22 @@ static int parse_options(char *options, struct hfs_sb_info *hsb) | |||
254 | printk(KERN_ERR "hfs: uid requires an argument\n"); | 256 | printk(KERN_ERR "hfs: uid requires an argument\n"); |
255 | return 0; | 257 | return 0; |
256 | } | 258 | } |
257 | hsb->s_uid = (uid_t)tmp; | 259 | hsb->s_uid = make_kuid(current_user_ns(), (uid_t)tmp); |
260 | if (!uid_valid(hsb->s_uid)) { | ||
261 | printk(KERN_ERR "hfs: invalid uid %d\n", tmp); | ||
262 | return 0; | ||
263 | } | ||
258 | break; | 264 | break; |
259 | case opt_gid: | 265 | case opt_gid: |
260 | if (match_int(&args[0], &tmp)) { | 266 | if (match_int(&args[0], &tmp)) { |
261 | printk(KERN_ERR "hfs: gid requires an argument\n"); | 267 | printk(KERN_ERR "hfs: gid requires an argument\n"); |
262 | return 0; | 268 | return 0; |
263 | } | 269 | } |
264 | hsb->s_gid = (gid_t)tmp; | 270 | hsb->s_gid = make_kgid(current_user_ns(), (gid_t)tmp); |
271 | if (!gid_valid(hsb->s_gid)) { | ||
272 | printk(KERN_ERR "hfs: invalid gid %d\n", tmp); | ||
273 | return 0; | ||
274 | } | ||
265 | break; | 275 | break; |
266 | case opt_umask: | 276 | case opt_umask: |
267 | if (match_octal(&args[0], &tmp)) { | 277 | if (match_octal(&args[0], &tmp)) { |
diff --git a/init/Kconfig b/init/Kconfig index 39e55d614f2c..6038d64b64b6 100644 --- a/init/Kconfig +++ b/init/Kconfig | |||
@@ -943,7 +943,6 @@ config UIDGID_CONVERTED | |||
943 | depends on CODA_FS = n | 943 | depends on CODA_FS = n |
944 | depends on FUSE_FS = n | 944 | depends on FUSE_FS = n |
945 | depends on GFS2_FS = n | 945 | depends on GFS2_FS = n |
946 | depends on HFS_FS = n | ||
947 | depends on HFSPLUS_FS = n | 946 | depends on HFSPLUS_FS = n |
948 | depends on HPFS_FS = n | 947 | depends on HPFS_FS = n |
949 | depends on ISO9660_FS = n | 948 | depends on ISO9660_FS = n |