Skip to contentSkip to conversation

FAILED: patch "[PATCH] tracefs: Only clobber mode/uid/gid on remount if asked" failed to apply to 5.15-stable tree

PATCH [email protected] 2 participants 4 messages Sep 9, 2022 – Sep 13, 2022

Subsystems (2)
lore
Share & tools
lore

[email protected]

author maintainer
#0 lore raw

The patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

Possible dependencies:

47311db8e8f3 ("tracefs: Only clobber mode/uid/gid on remount if asked") 851e99ebeec3 ("tracefs: Set the group ownership in apply_options() not parse_options()")

thanks,

greg k-h

------------------ original commit in Linus's tree ------------------

From 47311db8e8f33011d90dee76b39c8886120cdda4 Mon Sep 17 00:00:00 2001
From: Brian Norris <[email protected]>
Date: Fri, 26 Aug 2022 17:44:17 -0700
Subject: [PATCH] tracefs: Only clobber mode/uid/gid on remount if asked

Users may have explicitly configured their tracefs permissions; we shouldn't overwrite those just because a second mount appeared.

Only clobber if the options were provided at mount time.

Note: the previous behavior was especially surprising in the presence of automounted /sys/kernel/debug/tracing/.

Existing behavior:

## Pre-existing status: tracefs is 0755.

  # stat -c '%A' /sys/kernel/tracing/
  drwxr-xr-x

## (Re)trigger the automount.

  # umount /sys/kernel/debug/tracing
  # stat -c '%A' /sys/kernel/debug/tracing/.
  drwx------

## Unexpected: the automount changed mode for other mount instances.

  # stat -c '%A' /sys/kernel/tracing/
  drwx------

New behavior (after this change):

## Pre-existing status: tracefs is 0755.

  # stat -c '%A' /sys/kernel/tracing/
  drwxr-xr-x

## (Re)trigger the automount.

  # umount /sys/kernel/debug/tracing
  # stat -c '%A' /sys/kernel/debug/tracing/.
  drwxr-xr-x

## Expected: the automount does not change other mount instances.

  # stat -c '%A' /sys/kernel/tracing/
  drwxr-xr-x
Fixes 4282d60689d4f ("tracefs: Add new tracefs file system")
fs/tracefs/inode.c +23 -8
index 81d26abf486f..da85b3979195 100644
@@ -141,6 +141,8 @@ struct tracefs_mount_opts {
 	kuid_t uid;
 	kgid_t gid;
 	umode_t mode;
+	/* Opt_* bitfield. */
+	unsigned int opts;
 };
 
 enum {
@@ -241,6 +243,7 @@ static int tracefs_parse_options(char *data, struct tracefs_mount_opts *opts)
 	kgid_t gid;
 	char *p;
 
+	opts->opts = 0;
 	opts->mode = TRACEFS_DEFAULT_MODE;
 
 	while ((p = strsep(&data, ",")) != NULL) {
@@ -275,24 +278,36 @@ static int tracefs_parse_options(char *data, struct tracefs_mount_opts *opts)
 		 * but traditionally tracefs has ignored all mount options
 		 */
 		}
+
+		opts->opts |= BIT(token);
 	}
 
 	return 0;
 }
 
-static int tracefs_apply_options(struct super_block *sb)
+static int tracefs_apply_options(struct super_block *sb, bool remount)
 {
 	struct tracefs_fs_info *fsi = sb->s_fs_info;
 	struct inode *inode = d_inode(sb->s_root);
 	struct tracefs_mount_opts *opts = &fsi->mount_opts;
 
-	inode->i_mode &= ~S_IALLUGO;
-	inode->i_mode |= opts->mode;
+	/*
+	 * On remount, only reset mode/uid/gid if they were provided as mount
+	 * options.
+	 */
+
+	if (!remount || opts->opts & BIT(Opt_mode)) {
+		inode->i_mode &= ~S_IALLUGO;
+		inode->i_mode |= opts->mode;
+	}
 
-	inode->i_uid = opts->uid;
+	if (!remount || opts->opts & BIT(Opt_uid))
+		inode->i_uid = opts->uid;
 
-	/* Set all the group ids to the mount option */
-	set_gid(sb->s_root, opts->gid);
+	if (!remount || opts->opts & BIT(Opt_gid)) {
+		/* Set all the group ids to the mount option */
+		set_gid(sb->s_root, opts->gid);
+	}
 
 	return 0;
 }
@@ -307,7 +322,7 @@ static int tracefs_remount(struct super_block *sb, int *flags, char *data)
 	if (err)
 		goto fail;
 
-	tracefs_apply_options(sb);
+	tracefs_apply_options(sb, true);
 
 fail:
 	return err;
@@ -359,7 +374,7 @@ static int trace_fill_super(struct super_block *sb, void *data, int silent)
 
 	sb->s_op = &tracefs_super_operations;
 
-	tracefs_apply_options(sb);
+	tracefs_apply_options(sb, false);
 
 	return 0;
 
#1 lore raw

Hi Greg,

Quoted 4 lines · On Fri, Sep 9, 2022 at 11:31 AM <[email protected]> wrote:

The patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

Did something go wrong in your automation? The same patch applies cleanly to me (currently, on top of v5.15.67).

Quoted 3 lines

Possible dependencies:

47311db8e8f3 ("tracefs: Only clobber mode/uid/gid on remount if asked")

That's $subject patch. OK, so not that one.

Quoted 1 line

851e99ebeec3 ("tracefs: Set the group ownership in apply_options() not parse_options()")

That one *is* a dependency, but it's already backported to 5.15.y as of several months ago:

commit 6db927ce66ac68bf732f0b14190791458e75047a

Author:     Steven Rostedt (Google) <[email protected]>
AuthorDate: Fri Feb 25 15:34:26 2022 -0500
Commit:     Greg Kroah-Hartman <[email protected]>
CommitDate: Wed Mar 2 11:48:05 2022 +0100

tracefs: Set the group ownership in apply_options() not parse_options()

commit 851e99ebeec3f4a672bb5010cf1ece095acee447 upstream.

So I'm not sure what to do to fix the backporting, other than ping back here.

I think the same applies to the 5.10.y rejection notice, and possibly a few others.

Brian

author maintainer
#2 lore raw
Quoted 28 lines · Brian Norris

Hi Greg,

Quoted 4 lines · On Fri, Sep 9, 2022 at 11:31 AM <[email protected]> wrote:

The patch below does not apply to the 5.15-stable tree.
If someone wants it applied there, or to any other stable or longterm tree, then please email the backport, including the original git commit id to <[email protected]>.

Did something go wrong in your automation? The same patch applies cleanly to me (currently, on top of v5.15.67).

Quoted 3 lines

Possible dependencies:

47311db8e8f3 ("tracefs: Only clobber mode/uid/gid on remount if asked")

That's $subject patch. OK, so not that one.

Quoted 1 line

851e99ebeec3 ("tracefs: Set the group ownership in apply_options() not parse_options()")

That one *is* a dependency, but it's already backported to 5.15.y as of several months ago:

commit 6db927ce66ac68bf732f0b14190791458e75047a

Author:     Steven Rostedt (Google) <[email protected]>
AuthorDate: Fri Feb 25 15:34:26 2022 -0500
Commit:     Greg Kroah-Hartman <[email protected]>
CommitDate: Wed Mar 2 11:48:05 2022 +0100
Quoted 8 lines

tracefs: Set the group ownership in apply_options() not parse_options()

commit 851e99ebeec3f4a672bb5010cf1ece095acee447 upstream.

So I'm not sure what to do to fix the backporting, other than ping back here.

I think the same applies to the 5.10.y rejection notice, and possibly a few others.

Here is what patch says:

Applying tracefs-only-clobber-mode-uid-gid-on-remount-if-asked.patch to linux-5.15.y Applying patch tracefs-only-clobber-mode-uid-gid-on-remount-if-asked.patch patching file fs/tracefs/inode.c
Hunk #3 FAILED at 278.
1 out of 5 hunks FAILED -- rejects in file fs/tracefs/inode.c
Patch tracefs-only-clobber-mode-uid-gid-on-remount-if-asked.patch does not apply (enforce with -f) quilt returned 1, with 0 fuzz and 1 rejects

How did you apply the patch to 5.15.y that worked?

thanks,

greg k-h

#3 lore raw
Quoted 11 lines · Greg Kroah-Hartman

Here is what patch says:

Applying tracefs-only-clobber-mode-uid-gid-on-remount-if-asked.patch to linux-5.15.y Applying patch tracefs-only-clobber-mode-uid-gid-on-remount-if-asked.patch patching file fs/tracefs/inode.c
Hunk #3 FAILED at 278.
1 out of 5 hunks FAILED -- rejects in file fs/tracefs/inode.c
Patch tracefs-only-clobber-mode-uid-gid-on-remount-if-asked.patch does not apply (enforce with -f) quilt returned 1, with 0 fuzz and 1 rejects

How did you apply the patch to 5.15.y that worked?

Hmm, I suppose I have 'git am' doing 3-way merges for me, which resolve OK:

$ curl https://lore.kernel.org/all/[email protected]/raw | git am -
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
100  6614  100  6614    0     0  27768      0 --:--:-- --:--:-- --:--:-- 27789
Applying: FAILED: patch "[PATCH] tracefs: Only clobber mode/uid/gid on
remount if asked" failed to apply to 5.15-stable tree
Using index info to reconstruct a base tree...
M fs/tracefs/inode.c
Falling back to patching base and 3-way merge...
Auto-merging fs/tracefs/inode.c

And originally, I guess I was testing 'git cherry-pick', not literally this patch. That also does some "auto-merging":

$ git cherry-pick 47311db8e8f33011d90dee76b39c8886120cdda4
Auto-merging fs/tracefs/inode.c
[detached HEAD e9f574cc9df9] tracefs: Only clobber mode/uid/gid on
remount if asked
 Date: Fri Aug 26 17:44:17 2022 -0700
 1 file changed, 23 insertions(+), 8 deletions(-)

I'll generate a clean patch based on the above, but it'll look awfully similar. (I think there's a single line of context that looks different, a few lines away.) Stay tuned.

Brian