Commit 31aba059 authored by Eric W. Biederman's avatar Eric W. Biederman

userns: Convert befs to use kuid/kgid where appropriate

Acked-by: default avatarSerge Hallyn <serge.hallyn@canonical.com>
Signed-off-by: default avatarEric W. Biederman <ebiederm@xmission.com>
parent c010d1ff
...@@ -20,8 +20,8 @@ typedef u64 befs_blocknr_t; ...@@ -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;
......
...@@ -15,6 +15,7 @@ ...@@ -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) ...@@ -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) ...@@ -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) ...@@ -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:
......
...@@ -936,7 +936,6 @@ config UIDGID_CONVERTED ...@@ -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
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment