aboutsummaryrefslogtreecommitdiff
path: root/fs
diff options
context:
space:
mode:
authorDaniel Rosenberg <drosen@google.com>2018-10-25 16:25:15 -0700
committerMoyster <oysterized@gmail.com>2018-12-21 13:51:32 +0100
commit1fd3106431b510060082deb7d4d108c94b93a452 (patch)
tree15194e277874ef7905d5ed1a6b9950ca17303536 /fs
parent8b3f8dcd3f2fe594d005f70e0ef7202f660e3367 (diff)
ANDROID: sdcardfs: Add option to not link obb
Add mount option unshared_obb to not link the obb folders of multiple users together. Bug: 27915347 Test: mount with option. Check if altering one obb alters the other Signed-off-by: Daniel Rosenberg <drosen@google.com> Change-Id: I3956e06bd0a222b0bbb2768c9a8a8372ada85e1e
Diffstat (limited to 'fs')
-rwxr-xr-xfs/sdcardfs/derived_perm.c3
-rwxr-xr-xfs/sdcardfs/main.c10
-rwxr-xr-xfs/sdcardfs/sdcardfs.h1
3 files changed, 12 insertions, 2 deletions
diff --git a/fs/sdcardfs/derived_perm.c b/fs/sdcardfs/derived_perm.c
index 7311c75f8..9f2e431c7 100755
--- a/fs/sdcardfs/derived_perm.c
+++ b/fs/sdcardfs/derived_perm.c
@@ -356,7 +356,8 @@ int need_graft_path(struct dentry *dentry)
struct sdcardfs_sb_info *sbi = SDCARDFS_SB(dentry->d_sb);
struct qstr obb = QSTR_LITERAL("obb");
- if (parent_info->data->perm == PERM_ANDROID &&
+ if (!sbi->options.unshared_obb &&
+ parent_info->data->perm == PERM_ANDROID &&
qstr_case_eq(&dentry->d_name, &obb)) {
/* /Android/obb is the base obbpath of DERIVED_UNIFIED */
diff --git a/fs/sdcardfs/main.c b/fs/sdcardfs/main.c
index 8e12a7dda..280ad597f 100755
--- a/fs/sdcardfs/main.c
+++ b/fs/sdcardfs/main.c
@@ -35,6 +35,7 @@ enum {
Opt_gid_derivation,
Opt_default_normal,
Opt_nocache,
+ Opt_unshared_obb,
Opt_err,
};
@@ -48,6 +49,7 @@ static const match_table_t sdcardfs_tokens = {
{Opt_multiuser, "multiuser"},
{Opt_gid_derivation, "derive_gid"},
{Opt_default_normal, "default_normal"},
+ {Opt_unshared_obb, "unshared_obb"},
{Opt_reserved_mb, "reserved_mb=%u"},
{Opt_nocache, "nocache"},
{Opt_err, NULL}
@@ -133,6 +135,9 @@ static int parse_options(struct super_block *sb, char *options, int silent,
case Opt_nocache:
opts->nocache = true;
break;
+ case Opt_unshared_obb:
+ opts->unshared_obb = true;
+ break;
/* unknown option */
default:
if (!silent)
@@ -186,13 +191,16 @@ int parse_options_remount(struct super_block *sb, char *options, int silent,
return 0;
vfsopts->mask = option;
break;
+ case Opt_unshared_obb:
case Opt_default_normal:
case Opt_multiuser:
case Opt_userid:
case Opt_fsuid:
case Opt_fsgid:
case Opt_reserved_mb:
- pr_warn("Option \"%s\" can't be changed during remount\n", p);
+ case Opt_gid_derivation:
+ if (!silent)
+ pr_warn("Option \"%s\" can't be changed during remount\n", p);
break;
/* unknown option */
default:
diff --git a/fs/sdcardfs/sdcardfs.h b/fs/sdcardfs/sdcardfs.h
index 0d94d56c7..6b18547fc 100755
--- a/fs/sdcardfs/sdcardfs.h
+++ b/fs/sdcardfs/sdcardfs.h
@@ -195,6 +195,7 @@ struct sdcardfs_mount_options {
bool multiuser;
bool gid_derivation;
bool default_normal;
+ bool unshared_obb;
unsigned int reserved_mb;
bool nocache;
};