Patch "mm: introduce get_task_exe_file" has been added to the 4.4-stable tree
Subsystems (5)
This is a note to let you know that I've just added the patch titled
mm: introduce get_task_exe_file
to the 4.4-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
mm-introduce-get_task_exe_file.patch
and it can be found in the queue-4.4 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
cd81a9170e69e018bbaba547c1fd85a585f5697aMon Sep 17 00:00:00 2001
From: Mateusz Guzik <[email protected]>
Date: Tue, 23 Aug 2016 16:20:38 +0200
Subject: mm: introduce get_task_exe_file
From: Mateusz Guzik <[email protected]>
commit cd81a9170e69e018bbaba547c1fd85a585f5697a upstream.
For more convenient access if one has a pointer to the task.
As a minor nit take advantage of the fact that only task lock + rcu are needed to safely grab ->exe_file. This saves mm refcount dance.
Use the helper in proc_exe_link.
--- fs/proc/base.c | 7 +------ include/linux/mm.h | 1 + kernel/fork.c | 23 +++++++++++++++++++++++ 3 files changed, 25 insertions(+), 6 deletions(-)
fs/proc/base.c +1 -6
@@ -1545,18 +1545,13 @@ static const struct file_operations procstatic int proc_exe_link (struct dentry *dentry,struct path *exe_path) {struct task_struct *task; -struct mm_struct *mm;struct file *exe_file; task =get_proc_task (d_inode (dentry));if (!task)return -ENOENT ; - mm =get_task_mm (task); + exe_file =get_task_exe_file (task);put_task_struct (task); -if (!mm) -return -ENOENT ; - exe_file =get_mm_exe_file (mm); -mmput (mm);if (exe_file) { *exe_path = exe_file->f_path;path_get (&exe_file->f_path);
include/linux/mm.h +1 -0
@@ -1898,6 +1898,7 @@ extern void mm_drop_all_locks(struct mm_extern void set_mm_exe_file (struct mm_struct *mm,struct file *new_exe_file);extern struct file *get_mm_exe_file (struct mm_struct *mm); +extern struct file *get_task_exe_file (struct task_struct *task);extern int may_expand_vm (struct mm_struct *mm,unsigned long npages); extern struct vm_area_struct *_install_special_mapping(struct mm_struct *mm,
kernel/fork.c +23 -0
@@ -764,6 +764,29 @@ struct file *get_mm_exe_file(struct mm_sEXPORT_SYMBOL (get_mm_exe_file);/** +* get_task_exe_file - acquire a reference to the task's executable file +* +* Returns %NULL if task's mm (if any) has no associated executable file or +* this is a kernel thread with borrowed mm (see the comment above get_task_mm). +* User must release file via fput(). +*/ +struct file *get_task_exe_file (struct task_struct *task) +{ +struct file *exe_file =NULL ; +struct mm_struct *mm; + +task_lock (task); + mm = task->mm; +if (mm) { +if (!(task->flags &PF_KTHREAD )) + exe_file =get_mm_exe_file (mm); + } +task_unlock (task); +return exe_file; +} +EXPORT_SYMBOL (get_task_exe_file); + +/** * get_task_mm - acquire a reference to the task's mm * * Returns %NULL if the task has no mm. Checks PF_KTHREAD (meaning
Patches currently in stable-queue which might be from [email protected] are
queue-4.4/mm-introduce-get_task_exe_file.patch queue-4.4/audit-fix-exe_file-access-in-audit_exe_compare.patch