diff options
Diffstat (limited to 'fs/isofs')
-rw-r--r-- | fs/isofs/inode.c | 17 | ||||
-rw-r--r-- | fs/isofs/isofs.h | 4 | ||||
-rw-r--r-- | fs/isofs/rock.c | 4 |
3 files changed, 15 insertions, 10 deletions
diff --git a/fs/isofs/inode.c b/fs/isofs/inode.c index f94cde4527e8..67ce52507d7d 100644 --- a/fs/isofs/inode.c +++ b/fs/isofs/inode.c | |||
@@ -21,6 +21,7 @@ | |||
21 | #include <linux/cdrom.h> | 21 | #include <linux/cdrom.h> |
22 | #include <linux/parser.h> | 22 | #include <linux/parser.h> |
23 | #include <linux/mpage.h> | 23 | #include <linux/mpage.h> |
24 | #include <linux/user_namespace.h> | ||
24 | 25 | ||
25 | #include "isofs.h" | 26 | #include "isofs.h" |
26 | #include "zisofs.h" | 27 | #include "zisofs.h" |
@@ -176,8 +177,8 @@ struct iso9660_options{ | |||
176 | unsigned int blocksize; | 177 | unsigned int blocksize; |
177 | umode_t fmode; | 178 | umode_t fmode; |
178 | umode_t dmode; | 179 | umode_t dmode; |
179 | gid_t gid; | 180 | kgid_t gid; |
180 | uid_t uid; | 181 | kuid_t uid; |
181 | char *iocharset; | 182 | char *iocharset; |
182 | /* LVE */ | 183 | /* LVE */ |
183 | s32 session; | 184 | s32 session; |
@@ -388,8 +389,8 @@ static int parse_options(char *options, struct iso9660_options *popt) | |||
388 | popt->fmode = popt->dmode = ISOFS_INVALID_MODE; | 389 | popt->fmode = popt->dmode = ISOFS_INVALID_MODE; |
389 | popt->uid_set = 0; | 390 | popt->uid_set = 0; |
390 | popt->gid_set = 0; | 391 | popt->gid_set = 0; |
391 | popt->gid = 0; | 392 | popt->gid = GLOBAL_ROOT_GID; |
392 | popt->uid = 0; | 393 | popt->uid = GLOBAL_ROOT_UID; |
393 | popt->iocharset = NULL; | 394 | popt->iocharset = NULL; |
394 | popt->utf8 = 0; | 395 | popt->utf8 = 0; |
395 | popt->overriderockperm = 0; | 396 | popt->overriderockperm = 0; |
@@ -465,13 +466,17 @@ static int parse_options(char *options, struct iso9660_options *popt) | |||
465 | case Opt_uid: | 466 | case Opt_uid: |
466 | if (match_int(&args[0], &option)) | 467 | if (match_int(&args[0], &option)) |
467 | return 0; | 468 | return 0; |
468 | popt->uid = option; | 469 | popt->uid = make_kuid(current_user_ns(), option); |
470 | if (!uid_valid(popt->uid)) | ||
471 | return 0; | ||
469 | popt->uid_set = 1; | 472 | popt->uid_set = 1; |
470 | break; | 473 | break; |
471 | case Opt_gid: | 474 | case Opt_gid: |
472 | if (match_int(&args[0], &option)) | 475 | if (match_int(&args[0], &option)) |
473 | return 0; | 476 | return 0; |
474 | popt->gid = option; | 477 | popt->gid = make_kgid(current_user_ns(), option); |
478 | if (!gid_valid(popt->gid)) | ||
479 | return 0; | ||
475 | popt->gid_set = 1; | 480 | popt->gid_set = 1; |
476 | break; | 481 | break; |
477 | case Opt_mode: | 482 | case Opt_mode: |
diff --git a/fs/isofs/isofs.h b/fs/isofs/isofs.h index 3620ad1ea9bc..99167238518d 100644 --- a/fs/isofs/isofs.h +++ b/fs/isofs/isofs.h | |||
@@ -52,8 +52,8 @@ struct isofs_sb_info { | |||
52 | 52 | ||
53 | umode_t s_fmode; | 53 | umode_t s_fmode; |
54 | umode_t s_dmode; | 54 | umode_t s_dmode; |
55 | gid_t s_gid; | 55 | kgid_t s_gid; |
56 | uid_t s_uid; | 56 | kuid_t s_uid; |
57 | struct nls_table *s_nls_iocharset; /* Native language support table */ | 57 | struct nls_table *s_nls_iocharset; /* Native language support table */ |
58 | }; | 58 | }; |
59 | 59 | ||
diff --git a/fs/isofs/rock.c b/fs/isofs/rock.c index 70e79d0c756a..c0bf42472e40 100644 --- a/fs/isofs/rock.c +++ b/fs/isofs/rock.c | |||
@@ -364,8 +364,8 @@ repeat: | |||
364 | case SIG('P', 'X'): | 364 | case SIG('P', 'X'): |
365 | inode->i_mode = isonum_733(rr->u.PX.mode); | 365 | inode->i_mode = isonum_733(rr->u.PX.mode); |
366 | set_nlink(inode, isonum_733(rr->u.PX.n_links)); | 366 | set_nlink(inode, isonum_733(rr->u.PX.n_links)); |
367 | inode->i_uid = isonum_733(rr->u.PX.uid); | 367 | i_uid_write(inode, isonum_733(rr->u.PX.uid)); |
368 | inode->i_gid = isonum_733(rr->u.PX.gid); | 368 | i_gid_write(inode, isonum_733(rr->u.PX.gid)); |
369 | break; | 369 | break; |
370 | case SIG('P', 'N'): | 370 | case SIG('P', 'N'): |
371 | { | 371 | { |