[RFC][PATCH v2 1/9] ima: pass filename to ima_rdwr_violation_check()
Mimi Zohar
zohar at linux.vnet.ibm.com
Fri Dec 1 17:38:05 UTC 2017
On Thu, 2017-11-30 at 11:56 +0100, Roberto Sassu wrote:
> ima_rdwr_violation_check() retrieves the full path of a measured file by
> calling ima_d_path(). If process_measurement() calls this function, it
> reuses the pointer and passes it to the functions to measure/appraise/audit
> an accessed file.
>
> After commit bc15ed663e7e ("ima: fix ima_d_path() possible race with
> rename"), ima_d_path() first tries to retrieve the full path by calling
> d_absolute_path() and, if there is an error, copies the dentry name to the
> buffer passed as argument.
>
> However, ima_rdwr_violation_check() passes to ima_d_path() the pointer of a
> local variable. process_measurement() might be reusing the pointer to an
> area in the stack which may have been already overwritten after
> ima_rdwr_violation_check() returned.
>
> Correct this issue by passing to ima_rdwr_violation_check() the pointer of
> a buffer declared in process_measurement().
>
> Fixes: bc15ed663e7e ("ima: fix ima_d_path() possible race with rename")
> Signed-off-by: Roberto Sassu <roberto.sassu at huawei.com>
Thanks!
> ---
> security/integrity/ima/ima_main.c | 6 +++---
> 1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/security/integrity/ima/ima_main.c b/security/integrity/ima/ima_main.c
> index 294b2fe69334..5a7321bc325c 100644
> --- a/security/integrity/ima/ima_main.c
> +++ b/security/integrity/ima/ima_main.c
> @@ -84,10 +84,10 @@ static void ima_rdwr_violation_check(struct file *file,
> struct integrity_iint_cache *iint,
> int must_measure,
> char **pathbuf,
> - const char **pathname)
> + const char **pathname,
> + char *filename)
> {
> struct inode *inode = file_inode(file);
> - char filename[NAME_MAX];
> fmode_t mode = file->f_mode;
> bool send_tomtou = false, send_writers = false;
>
> @@ -205,7 +205,7 @@ static int process_measurement(struct file *file, const struct cred *cred,
>
> if (violation_check) {
> ima_rdwr_violation_check(file, iint, action & IMA_MEASURE,
> - &pathbuf, &pathname);
> + &pathbuf, &pathname, filename);
> if (!action) {
> rc = 0;
> goto out_free;
--
To unsubscribe from this list: send the line "unsubscribe linux-security-module" in
the body of a message to majordomo at vger.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
More information about the Linux-security-module-archive
mailing list