Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

userns: Convert ntfs to use kuid and kgid where appropriate

Cc: Anton Altaparmakov <anton@tuxera.com>
Acked-by: Serge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>

+39 -13
+4 -3
fs/ntfs/inode.c
··· 2124 2124 * ntfs_read_inode() will have set up the default ones. 2125 2125 */ 2126 2126 /* Set uid and gid to root. */ 2127 - vi->i_uid = vi->i_gid = 0; 2127 + vi->i_uid = GLOBAL_ROOT_UID; 2128 + vi->i_gid = GLOBAL_ROOT_GID; 2128 2129 /* Regular file. No access for anyone. */ 2129 2130 vi->i_mode = S_IFREG; 2130 2131 /* No VFS initiated operations allowed for $MFT. */ ··· 2313 2312 ntfs_volume *vol = NTFS_SB(root->d_sb); 2314 2313 int i; 2315 2314 2316 - seq_printf(sf, ",uid=%i", vol->uid); 2317 - seq_printf(sf, ",gid=%i", vol->gid); 2315 + seq_printf(sf, ",uid=%i", from_kuid_munged(&init_user_ns, vol->uid)); 2316 + seq_printf(sf, ",gid=%i", from_kgid_munged(&init_user_ns, vol->gid)); 2318 2317 if (vol->fmask == vol->dmask) 2319 2318 seq_printf(sf, ",umask=0%o", vol->fmask); 2320 2319 else {
+32 -7
fs/ntfs/super.c
··· 102 102 char *p, *v, *ov; 103 103 static char *utf8 = "utf8"; 104 104 int errors = 0, sloppy = 0; 105 - uid_t uid = (uid_t)-1; 106 - gid_t gid = (gid_t)-1; 105 + kuid_t uid = INVALID_UID; 106 + kgid_t gid = INVALID_GID; 107 107 umode_t fmask = (umode_t)-1, dmask = (umode_t)-1; 108 108 int mft_zone_multiplier = -1, on_errors = -1; 109 109 int show_sys_files = -1, case_sensitive = -1, disable_sparse = -1; ··· 126 126 goto needs_arg; \ 127 127 variable = simple_strtoul(ov = v, &v, 0); \ 128 128 if (*v) \ 129 + goto needs_val; \ 130 + } 131 + #define NTFS_GETOPT_UID(option, variable) \ 132 + if (!strcmp(p, option)) { \ 133 + uid_t uid_value; \ 134 + if (!v || !*v) \ 135 + goto needs_arg; \ 136 + uid_value = simple_strtoul(ov = v, &v, 0); \ 137 + if (*v) \ 138 + goto needs_val; \ 139 + variable = make_kuid(current_user_ns(), uid_value); \ 140 + if (!uid_valid(variable)) \ 141 + goto needs_val; \ 142 + } 143 + #define NTFS_GETOPT_GID(option, variable) \ 144 + if (!strcmp(p, option)) { \ 145 + gid_t gid_value; \ 146 + if (!v || !*v) \ 147 + goto needs_arg; \ 148 + gid_value = simple_strtoul(ov = v, &v, 0); \ 149 + if (*v) \ 150 + goto needs_val; \ 151 + variable = make_kgid(current_user_ns(), gid_value); \ 152 + if (!gid_valid(variable)) \ 129 153 goto needs_val; \ 130 154 } 131 155 #define NTFS_GETOPT_OCTAL(option, variable) \ ··· 189 165 while ((p = strsep(&opt, ","))) { 190 166 if ((v = strchr(p, '='))) 191 167 *v++ = 0; 192 - NTFS_GETOPT("uid", uid) 193 - else NTFS_GETOPT("gid", gid) 168 + NTFS_GETOPT_UID("uid", uid) 169 + else NTFS_GETOPT_GID("gid", gid) 194 170 else NTFS_GETOPT_OCTAL("umask", fmask = dmask) 195 171 else NTFS_GETOPT_OCTAL("fmask", fmask) 196 172 else NTFS_GETOPT_OCTAL("dmask", dmask) ··· 307 283 vol->on_errors = on_errors; 308 284 if (!vol->on_errors || vol->on_errors == ON_ERRORS_RECOVER) 309 285 vol->on_errors |= ON_ERRORS_CONTINUE; 310 - if (uid != (uid_t)-1) 286 + if (uid_valid(uid)) 311 287 vol->uid = uid; 312 - if (gid != (gid_t)-1) 288 + if (gid_valid(gid)) 313 289 vol->gid = gid; 314 290 if (fmask != (umode_t)-1) 315 291 vol->fmask = fmask; ··· 1047 1023 * ntfs_read_inode() will have set up the default ones. 1048 1024 */ 1049 1025 /* Set uid and gid to root. */ 1050 - tmp_ino->i_uid = tmp_ino->i_gid = 0; 1026 + tmp_ino->i_uid = GLOBAL_ROOT_UID; 1027 + tmp_ino->i_gid = GLOBAL_ROOT_GID; 1051 1028 /* Regular file. No access for anyone. */ 1052 1029 tmp_ino->i_mode = S_IFREG; 1053 1030 /* No VFS initiated operations allowed for $MFTMirr. */
+3 -2
fs/ntfs/volume.h
··· 25 25 #define _LINUX_NTFS_VOLUME_H 26 26 27 27 #include <linux/rwsem.h> 28 + #include <linux/uidgid.h> 28 29 29 30 #include "types.h" 30 31 #include "layout.h" ··· 47 46 sized blocks on the device. */ 48 47 /* Configuration provided by user at mount time. */ 49 48 unsigned long flags; /* Miscellaneous flags, see below. */ 50 - uid_t uid; /* uid that files will be mounted as. */ 51 - gid_t gid; /* gid that files will be mounted as. */ 49 + kuid_t uid; /* uid that files will be mounted as. */ 50 + kgid_t gid; /* gid that files will be mounted as. */ 52 51 umode_t fmask; /* The mask for file permissions. */ 53 52 umode_t dmask; /* The mask for directory 54 53 permissions. */
-1
init/Kconfig
··· 949 949 depends on NCP_FS = n 950 950 depends on NFSD = n 951 951 depends on NFS_FS = n 952 - depends on NTFS_FS = n 953 952 depends on OCFS2_FS = n 954 953 depends on OMFS_FS = n 955 954 depends on QNX4FS_FS = n