diff options
Diffstat (limited to 'fs/fs_parser.c')
| -rw-r--r-- | fs/fs_parser.c | 34 | 
1 files changed, 34 insertions, 0 deletions
| diff --git a/fs/fs_parser.c b/fs/fs_parser.c index a4d6ca0b8971..24727ec34e5a 100644 --- a/fs/fs_parser.c +++ b/fs/fs_parser.c @@ -308,6 +308,40 @@ int fs_param_is_fd(struct p_log *log, const struct fs_parameter_spec *p,  }  EXPORT_SYMBOL(fs_param_is_fd); +int fs_param_is_uid(struct p_log *log, const struct fs_parameter_spec *p, +		    struct fs_parameter *param, struct fs_parse_result *result) +{ +	kuid_t uid; + +	if (fs_param_is_u32(log, p, param, result) != 0) +		return fs_param_bad_value(log, param); + +	uid = make_kuid(current_user_ns(), result->uint_32); +	if (!uid_valid(uid)) +		return inval_plog(log, "Invalid uid '%s'", param->string); + +	result->uid = uid; +	return 0; +} +EXPORT_SYMBOL(fs_param_is_uid); + +int fs_param_is_gid(struct p_log *log, const struct fs_parameter_spec *p, +		    struct fs_parameter *param, struct fs_parse_result *result) +{ +	kgid_t gid; + +	if (fs_param_is_u32(log, p, param, result) != 0) +		return fs_param_bad_value(log, param); + +	gid = make_kgid(current_user_ns(), result->uint_32); +	if (!gid_valid(gid)) +		return inval_plog(log, "Invalid gid '%s'", param->string); + +	result->gid = gid; +	return 0; +} +EXPORT_SYMBOL(fs_param_is_gid); +  int fs_param_is_blockdev(struct p_log *log, const struct fs_parameter_spec *p,  		  struct fs_parameter *param, struct fs_parse_result *result)  { |