Loading fs/sdcardfs/derived_perm.c +3 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,9 @@ void fixup_lower_ownership(struct dentry *dentry, const char *name) gid_t gid = sbi->options.fs_low_gid; struct iattr newattrs; if (!sbi->options.gid_derivation) return; info = SDCARDFS_I(d_inode(dentry)); info_d = info->data; perm = info_d->perm; Loading fs/sdcardfs/inode.c +8 −4 Original line number Diff line number Diff line Loading @@ -34,10 +34,14 @@ const struct cred *override_fsids(struct sdcardfs_sb_info *sbi, if (!cred) return NULL; if (sbi->options.gid_derivation) { if (data->under_obb) uid = AID_MEDIA_OBB; else uid = multiuser_get_uid(data->userid, sbi->options.fs_low_uid); } else { uid = sbi->options.fs_low_uid; } cred->fsuid = make_kuid(&init_user_ns, uid); cred->fsgid = make_kgid(&init_user_ns, sbi->options.fs_low_gid); Loading fs/sdcardfs/main.c +7 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ enum { Opt_multiuser, Opt_userid, Opt_reserved_mb, Opt_gid_derivation, Opt_err, }; Loading @@ -43,6 +44,7 @@ static const match_table_t sdcardfs_tokens = { {Opt_mask, "mask=%u"}, {Opt_userid, "userid=%d"}, {Opt_multiuser, "multiuser"}, {Opt_gid_derivation, "derive_gid"}, {Opt_reserved_mb, "reserved_mb=%u"}, {Opt_err, NULL} }; Loading @@ -64,6 +66,8 @@ static int parse_options(struct super_block *sb, char *options, int silent, vfsopts->gid = 0; /* by default, 0MB is reserved */ opts->reserved_mb = 0; /* by default, gid derivation is off */ opts->gid_derivation = false; *debug = 0; Loading Loading @@ -115,6 +119,9 @@ static int parse_options(struct super_block *sb, char *options, int silent, return 0; opts->reserved_mb = option; break; case Opt_gid_derivation: opts->gid_derivation = true; break; /* unknown option */ default: if (!silent) Loading fs/sdcardfs/sdcardfs.h +1 −0 Original line number Diff line number Diff line Loading @@ -219,6 +219,7 @@ struct sdcardfs_mount_options { gid_t fs_low_gid; userid_t fs_user_id; bool multiuser; bool gid_derivation; unsigned int reserved_mb; }; Loading fs/sdcardfs/super.c +2 −0 Original line number Diff line number Diff line Loading @@ -302,6 +302,8 @@ static int sdcardfs_show_options(struct vfsmount *mnt, struct seq_file *m, seq_printf(m, ",mask=%u", vfsopts->mask); if (opts->fs_user_id) seq_printf(m, ",userid=%u", opts->fs_user_id); if (opts->gid_derivation) seq_puts(m, ",derive_gid"); if (opts->reserved_mb != 0) seq_printf(m, ",reserved=%uMB", opts->reserved_mb); Loading Loading
fs/sdcardfs/derived_perm.c +3 −0 Original line number Diff line number Diff line Loading @@ -176,6 +176,9 @@ void fixup_lower_ownership(struct dentry *dentry, const char *name) gid_t gid = sbi->options.fs_low_gid; struct iattr newattrs; if (!sbi->options.gid_derivation) return; info = SDCARDFS_I(d_inode(dentry)); info_d = info->data; perm = info_d->perm; Loading
fs/sdcardfs/inode.c +8 −4 Original line number Diff line number Diff line Loading @@ -34,10 +34,14 @@ const struct cred *override_fsids(struct sdcardfs_sb_info *sbi, if (!cred) return NULL; if (sbi->options.gid_derivation) { if (data->under_obb) uid = AID_MEDIA_OBB; else uid = multiuser_get_uid(data->userid, sbi->options.fs_low_uid); } else { uid = sbi->options.fs_low_uid; } cred->fsuid = make_kuid(&init_user_ns, uid); cred->fsgid = make_kgid(&init_user_ns, sbi->options.fs_low_gid); Loading
fs/sdcardfs/main.c +7 −0 Original line number Diff line number Diff line Loading @@ -32,6 +32,7 @@ enum { Opt_multiuser, Opt_userid, Opt_reserved_mb, Opt_gid_derivation, Opt_err, }; Loading @@ -43,6 +44,7 @@ static const match_table_t sdcardfs_tokens = { {Opt_mask, "mask=%u"}, {Opt_userid, "userid=%d"}, {Opt_multiuser, "multiuser"}, {Opt_gid_derivation, "derive_gid"}, {Opt_reserved_mb, "reserved_mb=%u"}, {Opt_err, NULL} }; Loading @@ -64,6 +66,8 @@ static int parse_options(struct super_block *sb, char *options, int silent, vfsopts->gid = 0; /* by default, 0MB is reserved */ opts->reserved_mb = 0; /* by default, gid derivation is off */ opts->gid_derivation = false; *debug = 0; Loading Loading @@ -115,6 +119,9 @@ static int parse_options(struct super_block *sb, char *options, int silent, return 0; opts->reserved_mb = option; break; case Opt_gid_derivation: opts->gid_derivation = true; break; /* unknown option */ default: if (!silent) Loading
fs/sdcardfs/sdcardfs.h +1 −0 Original line number Diff line number Diff line Loading @@ -219,6 +219,7 @@ struct sdcardfs_mount_options { gid_t fs_low_gid; userid_t fs_user_id; bool multiuser; bool gid_derivation; unsigned int reserved_mb; }; Loading
fs/sdcardfs/super.c +2 −0 Original line number Diff line number Diff line Loading @@ -302,6 +302,8 @@ static int sdcardfs_show_options(struct vfsmount *mnt, struct seq_file *m, seq_printf(m, ",mask=%u", vfsopts->mask); if (opts->fs_user_id) seq_printf(m, ",userid=%u", opts->fs_user_id); if (opts->gid_derivation) seq_puts(m, ",derive_gid"); if (opts->reserved_mb != 0) seq_printf(m, ",reserved=%uMB", opts->reserved_mb); Loading