Re: [PATCH] get_task_exe_file: check PF_KTHREAD locklessly

From: Andrew Morton
Date: Fri Nov 22 2024 - 01:35:22 EST


On Tue, 19 Nov 2024 15:35:26 +0100 Mateusz Guzik <mjguzik@xxxxxxxxx> wrote:

> Same thing as 8ac5dc66599c ("get_task_mm: check PF_KTHREAD lockless")

We prefer that patches have fuller changelogs, please.

I copied the 8ac5dc66599c changelog text into this patch's changelog.



From: Mateusz Guzik <mjguzik@xxxxxxxxx>
Subject: get_task_exe_file: check PF_KTHREAD locklessly
Date: Tue, 19 Nov 2024 15:35:26 +0100

Same thing as 8ac5dc66599c ("get_task_mm: check PF_KTHREAD lockless")

Nowadays PF_KTHREAD is sticky and it was never protected by ->alloc_lock.
Move the PF_KTHREAD check outside of task_lock() section to make this code
more understandable.

Link: https://lkml.kernel.org/r/20241119143526.704986-1-mjguzik@xxxxxxxxx
Signed-off-by: Mateusz Guzik <mjguzik@xxxxxxxxx>
Acked-by: Oleg Nesterov <oleg@xxxxxxxxxx>
Signed-off-by: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx>
---

kernel/fork.c | 9 +++++----
1 file changed, 5 insertions(+), 4 deletions(-)

--- a/kernel/fork.c~get_task_exe_file-check-pf_kthread-locklessly
+++ a/kernel/fork.c
@@ -1496,12 +1496,13 @@ struct file *get_task_exe_file(struct ta
struct file *exe_file = NULL;
struct mm_struct *mm;

+ if (task->flags & PF_KTHREAD)
+ return NULL;
+
task_lock(task);
mm = task->mm;
- if (mm) {
- if (!(task->flags & PF_KTHREAD))
- exe_file = get_mm_exe_file(mm);
- }
+ if (mm)
+ exe_file = get_mm_exe_file(mm);
task_unlock(task);
return exe_file;
}
_