Merge branch 'stable-4.8' of git://git.infradead.org/users/pcmoore/audit
Pull audit fixes from Paul Moore: "Two small patches to fix some bugs with the audit-by-executable functionality we introduced back in v4.3 (both patches are marked for the stable folks)" * 'stable-4.8' of git://git.infradead.org/users/pcmoore/audit: audit: fix exe_file access in audit_exe_compare mm: introduce get_task_exe_file
This commit is contained in:
@@ -19,6 +19,7 @@
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#include <linux/file.h>
|
||||
#include <linux/kernel.h>
|
||||
#include <linux/audit.h>
|
||||
#include <linux/kthread.h>
|
||||
@@ -544,10 +545,11 @@ int audit_exe_compare(struct task_struct *tsk, struct audit_fsnotify_mark *mark)
|
||||
unsigned long ino;
|
||||
dev_t dev;
|
||||
|
||||
rcu_read_lock();
|
||||
exe_file = rcu_dereference(tsk->mm->exe_file);
|
||||
exe_file = get_task_exe_file(tsk);
|
||||
if (!exe_file)
|
||||
return 0;
|
||||
ino = exe_file->f_inode->i_ino;
|
||||
dev = exe_file->f_inode->i_sb->s_dev;
|
||||
rcu_read_unlock();
|
||||
fput(exe_file);
|
||||
return audit_mark_compare(mark, ino, dev);
|
||||
}
|
||||
|
@@ -798,6 +798,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
|
||||
*
|
||||
|
Verwijs in nieuw issue
Block a user