|
@@ -478,6 +478,17 @@ static const match_table_t tokens = {
|
|
|
{OPT_ERR, NULL}
|
|
|
};
|
|
|
|
|
|
+static int fuse_match_uint(substring_t *s, unsigned int *res)
|
|
|
+{
|
|
|
+ int err = -ENOMEM;
|
|
|
+ char *buf = match_strdup(s);
|
|
|
+ if (buf) {
|
|
|
+ err = kstrtouint(buf, 10, res);
|
|
|
+ kfree(buf);
|
|
|
+ }
|
|
|
+ return err;
|
|
|
+}
|
|
|
+
|
|
|
static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
|
|
|
{
|
|
|
char *p;
|
|
@@ -488,6 +499,7 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
|
|
|
while ((p = strsep(&opt, ",")) != NULL) {
|
|
|
int token;
|
|
|
int value;
|
|
|
+ unsigned uv;
|
|
|
substring_t args[MAX_OPT_ARGS];
|
|
|
if (!*p)
|
|
|
continue;
|
|
@@ -511,18 +523,18 @@ static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
|
|
|
break;
|
|
|
|
|
|
case OPT_USER_ID:
|
|
|
- if (match_int(&args[0], &value))
|
|
|
+ if (fuse_match_uint(&args[0], &uv))
|
|
|
return 0;
|
|
|
- d->user_id = make_kuid(current_user_ns(), value);
|
|
|
+ d->user_id = make_kuid(current_user_ns(), uv);
|
|
|
if (!uid_valid(d->user_id))
|
|
|
return 0;
|
|
|
d->user_id_present = 1;
|
|
|
break;
|
|
|
|
|
|
case OPT_GROUP_ID:
|
|
|
- if (match_int(&args[0], &value))
|
|
|
+ if (fuse_match_uint(&args[0], &uv))
|
|
|
return 0;
|
|
|
- d->group_id = make_kgid(current_user_ns(), value);
|
|
|
+ d->group_id = make_kgid(current_user_ns(), uv);
|
|
|
if (!gid_valid(d->group_id))
|
|
|
return 0;
|
|
|
d->group_id_present = 1;
|