Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a56758fe authored by Daniel Rosenberg's avatar Daniel Rosenberg
Browse files

ANDROID: sdcardfs: Add default_normal option



The default_normal option causes mounts with the gid set to
AID_SDCARD_RW to have user specific gids, as in the normal case.

Signed-off-by: default avatarDaniel Rosenberg <drosen@google.com>
Change-Id: I9619b8ac55f41415df943484dc8db1ea986cef6f
Bug: 64672411
parent fd825dd8
Loading
Loading
Loading
Loading
+6 −0
Original line number Diff line number Diff line
@@ -33,6 +33,7 @@ enum {
	Opt_userid,
	Opt_reserved_mb,
	Opt_gid_derivation,
	Opt_default_normal,
	Opt_err,
};

@@ -45,6 +46,7 @@ static const match_table_t sdcardfs_tokens = {
	{Opt_userid, "userid=%d"},
	{Opt_multiuser, "multiuser"},
	{Opt_gid_derivation, "derive_gid"},
	{Opt_default_normal, "default_normal"},
	{Opt_reserved_mb, "reserved_mb=%u"},
	{Opt_err, NULL}
};
@@ -68,6 +70,7 @@ static int parse_options(struct super_block *sb, char *options, int silent,
	opts->reserved_mb = 0;
	/* by default, gid derivation is off */
	opts->gid_derivation = false;
	vfsopts->default_normal = false;

	*debug = 0;

@@ -122,6 +125,8 @@ static int parse_options(struct super_block *sb, char *options, int silent,
		case Opt_gid_derivation:
			opts->gid_derivation = true;
			break;
		case Opt_default_normal:
			vfsopts->default_normal = true;
		/* unknown option */
		default:
			if (!silent)
@@ -175,6 +180,7 @@ int parse_options_remount(struct super_block *sb, char *options, int silent,
				return 0;
			vfsopts->mask = option;
			break;
		case Opt_default_normal:
		case Opt_multiuser:
		case Opt_userid:
		case Opt_fsuid:
+2 −1
Original line number Diff line number Diff line
@@ -226,6 +226,7 @@ struct sdcardfs_mount_options {
struct sdcardfs_vfsmount_options {
	gid_t gid;
	mode_t mask;
	bool default_normal;
};

extern int parse_options_remount(struct super_block *sb, char *options, int silent,
@@ -417,7 +418,7 @@ static inline int get_gid(struct vfsmount *mnt,
{
	struct sdcardfs_vfsmount_options *opts = mnt->data;

	if (opts->gid == AID_SDCARD_RW)
	if (opts->gid == AID_SDCARD_RW && !opts->default_normal)
		/* As an optimization, certain trusted system components only run
		 * as owner but operate across all users. Since we're now handing
		 * out the sdcard_rw GID only to trusted apps, we're okay relaxing
+2 −0
Original line number Diff line number Diff line
@@ -304,6 +304,8 @@ static int sdcardfs_show_options(struct vfsmount *mnt, struct seq_file *m,
		seq_printf(m, ",userid=%u", opts->fs_user_id);
	if (opts->gid_derivation)
		seq_puts(m, ",derive_gid");
	if (vfsopts->default_normal)
		seq_puts(m, ",default_normal");
	if (opts->reserved_mb != 0)
		seq_printf(m, ",reserved=%uMB", opts->reserved_mb);