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

Commit 57a853e0 authored by Todd Kjos's avatar Todd Kjos
Browse files

ANDROID: make sure proc mount options are applied



Android relies on the "hidepid" mount option for /proc on
the 2nd mount, however the upstream kernel requires options
on the first mount and ignores options afterwards.

In prevous Android kernels, this was fixed by reverting
upstream commit e94591d0 ("proc: Convert proc_mount
to use mount_ns."). The upstream code has now been
refactored to the point that a new fix is needed. This
patch applies mount options during proc_get_tree() to
ensure the most recently parsed options are applied.

Bug: 145626724
Test: atest CtsOsTestCases:android.os.cts.EnvironmentTest#testHidePid2
Change-Id: I3d402f98e826e2f03ad366da7d05b3eeaaa90c26
Signed-off-by: default avatarTodd Kjos <tkjos@google.com>
parent 21d4cd8d
Loading
Loading
Loading
Loading
+4 −4
Original line number Diff line number Diff line
@@ -82,8 +82,7 @@ static int proc_parse_param(struct fs_context *fc, struct fs_parameter *param)
	return 0;
}

static void proc_apply_options(struct super_block *s,
			       struct fs_context *fc,
static void proc_apply_options(struct fs_context *fc,
			       struct pid_namespace *pid_ns,
			       struct user_namespace *user_ns)
{
@@ -101,7 +100,7 @@ static int proc_fill_super(struct super_block *s, struct fs_context *fc)
	struct inode *root_inode;
	int ret;

	proc_apply_options(s, fc, pid_ns, current_user_ns());
	proc_apply_options(fc, pid_ns, current_user_ns());

	/* User space would break if executables or devices appear on proc */
	s->s_iflags |= SB_I_USERNS_VISIBLE | SB_I_NOEXEC | SB_I_NODEV;
@@ -149,7 +148,7 @@ static int proc_reconfigure(struct fs_context *fc)

	sync_filesystem(sb);

	proc_apply_options(sb, fc, pid, current_user_ns());
	proc_apply_options(fc, pid, current_user_ns());
	return 0;
}

@@ -157,6 +156,7 @@ static int proc_get_tree(struct fs_context *fc)
{
	struct proc_fs_context *ctx = fc->fs_private;

	proc_apply_options(fc, ctx->pid_ns, current_user_ns());
	return get_tree_keyed(fc, proc_fill_super, ctx->pid_ns);
}