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

userns: Convert befs to use kuid/kgid where appropriate

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

+21 -11
+2 -2
fs/befs/befs.h
··· 20 20 */ 21 21 22 22 typedef struct befs_mount_options { 23 - gid_t gid; 24 - uid_t uid; 23 + kgid_t gid; 24 + kuid_t uid; 25 25 int use_gid; 26 26 int use_uid; 27 27 int debug;
+19 -8
fs/befs/linuxvfs.c
··· 15 15 #include <linux/vfs.h> 16 16 #include <linux/parser.h> 17 17 #include <linux/namei.h> 18 + #include <linux/sched.h> 18 19 19 20 #include "befs.h" 20 21 #include "btree.h" ··· 353 352 */ 354 353 355 354 inode->i_uid = befs_sb->mount_opts.use_uid ? 356 - befs_sb->mount_opts.uid : (uid_t) fs32_to_cpu(sb, raw_inode->uid); 355 + befs_sb->mount_opts.uid : 356 + make_kuid(&init_user_ns, fs32_to_cpu(sb, raw_inode->uid)); 357 357 inode->i_gid = befs_sb->mount_opts.use_gid ? 358 - befs_sb->mount_opts.gid : (gid_t) fs32_to_cpu(sb, raw_inode->gid); 358 + befs_sb->mount_opts.gid : 359 + make_kgid(&init_user_ns, fs32_to_cpu(sb, raw_inode->gid)); 359 360 360 361 set_nlink(inode, 1); 361 362 ··· 677 674 char *p; 678 675 substring_t args[MAX_OPT_ARGS]; 679 676 int option; 677 + kuid_t uid; 678 + kgid_t gid; 680 679 681 680 /* Initialize options */ 682 - opts->uid = 0; 683 - opts->gid = 0; 681 + opts->uid = GLOBAL_ROOT_UID; 682 + opts->gid = GLOBAL_ROOT_GID; 684 683 opts->use_uid = 0; 685 684 opts->use_gid = 0; 686 685 opts->iocharset = NULL; ··· 701 696 case Opt_uid: 702 697 if (match_int(&args[0], &option)) 703 698 return 0; 704 - if (option < 0) { 699 + uid = INVALID_UID; 700 + if (option >= 0) 701 + uid = make_kuid(current_user_ns(), option); 702 + if (!uid_valid(uid)) { 705 703 printk(KERN_ERR "BeFS: Invalid uid %d, " 706 704 "using default\n", option); 707 705 break; 708 706 } 709 - opts->uid = option; 707 + opts->uid = uid; 710 708 opts->use_uid = 1; 711 709 break; 712 710 case Opt_gid: 713 711 if (match_int(&args[0], &option)) 714 712 return 0; 715 - if (option < 0) { 713 + gid = INVALID_GID; 714 + if (option >= 0) 715 + gid = make_kgid(current_user_ns(), option); 716 + if (!gid_valid(gid)) { 716 717 printk(KERN_ERR "BeFS: Invalid gid %d, " 717 718 "using default\n", option); 718 719 break; 719 720 } 720 - opts->gid = option; 721 + opts->gid = gid; 721 722 opts->use_gid = 1; 722 723 break; 723 724 case Opt_charset:
-1
init/Kconfig
··· 936 936 depends on AFFS_FS = n 937 937 depends on AFS_FS = n 938 938 depends on AUTOFS4_FS = n 939 - depends on BEFS_FS = n 940 939 depends on BFS_FS = n 941 940 depends on BTRFS_FS = n 942 941 depends on CEPH_FS = n