From: Tony Luck <tony.luck@intel.com>
To: Fenghua Yu <fenghuay@nvidia.com>,
Reinette Chatre <reinette.chatre@intel.com>,
Maciej Wieczor-Retman <maciej.wieczor-retman@intel.com>,
Peter Newman <peternewman@google.com>,
James Morse <james.morse@arm.com>,
Babu Moger <babu.moger@amd.com>,
Drew Fustini <dfustini@baylibre.com>,
Dave Martin <Dave.Martin@arm.com>, Chen Yu <yu.c.chen@intel.com>
Cc: Borislav Petkov <bp@alien8.de>,
x86@kernel.org, linux-kernel@vger.kernel.org,
patches@lists.linux.dev, Tony Luck <tony.luck@intel.com>
Subject: [RFC PATCH] fs/resctrl: Fix use-after-free during unmount
Date: Wed, 13 May 2026 15:40:44 -0700 [thread overview]
Message-ID: <20260513224044.17167-1-tony.luck@intel.com> (raw)
Sashiko reported[1] this issue:
During unmount or failure teardown, resctrl_fs_teardown() calls
mon_put_kn_priv() (which frees all mon_data structures) followed
by rdtgroup_destroy_root() (which destroys kernfs nodes). However, the
RDT_DELETED flag is never set for rdtgroup_default.
If a concurrent reader (e.g., rdtgroup_mondata_show()) invokes
rdtgroup_kn_lock_live(), it drops kernfs active protection and blocks on
rdtgroup_mutex. resctrl_fs_teardown() (holding the mutex) proceeds to free
the private data and destroy the nodes without waiting for the reader.
When the mutex is released, the reader wakes up, observes that RDT_DELETED is
not set for the default group, and dereferences the already-freed of->kn->priv
pointer.
Set RDT_DELETED for the default group (if there are any tasks waiting).
Signed-off-by: Tony Luck <tony.luck@intel.com>
Link: https://sashiko.dev/#/patchset/20260508182143.14592-1-tony.luck%40intel.com?part=2 [1]
---
Yet another side-quest from Sashiko. RFC for some human eyes before I
add to my series and post a new version;
1) Is this real? It looks like it is to me.
2) Is my fix reasonable?
3) Better way to fix it?
fs/resctrl/rdtgroup.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/fs/resctrl/rdtgroup.c b/fs/resctrl/rdtgroup.c
index eac7e4f8574d..668ebe0b0ec6 100644
--- a/fs/resctrl/rdtgroup.c
+++ b/fs/resctrl/rdtgroup.c
@@ -594,7 +594,8 @@ static ssize_t rdtgroup_cpus_write(struct kernfs_open_file *of,
static void rdtgroup_remove(struct rdtgroup *rdtgrp)
{
kernfs_put(rdtgrp->kn);
- kfree(rdtgrp);
+ if (rdtgrp != &rdtgroup_default)
+ kfree(rdtgrp);
}
static void _update_task_closid_rmid(void *task)
@@ -2965,6 +2966,8 @@ static void resctrl_fs_teardown(void)
mon_put_kn_priv();
rdt_pseudo_lock_release();
rdtgroup_default.mode = RDT_MODE_SHAREABLE;
+ if (atomic_read(&rdtgroup_default.waitcount) != 0)
+ rdtgroup_default.flags = RDT_DELETED;
closid_exit();
schemata_list_destroy();
rdtgroup_destroy_root();
@@ -4291,6 +4294,7 @@ static int rdtgroup_setup_root(struct rdt_fs_context *ctx)
ctx->kfc.root = rdt_root;
rdtgroup_default.kn = kernfs_root_to_node(rdt_root);
+ rdtgroup_default.flags = 0;
return 0;
}
--
2.54.0
next reply other threads:[~2026-05-13 22:40 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-05-13 22:40 Tony Luck [this message]
2026-05-14 21:45 ` [RFC PATCH] fs/resctrl: Fix use-after-free during unmount Reinette Chatre
2026-05-14 22:23 ` Luck, Tony
2026-05-14 22:44 ` Reinette Chatre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20260513224044.17167-1-tony.luck@intel.com \
--to=tony.luck@intel.com \
--cc=Dave.Martin@arm.com \
--cc=babu.moger@amd.com \
--cc=bp@alien8.de \
--cc=dfustini@baylibre.com \
--cc=fenghuay@nvidia.com \
--cc=james.morse@arm.com \
--cc=linux-kernel@vger.kernel.org \
--cc=maciej.wieczor-retman@intel.com \
--cc=patches@lists.linux.dev \
--cc=peternewman@google.com \
--cc=reinette.chatre@intel.com \
--cc=x86@kernel.org \
--cc=yu.c.chen@intel.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.