diff options
Diffstat (limited to 'fs/adfs/super.c')
| -rw-r--r-- | fs/adfs/super.c | 21 | 
1 files changed, 13 insertions, 8 deletions
diff --git a/fs/adfs/super.c b/fs/adfs/super.c index bdaec92353c..22a0d7ed5fa 100644 --- a/fs/adfs/super.c +++ b/fs/adfs/super.c @@ -15,6 +15,7 @@  #include <linux/seq_file.h>  #include <linux/slab.h>  #include <linux/statfs.h> +#include <linux/user_namespace.h>  #include "adfs.h"  #include "dir_f.h"  #include "dir_fplus.h" @@ -130,10 +131,10 @@ static int adfs_show_options(struct seq_file *seq, struct dentry *root)  {  	struct adfs_sb_info *asb = ADFS_SB(root->d_sb); -	if (asb->s_uid != 0) -		seq_printf(seq, ",uid=%u", asb->s_uid); -	if (asb->s_gid != 0) -		seq_printf(seq, ",gid=%u", asb->s_gid); +	if (!uid_eq(asb->s_uid, GLOBAL_ROOT_UID)) +		seq_printf(seq, ",uid=%u", from_kuid_munged(&init_user_ns, asb->s_uid)); +	if (!gid_eq(asb->s_gid, GLOBAL_ROOT_GID)) +		seq_printf(seq, ",gid=%u", from_kgid_munged(&init_user_ns, asb->s_gid));  	if (asb->s_owner_mask != ADFS_DEFAULT_OWNER_MASK)  		seq_printf(seq, ",ownmask=%o", asb->s_owner_mask);  	if (asb->s_other_mask != ADFS_DEFAULT_OTHER_MASK) @@ -175,12 +176,16 @@ static int parse_options(struct super_block *sb, char *options)  		case Opt_uid:  			if (match_int(args, &option))  				return -EINVAL; -			asb->s_uid = option; +			asb->s_uid = make_kuid(current_user_ns(), option); +			if (!uid_valid(asb->s_uid)) +				return -EINVAL;  			break;  		case Opt_gid:  			if (match_int(args, &option))  				return -EINVAL; -			asb->s_gid = option; +			asb->s_gid = make_kgid(current_user_ns(), option); +			if (!gid_valid(asb->s_gid)) +				return -EINVAL;  			break;  		case Opt_ownmask:  			if (match_octal(args, &option)) @@ -369,8 +374,8 @@ static int adfs_fill_super(struct super_block *sb, void *data, int silent)  	sb->s_fs_info = asb;  	/* set default options */ -	asb->s_uid = 0; -	asb->s_gid = 0; +	asb->s_uid = GLOBAL_ROOT_UID; +	asb->s_gid = GLOBAL_ROOT_GID;  	asb->s_owner_mask = ADFS_DEFAULT_OWNER_MASK;  	asb->s_other_mask = ADFS_DEFAULT_OTHER_MASK;  	asb->s_ftsuffix = 0;  |