2009-02-04 17:06:58 +03:00
/*
* Copyright ( C ) 2008 IBM Corporation
* Author : Mimi Zohar < zohar @ us . ibm . com >
*
* This program is free software ; you can redistribute it and / or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation , version 2 of the License .
*
* File : integrity_audit . c
* Audit calls for the integrity subsystem
*/
# include <linux/fs.h>
# include <linux/audit.h>
# include "ima.h"
static int ima_audit ;
# ifdef CONFIG_IMA_AUDIT
/* ima_audit_setup - enable informational auditing messages */
static int __init ima_audit_setup ( char * str )
{
unsigned long audit ;
2009-05-05 21:13:10 +04:00
if ( ! strict_strtoul ( str , 0 , & audit ) )
ima_audit = audit ? 1 : 0 ;
2009-02-04 17:06:58 +03:00
return 1 ;
}
__setup ( " ima_audit= " , ima_audit_setup ) ;
# endif
void integrity_audit_msg ( int audit_msgno , struct inode * inode ,
const unsigned char * fname , const char * op ,
const char * cause , int result , int audit_info )
{
struct audit_buffer * ab ;
if ( ! ima_audit & & audit_info = = 1 ) /* Skip informational messages */
return ;
ab = audit_log_start ( current - > audit_context , GFP_KERNEL , audit_msgno ) ;
2009-02-11 19:12:28 +03:00
audit_log_format ( ab , " integrity: pid=%d uid=%u auid=%u ses=%u " ,
2009-05-11 21:59:10 +04:00
current - > pid , current_cred ( ) - > uid ,
2009-02-11 19:12:28 +03:00
audit_get_loginuid ( current ) ,
audit_get_sessionid ( current ) ) ;
2009-02-04 17:06:58 +03:00
audit_log_task_context ( ab ) ;
2009-05-05 21:13:00 +04:00
audit_log_format ( ab , " op= " ) ;
audit_log_string ( ab , op ) ;
audit_log_format ( ab , " cause= " ) ;
audit_log_string ( ab , cause ) ;
2009-02-04 17:06:58 +03:00
audit_log_format ( ab , " comm= " ) ;
audit_log_untrustedstring ( ab , current - > comm ) ;
if ( fname ) {
audit_log_format ( ab , " name= " ) ;
audit_log_untrustedstring ( ab , fname ) ;
}
if ( inode )
audit_log_format ( ab , " dev=%s ino=%lu " ,
inode - > i_sb - > s_id , inode - > i_ino ) ;
2009-02-11 19:12:28 +03:00
audit_log_format ( ab , " res=%d " , ! result ? 0 : 1 ) ;
2009-02-04 17:06:58 +03:00
audit_log_end ( ab ) ;
}