if (rc != 0)
                goto out_digsig;
 
-       if (function != BPRM_CHECK)
-               pathname = ima_d_path(&file->f_path, &pathbuf);
-
+       pathname = !filename ? ima_d_path(&file->f_path, &pathbuf) : filename;
        if (!pathname)
-               pathname = filename;
+               pathname = (const char *)file->f_dentry->d_name.name;
 
        if (action & IMA_MEASURE)
                ima_store_measurement(iint, file, pathname);
 int ima_file_mmap(struct file *file, unsigned long prot)
 {
        if (file && (prot & PROT_EXEC))
-               return process_measurement(file, file->f_dentry->d_name.name,
-                                          MAY_EXEC, MMAP_CHECK);
+               return process_measurement(file, NULL, MAY_EXEC, MMAP_CHECK);
        return 0;
 }
 
 int ima_file_check(struct file *file, int mask)
 {
        ima_rdwr_violation_check(file);
-       return process_measurement(file, file->f_dentry->d_name.name,
+       return process_measurement(file, NULL,
                                 mask & (MAY_READ | MAY_WRITE | MAY_EXEC),
                                 FILE_CHECK);
 }
 #endif
                return 0;       /* We rely on module signature checking */
        }
-       return process_measurement(file, file->f_dentry->d_name.name,
-                                  MAY_EXEC, MODULE_CHECK);
+       return process_measurement(file, NULL, MAY_EXEC, MODULE_CHECK);
 }
 
 static int __init init_ima(void)