|
@@ -773,6 +773,29 @@ struct file *get_mm_exe_file(struct mm_struct *mm)
|
|
|
}
|
|
|
EXPORT_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
|
|
|
*
|