@ -43,6 +43,7 @@
# define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
# include <linux/file.h>
# include <linux/init.h>
# include <linux/types.h>
# include <linux/atomic.h>
@ -107,6 +108,7 @@ static u32 audit_rate_limit;
* When set to zero , this means unlimited . */
static u32 audit_backlog_limit = 64 ;
# define AUDIT_BACKLOG_WAIT_TIME (60 * HZ)
static u32 audit_backlog_wait_time_master = AUDIT_BACKLOG_WAIT_TIME ;
static u32 audit_backlog_wait_time = AUDIT_BACKLOG_WAIT_TIME ;
static u32 audit_backlog_wait_overflow = 0 ;
@ -338,13 +340,13 @@ static int audit_set_backlog_limit(u32 limit)
static int audit_set_backlog_wait_time ( u32 timeout )
{
return audit_do_config_change ( " audit_backlog_wait_time " ,
& audit_backlog_wait_time , timeout ) ;
& audit_backlog_wait_time_master , timeout ) ;
}
static int audit_set_enabled ( u32 state )
{
int rc ;
if ( state < AUDIT_OFF | | state > AUDIT_LOCKED )
if ( state > AUDIT_LOCKED )
return - EINVAL ;
rc = audit_do_config_change ( " audit_enabled " , & audit_enabled , state ) ;
@ -663,7 +665,7 @@ static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type)
case AUDIT_MAKE_EQUIV :
/* Only support auditd and auditctl in initial pid namespace
* for now . */
if ( ( task_active_pid_ns ( current ) ! = & init_pid_ns ) )
if ( task_active_pid_ns ( current ) ! = & init_pid_ns )
return - EPERM ;
if ( ! netlink_capable ( skb , CAP_AUDIT_CONTROL ) )
@ -834,7 +836,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
s . lost = atomic_read ( & audit_lost ) ;
s . backlog = skb_queue_len ( & audit_skb_queue ) ;
s . feature_bitmap = AUDIT_FEATURE_BITMAP_ALL ;
s . backlog_wait_time = audit_backlog_wait_time ;
s . backlog_wait_time = audit_backlog_wait_time_master ;
audit_send_reply ( skb , seq , AUDIT_GET , 0 , 0 , & s , sizeof ( s ) ) ;
break ;
}
@ -877,8 +879,7 @@ static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
if ( s . mask & AUDIT_STATUS_BACKLOG_WAIT_TIME ) {
if ( sizeof ( s ) > ( size_t ) nlh - > nlmsg_len )
return - EINVAL ;
if ( s . backlog_wait_time < 0 | |
s . backlog_wait_time > 10 * AUDIT_BACKLOG_WAIT_TIME )
if ( s . backlog_wait_time > 10 * AUDIT_BACKLOG_WAIT_TIME )
return - EINVAL ;
err = audit_set_backlog_wait_time ( s . backlog_wait_time ) ;
if ( err < 0 )
@ -1385,7 +1386,8 @@ struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,
return NULL ;
}
audit_backlog_wait_time = AUDIT_BACKLOG_WAIT_TIME ;
if ( ! reserve )
audit_backlog_wait_time = audit_backlog_wait_time_master ;
ab = audit_buffer_alloc ( ctx , gfp_mask , type ) ;
if ( ! ab ) {
@ -1759,7 +1761,7 @@ void audit_log_name(struct audit_context *context, struct audit_names *n,
} else
audit_log_format ( ab , " name=(null) " ) ;
if ( n - > ino ! = ( unsigned long ) - 1 ) {
if ( n - > ino ! = ( unsigned long ) - 1 )
audit_log_format ( ab , " inode=%lu "
" dev=%02x:%02x mode=%#ho "
" ouid=%u ogid=%u rdev=%02x:%02x " ,
@ -1771,7 +1773,6 @@ void audit_log_name(struct audit_context *context, struct audit_names *n,
from_kgid ( & init_user_ns , n - > gid ) ,
MAJOR ( n - > rdev ) ,
MINOR ( n - > rdev ) ) ;
}
if ( n - > osid ! = 0 ) {
char * ctx = NULL ;
u32 len ;
@ -1838,11 +1839,29 @@ error_path:
}
EXPORT_SYMBOL ( audit_log_task_context ) ;
void audit_log_d_path_exe ( struct audit_buffer * ab ,
struct mm_struct * mm )
{
struct file * exe_file ;
if ( ! mm )
goto out_null ;
exe_file = get_mm_exe_file ( mm ) ;
if ( ! exe_file )
goto out_null ;
audit_log_d_path ( ab , " exe= " , & exe_file - > f_path ) ;
fput ( exe_file ) ;
return ;
out_null :
audit_log_format ( ab , " exe=(null) " ) ;
}
void audit_log_task_info ( struct audit_buffer * ab , struct task_struct * tsk )
{
const struct cred * cred ;
char comm [ sizeof ( tsk - > comm ) ] ;
struct mm_struct * mm = tsk - > mm ;
char * tty ;
if ( ! ab )
@ -1878,13 +1897,7 @@ void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk)
audit_log_format ( ab , " comm= " ) ;
audit_log_untrustedstring ( ab , get_task_comm ( comm , tsk ) ) ;
if ( mm ) {
down_read ( & mm - > mmap_sem ) ;
if ( mm - > exe_file )
audit_log_d_path ( ab , " exe= " , & mm - > exe_file - > f_path ) ;
up_read ( & mm - > mmap_sem ) ;
} else
audit_log_format ( ab , " exe=(null) " ) ;
audit_log_d_path_exe ( ab , tsk - > mm ) ;
audit_log_task_context ( ab ) ;
}
EXPORT_SYMBOL ( audit_log_task_info ) ;