projects
/
platform
/
adaptation
/
renesas_rcar
/
renesas_kernel.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
fuse: handle large user and group ID
[platform/adaptation/renesas_rcar/renesas_kernel.git]
/
fs
/
fuse
/
inode.c
diff --git
a/fs/fuse/inode.c
b/fs/fuse/inode.c
index
d468643
..
73f6bcb
100644
(file)
--- a/
fs/fuse/inode.c
+++ b/
fs/fuse/inode.c
@@
-461,6
+461,17
@@
static const match_table_t tokens = {
{OPT_ERR, NULL}
};
{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;
static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
{
char *p;
@@
-471,6
+482,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;
while ((p = strsep(&opt, ",")) != NULL) {
int token;
int value;
+ unsigned uv;
substring_t args[MAX_OPT_ARGS];
if (!*p)
continue;
substring_t args[MAX_OPT_ARGS];
if (!*p)
continue;
@@
-494,18
+506,18
@@
static int parse_fuse_opt(char *opt, struct fuse_mount_data *d, int is_bdev)
break;
case OPT_USER_ID:
break;
case OPT_USER_ID:
- if (
match_int(&args[0], &value
))
+ if (
fuse_match_uint(&args[0], &uv
))
return 0;
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 (!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;
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;
if (!gid_valid(d->group_id))
return 0;
d->group_id_present = 1;