dect
/
linux-2.6
Archived
13
0
Fork 0

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>
This commit is contained in:
Eric W. Biederman 2012-02-10 10:51:24 -08:00
parent c010d1ff4f
commit 31aba059bb
3 changed files with 21 additions and 11 deletions

View File

@ -20,8 +20,8 @@ typedef u64 befs_blocknr_t;
*/ */
typedef struct befs_mount_options { typedef struct befs_mount_options {
gid_t gid; kgid_t gid;
uid_t uid; kuid_t uid;
int use_gid; int use_gid;
int use_uid; int use_uid;
int debug; int debug;

View File

@ -15,6 +15,7 @@
#include <linux/vfs.h> #include <linux/vfs.h>
#include <linux/parser.h> #include <linux/parser.h>
#include <linux/namei.h> #include <linux/namei.h>
#include <linux/sched.h>
#include "befs.h" #include "befs.h"
#include "btree.h" #include "btree.h"
@ -352,9 +353,11 @@ static struct inode *befs_iget(struct super_block *sb, unsigned long ino)
*/ */
inode->i_uid = befs_sb->mount_opts.use_uid ? inode->i_uid = befs_sb->mount_opts.use_uid ?
befs_sb->mount_opts.uid : (uid_t) fs32_to_cpu(sb, raw_inode->uid); befs_sb->mount_opts.uid :
make_kuid(&init_user_ns, fs32_to_cpu(sb, raw_inode->uid));
inode->i_gid = befs_sb->mount_opts.use_gid ? inode->i_gid = befs_sb->mount_opts.use_gid ?
befs_sb->mount_opts.gid : (gid_t) fs32_to_cpu(sb, raw_inode->gid); befs_sb->mount_opts.gid :
make_kgid(&init_user_ns, fs32_to_cpu(sb, raw_inode->gid));
set_nlink(inode, 1); set_nlink(inode, 1);
@ -674,10 +677,12 @@ parse_options(char *options, befs_mount_options * opts)
char *p; char *p;
substring_t args[MAX_OPT_ARGS]; substring_t args[MAX_OPT_ARGS];
int option; int option;
kuid_t uid;
kgid_t gid;
/* Initialize options */ /* Initialize options */
opts->uid = 0; opts->uid = GLOBAL_ROOT_UID;
opts->gid = 0; opts->gid = GLOBAL_ROOT_GID;
opts->use_uid = 0; opts->use_uid = 0;
opts->use_gid = 0; opts->use_gid = 0;
opts->iocharset = NULL; opts->iocharset = NULL;
@ -696,23 +701,29 @@ parse_options(char *options, befs_mount_options * opts)
case Opt_uid: case Opt_uid:
if (match_int(&args[0], &option)) if (match_int(&args[0], &option))
return 0; return 0;
if (option < 0) { uid = INVALID_UID;
if (option >= 0)
uid = make_kuid(current_user_ns(), option);
if (!uid_valid(uid)) {
printk(KERN_ERR "BeFS: Invalid uid %d, " printk(KERN_ERR "BeFS: Invalid uid %d, "
"using default\n", option); "using default\n", option);
break; break;
} }
opts->uid = option; opts->uid = uid;
opts->use_uid = 1; opts->use_uid = 1;
break; break;
case Opt_gid: case Opt_gid:
if (match_int(&args[0], &option)) if (match_int(&args[0], &option))
return 0; return 0;
if (option < 0) { gid = INVALID_GID;
if (option >= 0)
gid = make_kgid(current_user_ns(), option);
if (!gid_valid(gid)) {
printk(KERN_ERR "BeFS: Invalid gid %d, " printk(KERN_ERR "BeFS: Invalid gid %d, "
"using default\n", option); "using default\n", option);
break; break;
} }
opts->gid = option; opts->gid = gid;
opts->use_gid = 1; opts->use_gid = 1;
break; break;
case Opt_charset: case Opt_charset:

View File

@ -936,7 +936,6 @@ config UIDGID_CONVERTED
depends on AFFS_FS = n depends on AFFS_FS = n
depends on AFS_FS = n depends on AFS_FS = n
depends on AUTOFS4_FS = n depends on AUTOFS4_FS = n
depends on BEFS_FS = n
depends on BFS_FS = n depends on BFS_FS = n
depends on BTRFS_FS = n depends on BTRFS_FS = n
depends on CEPH_FS = n depends on CEPH_FS = n