| From 05d129210f519ccd435702946fcffbf4721fd246 Mon Sep 17 00:00:00 2001 |
| From: Sasha Levin <sashal@kernel.org> |
| Date: Mon, 15 May 2023 14:04:48 +0800 |
| Subject: x86/resctrl: Only show tasks' pid in current pid namespace |
| |
| From: Shawn Wang <shawnwang@linux.alibaba.com> |
| |
| [ Upstream commit 2997d94b5dd0e8b10076f5e0b6f18410c73e28bd ] |
| |
| When writing a task id to the "tasks" file in an rdtgroup, |
| rdtgroup_tasks_write() treats the pid as a number in the current pid |
| namespace. But when reading the "tasks" file, rdtgroup_tasks_show() shows |
| the list of global pids from the init namespace, which is confusing and |
| incorrect. |
| |
| To be more robust, let the "tasks" file only show pids in the current pid |
| namespace. |
| |
| Fixes: e02737d5b826 ("x86/intel_rdt: Add tasks files") |
| Signed-off-by: Shawn Wang <shawnwang@linux.alibaba.com> |
| Signed-off-by: Borislav Petkov (AMD) <bp@alien8.de> |
| Acked-by: Reinette Chatre <reinette.chatre@intel.com> |
| Acked-by: Fenghua Yu <fenghua.yu@intel.com> |
| Tested-by: Reinette Chatre <reinette.chatre@intel.com> |
| Link: https://lore.kernel.org/all/20230116071246.97717-1-shawnwang@linux.alibaba.com/ |
| Signed-off-by: Sasha Levin <sashal@kernel.org> |
| --- |
| arch/x86/kernel/cpu/resctrl/rdtgroup.c | 8 ++++++-- |
| 1 file changed, 6 insertions(+), 2 deletions(-) |
| |
| diff --git a/arch/x86/kernel/cpu/resctrl/rdtgroup.c b/arch/x86/kernel/cpu/resctrl/rdtgroup.c |
| index 6ad33f355861f..61cdd9b1bb6d8 100644 |
| --- a/arch/x86/kernel/cpu/resctrl/rdtgroup.c |
| +++ b/arch/x86/kernel/cpu/resctrl/rdtgroup.c |
| @@ -726,11 +726,15 @@ static ssize_t rdtgroup_tasks_write(struct kernfs_open_file *of, |
| static void show_rdt_tasks(struct rdtgroup *r, struct seq_file *s) |
| { |
| struct task_struct *p, *t; |
| + pid_t pid; |
| |
| rcu_read_lock(); |
| for_each_process_thread(p, t) { |
| - if (is_closid_match(t, r) || is_rmid_match(t, r)) |
| - seq_printf(s, "%d\n", t->pid); |
| + if (is_closid_match(t, r) || is_rmid_match(t, r)) { |
| + pid = task_pid_vnr(t); |
| + if (pid) |
| + seq_printf(s, "%d\n", pid); |
| + } |
| } |
| rcu_read_unlock(); |
| } |
| -- |
| 2.39.2 |
| |