Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c4cc75c3 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull audit changes from Eric Paris:
 "Al used to send pull requests every couple of years but he told me to
  just start pushing them to you directly.

  Our touching outside of core audit code is pretty straight forward.  A
  couple of interface changes which hit net/.  A simple argument bug
  calling audit functions in namei.c and the removal of some assembly
  branch prediction code on ppc"

* git://git.infradead.org/users/eparis/audit: (31 commits)
  audit: fix message spacing printing auid
  Revert "audit: move kaudit thread start from auditd registration to kaudit init"
  audit: vfs: fix audit_inode call in O_CREAT case of do_last
  audit: Make testing for a valid loginuid explicit.
  audit: fix event coverage of AUDIT_ANOM_LINK
  audit: use spin_lock in audit_receive_msg to process tty logging
  audit: do not needlessly take a lock in tty_audit_exit
  audit: do not needlessly take a spinlock in copy_signal
  audit: add an option to control logging of passwords with pam_tty_audit
  audit: use spin_lock_irqsave/restore in audit tty code
  helper for some session id stuff
  audit: use a consistent audit helper to log lsm information
  audit: push loginuid and sessionid processing down
  audit: stop pushing loginid, uid, sessionid as arguments
  audit: remove the old depricated kernel interface
  audit: make validity checking generic
  audit: allow checking the type of audit message in the user filter
  audit: fix build break when AUDIT_DEBUG == 2
  audit: remove duplicate export of audit_enabled
  Audit: do not print error when LSMs disabled
  ...
parents 2dbd3cac 2a0b4be6
Loading
Loading
Loading
Loading
+1 −1
Original line number Original line Diff line number Diff line
@@ -150,7 +150,7 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
	CURRENT_THREAD_INFO(r11, r1)
	CURRENT_THREAD_INFO(r11, r1)
	ld	r10,TI_FLAGS(r11)
	ld	r10,TI_FLAGS(r11)
	andi.	r11,r10,_TIF_SYSCALL_T_OR_A
	andi.	r11,r10,_TIF_SYSCALL_T_OR_A
	bne-	syscall_dotrace
	bne	syscall_dotrace
.Lsyscall_dotrace_cont:
.Lsyscall_dotrace_cont:
	cmpldi	0,r0,NR_syscalls
	cmpldi	0,r0,NR_syscalls
	bge-	syscall_enosys
	bge-	syscall_enosys
+45 −59
Original line number Original line Diff line number Diff line
@@ -60,24 +60,22 @@ static void tty_audit_buf_put(struct tty_audit_buf *buf)
		tty_audit_buf_free(buf);
		tty_audit_buf_free(buf);
}
}


static void tty_audit_log(const char *description, struct task_struct *tsk,
static void tty_audit_log(const char *description, int major, int minor,
			  kuid_t loginuid, unsigned sessionid, int major,
			  unsigned char *data, size_t size)
			  int minor, unsigned char *data, size_t size)
{
{
	struct audit_buffer *ab;
	struct audit_buffer *ab;
	struct task_struct *tsk = current;
	uid_t uid = from_kuid(&init_user_ns, task_uid(tsk));
	uid_t loginuid = from_kuid(&init_user_ns, audit_get_loginuid(tsk));
	u32 sessionid = audit_get_sessionid(tsk);


	ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_TTY);
	ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_TTY);
	if (ab) {
	if (ab) {
		char name[sizeof(tsk->comm)];
		char name[sizeof(tsk->comm)];
		kuid_t uid = task_uid(tsk);


		audit_log_format(ab, "%s pid=%u uid=%u auid=%u ses=%u major=%d"
		audit_log_format(ab, "%s pid=%u uid=%u auid=%u ses=%u "
				 " minor=%d comm=", description, tsk->pid, uid,
				 "major=%d minor=%d comm=", description,
				 loginuid, sessionid, major, minor);
				 tsk->pid,
				 from_kuid(&init_user_ns, uid),
				 from_kuid(&init_user_ns, loginuid),
				 sessionid,
				 major, minor);
		get_task_comm(name, tsk);
		get_task_comm(name, tsk);
		audit_log_untrustedstring(ab, name);
		audit_log_untrustedstring(ab, name);
		audit_log_format(ab, " data=");
		audit_log_format(ab, " data=");
@@ -90,11 +88,9 @@ static void tty_audit_log(const char *description, struct task_struct *tsk,
 *	tty_audit_buf_push	-	Push buffered data out
 *	tty_audit_buf_push	-	Push buffered data out
 *
 *
 *	Generate an audit message from the contents of @buf, which is owned by
 *	Generate an audit message from the contents of @buf, which is owned by
 *	@tsk with @loginuid.  @buf->mutex must be locked.
 *	the current task.  @buf->mutex must be locked.
 */
 */
static void tty_audit_buf_push(struct task_struct *tsk, kuid_t loginuid,
static void tty_audit_buf_push(struct tty_audit_buf *buf)
			       unsigned int sessionid,
			       struct tty_audit_buf *buf)
{
{
	if (buf->valid == 0)
	if (buf->valid == 0)
		return;
		return;
@@ -102,24 +98,10 @@ static void tty_audit_buf_push(struct task_struct *tsk, kuid_t loginuid,
		buf->valid = 0;
		buf->valid = 0;
		return;
		return;
	}
	}
	tty_audit_log("tty", tsk, loginuid, sessionid, buf->major, buf->minor,
	tty_audit_log("tty", buf->major, buf->minor, buf->data, buf->valid);
		      buf->data, buf->valid);
	buf->valid = 0;
	buf->valid = 0;
}
}


/**
 *	tty_audit_buf_push_current	-	Push buffered data out
 *
 *	Generate an audit message from the contents of @buf, which is owned by
 *	the current task.  @buf->mutex must be locked.
 */
static void tty_audit_buf_push_current(struct tty_audit_buf *buf)
{
	kuid_t auid = audit_get_loginuid(current);
	unsigned int sessionid = audit_get_sessionid(current);
	tty_audit_buf_push(current, auid, sessionid, buf);
}

/**
/**
 *	tty_audit_exit	-	Handle a task exit
 *	tty_audit_exit	-	Handle a task exit
 *
 *
@@ -130,15 +112,13 @@ void tty_audit_exit(void)
{
{
	struct tty_audit_buf *buf;
	struct tty_audit_buf *buf;


	spin_lock_irq(&current->sighand->siglock);
	buf = current->signal->tty_audit_buf;
	buf = current->signal->tty_audit_buf;
	current->signal->tty_audit_buf = NULL;
	current->signal->tty_audit_buf = NULL;
	spin_unlock_irq(&current->sighand->siglock);
	if (!buf)
	if (!buf)
		return;
		return;


	mutex_lock(&buf->mutex);
	mutex_lock(&buf->mutex);
	tty_audit_buf_push_current(buf);
	tty_audit_buf_push(buf);
	mutex_unlock(&buf->mutex);
	mutex_unlock(&buf->mutex);


	tty_audit_buf_put(buf);
	tty_audit_buf_put(buf);
@@ -151,9 +131,8 @@ void tty_audit_exit(void)
 */
 */
void tty_audit_fork(struct signal_struct *sig)
void tty_audit_fork(struct signal_struct *sig)
{
{
	spin_lock_irq(&current->sighand->siglock);
	sig->audit_tty = current->signal->audit_tty;
	sig->audit_tty = current->signal->audit_tty;
	spin_unlock_irq(&current->sighand->siglock);
	sig->audit_tty_log_passwd = current->signal->audit_tty_log_passwd;
}
}


/**
/**
@@ -163,20 +142,21 @@ void tty_audit_tiocsti(struct tty_struct *tty, char ch)
{
{
	struct tty_audit_buf *buf;
	struct tty_audit_buf *buf;
	int major, minor, should_audit;
	int major, minor, should_audit;
	unsigned long flags;


	spin_lock_irq(&current->sighand->siglock);
	spin_lock_irqsave(&current->sighand->siglock, flags);
	should_audit = current->signal->audit_tty;
	should_audit = current->signal->audit_tty;
	buf = current->signal->tty_audit_buf;
	buf = current->signal->tty_audit_buf;
	if (buf)
	if (buf)
		atomic_inc(&buf->count);
		atomic_inc(&buf->count);
	spin_unlock_irq(&current->sighand->siglock);
	spin_unlock_irqrestore(&current->sighand->siglock, flags);


	major = tty->driver->major;
	major = tty->driver->major;
	minor = tty->driver->minor_start + tty->index;
	minor = tty->driver->minor_start + tty->index;
	if (buf) {
	if (buf) {
		mutex_lock(&buf->mutex);
		mutex_lock(&buf->mutex);
		if (buf->major == major && buf->minor == minor)
		if (buf->major == major && buf->minor == minor)
			tty_audit_buf_push_current(buf);
			tty_audit_buf_push(buf);
		mutex_unlock(&buf->mutex);
		mutex_unlock(&buf->mutex);
		tty_audit_buf_put(buf);
		tty_audit_buf_put(buf);
	}
	}
@@ -187,24 +167,20 @@ void tty_audit_tiocsti(struct tty_struct *tty, char ch)


		auid = audit_get_loginuid(current);
		auid = audit_get_loginuid(current);
		sessionid = audit_get_sessionid(current);
		sessionid = audit_get_sessionid(current);
		tty_audit_log("ioctl=TIOCSTI", current, auid, sessionid, major,
		tty_audit_log("ioctl=TIOCSTI", major, minor, &ch, 1);
			      minor, &ch, 1);
	}
	}
}
}


/**
/**
 * tty_audit_push_task	-	Flush task's pending audit data
 * tty_audit_push_current -	Flush current's pending audit data
 * @tsk:		task pointer
 * @loginuid:		sender login uid
 * @sessionid:		sender session id
 *
 *
 * Called with a ref on @tsk held. Try to lock sighand and get a
 * Try to lock sighand and get a reference to the tty audit buffer if available.
 * reference to the tty audit buffer if available.
 * Flush the buffer or return an appropriate error code.
 * Flush the buffer or return an appropriate error code.
 */
 */
int tty_audit_push_task(struct task_struct *tsk, kuid_t loginuid, u32 sessionid)
int tty_audit_push_current(void)
{
{
	struct tty_audit_buf *buf = ERR_PTR(-EPERM);
	struct tty_audit_buf *buf = ERR_PTR(-EPERM);
	struct task_struct *tsk = current;
	unsigned long flags;
	unsigned long flags;


	if (!lock_task_sighand(tsk, &flags))
	if (!lock_task_sighand(tsk, &flags))
@@ -225,7 +201,7 @@ int tty_audit_push_task(struct task_struct *tsk, kuid_t loginuid, u32 sessionid)
		return PTR_ERR(buf);
		return PTR_ERR(buf);


	mutex_lock(&buf->mutex);
	mutex_lock(&buf->mutex);
	tty_audit_buf_push(tsk, loginuid, sessionid, buf);
	tty_audit_buf_push(buf);
	mutex_unlock(&buf->mutex);
	mutex_unlock(&buf->mutex);


	tty_audit_buf_put(buf);
	tty_audit_buf_put(buf);
@@ -243,10 +219,11 @@ static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty,
		unsigned icanon)
		unsigned icanon)
{
{
	struct tty_audit_buf *buf, *buf2;
	struct tty_audit_buf *buf, *buf2;
	unsigned long flags;


	buf = NULL;
	buf = NULL;
	buf2 = NULL;
	buf2 = NULL;
	spin_lock_irq(&current->sighand->siglock);
	spin_lock_irqsave(&current->sighand->siglock, flags);
	if (likely(!current->signal->audit_tty))
	if (likely(!current->signal->audit_tty))
		goto out;
		goto out;
	buf = current->signal->tty_audit_buf;
	buf = current->signal->tty_audit_buf;
@@ -254,7 +231,7 @@ static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty,
		atomic_inc(&buf->count);
		atomic_inc(&buf->count);
		goto out;
		goto out;
	}
	}
	spin_unlock_irq(&current->sighand->siglock);
	spin_unlock_irqrestore(&current->sighand->siglock, flags);


	buf2 = tty_audit_buf_alloc(tty->driver->major,
	buf2 = tty_audit_buf_alloc(tty->driver->major,
				   tty->driver->minor_start + tty->index,
				   tty->driver->minor_start + tty->index,
@@ -264,7 +241,7 @@ static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty,
		return NULL;
		return NULL;
	}
	}


	spin_lock_irq(&current->sighand->siglock);
	spin_lock_irqsave(&current->sighand->siglock, flags);
	if (!current->signal->audit_tty)
	if (!current->signal->audit_tty)
		goto out;
		goto out;
	buf = current->signal->tty_audit_buf;
	buf = current->signal->tty_audit_buf;
@@ -276,7 +253,7 @@ static struct tty_audit_buf *tty_audit_buf_get(struct tty_struct *tty,
	atomic_inc(&buf->count);
	atomic_inc(&buf->count);
	/* Fall through */
	/* Fall through */
 out:
 out:
	spin_unlock_irq(&current->sighand->siglock);
	spin_unlock_irqrestore(&current->sighand->siglock, flags);
	if (buf2)
	if (buf2)
		tty_audit_buf_free(buf2);
		tty_audit_buf_free(buf2);
	return buf;
	return buf;
@@ -292,10 +269,18 @@ void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
{
{
	struct tty_audit_buf *buf;
	struct tty_audit_buf *buf;
	int major, minor;
	int major, minor;
	int audit_log_tty_passwd;
	unsigned long flags;


	if (unlikely(size == 0))
	if (unlikely(size == 0))
		return;
		return;


	spin_lock_irqsave(&current->sighand->siglock, flags);
	audit_log_tty_passwd = current->signal->audit_tty_log_passwd;
	spin_unlock_irqrestore(&current->sighand->siglock, flags);
	if (!audit_log_tty_passwd && icanon && !L_ECHO(tty))
		return;

	if (tty->driver->type == TTY_DRIVER_TYPE_PTY
	if (tty->driver->type == TTY_DRIVER_TYPE_PTY
	    && tty->driver->subtype == PTY_TYPE_MASTER)
	    && tty->driver->subtype == PTY_TYPE_MASTER)
		return;
		return;
@@ -309,7 +294,7 @@ void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
	minor = tty->driver->minor_start + tty->index;
	minor = tty->driver->minor_start + tty->index;
	if (buf->major != major || buf->minor != minor
	if (buf->major != major || buf->minor != minor
	    || buf->icanon != icanon) {
	    || buf->icanon != icanon) {
		tty_audit_buf_push_current(buf);
		tty_audit_buf_push(buf);
		buf->major = major;
		buf->major = major;
		buf->minor = minor;
		buf->minor = minor;
		buf->icanon = icanon;
		buf->icanon = icanon;
@@ -325,7 +310,7 @@ void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
		data += run;
		data += run;
		size -= run;
		size -= run;
		if (buf->valid == N_TTY_BUF_SIZE)
		if (buf->valid == N_TTY_BUF_SIZE)
			tty_audit_buf_push_current(buf);
			tty_audit_buf_push(buf);
	} while (size != 0);
	} while (size != 0);
	mutex_unlock(&buf->mutex);
	mutex_unlock(&buf->mutex);
	tty_audit_buf_put(buf);
	tty_audit_buf_put(buf);
@@ -339,16 +324,17 @@ void tty_audit_add_data(struct tty_struct *tty, unsigned char *data,
void tty_audit_push(struct tty_struct *tty)
void tty_audit_push(struct tty_struct *tty)
{
{
	struct tty_audit_buf *buf;
	struct tty_audit_buf *buf;
	unsigned long flags;


	spin_lock_irq(&current->sighand->siglock);
	spin_lock_irqsave(&current->sighand->siglock, flags);
	if (likely(!current->signal->audit_tty)) {
	if (likely(!current->signal->audit_tty)) {
		spin_unlock_irq(&current->sighand->siglock);
		spin_unlock_irqrestore(&current->sighand->siglock, flags);
		return;
		return;
	}
	}
	buf = current->signal->tty_audit_buf;
	buf = current->signal->tty_audit_buf;
	if (buf)
	if (buf)
		atomic_inc(&buf->count);
		atomic_inc(&buf->count);
	spin_unlock_irq(&current->sighand->siglock);
	spin_unlock_irqrestore(&current->sighand->siglock, flags);


	if (buf) {
	if (buf) {
		int major, minor;
		int major, minor;
@@ -357,7 +343,7 @@ void tty_audit_push(struct tty_struct *tty)
		minor = tty->driver->minor_start + tty->index;
		minor = tty->driver->minor_start + tty->index;
		mutex_lock(&buf->mutex);
		mutex_lock(&buf->mutex);
		if (buf->major == major && buf->minor == minor)
		if (buf->major == major && buf->minor == minor)
			tty_audit_buf_push_current(buf);
			tty_audit_buf_push(buf);
		mutex_unlock(&buf->mutex);
		mutex_unlock(&buf->mutex);
		tty_audit_buf_put(buf);
		tty_audit_buf_put(buf);
	}
	}
+1 −1
Original line number Original line Diff line number Diff line
@@ -2740,7 +2740,7 @@ static int do_last(struct nameidata *nd, struct path *path,
		if (error)
		if (error)
			return error;
			return error;


		audit_inode(name, dir, 0);
		audit_inode(name, dir, LOOKUP_PARENT);
		error = -EISDIR;
		error = -EISDIR;
		/* trailing slashes? */
		/* trailing slashes? */
		if (nd->last.name[nd->last.len])
		if (nd->last.name[nd->last.len])
+32 −16
Original line number Original line Diff line number Diff line
@@ -84,8 +84,13 @@ extern int audit_classify_arch(int arch);
#define	AUDIT_TYPE_CHILD_DELETE 3	/* a child being deleted */
#define	AUDIT_TYPE_CHILD_DELETE 3	/* a child being deleted */
#define	AUDIT_TYPE_CHILD_CREATE 4	/* a child being created */
#define	AUDIT_TYPE_CHILD_CREATE 4	/* a child being created */


/* maximized args number that audit_socketcall can process */
#define AUDITSC_ARGS		6

struct filename;
struct filename;


extern void audit_log_session_info(struct audit_buffer *ab);

#ifdef CONFIG_AUDITSYSCALL
#ifdef CONFIG_AUDITSYSCALL
/* These are defined in auditsc.c */
/* These are defined in auditsc.c */
				/* Public API */
				/* Public API */
@@ -120,7 +125,7 @@ static inline void audit_syscall_entry(int arch, int major, unsigned long a0,
				       unsigned long a1, unsigned long a2,
				       unsigned long a1, unsigned long a2,
				       unsigned long a3)
				       unsigned long a3)
{
{
	if (unlikely(!audit_dummy_context()))
	if (unlikely(current->audit_context))
		__audit_syscall_entry(arch, major, a0, a1, a2, a3);
		__audit_syscall_entry(arch, major, a0, a1, a2, a3);
}
}
static inline void audit_syscall_exit(void *pt_regs)
static inline void audit_syscall_exit(void *pt_regs)
@@ -185,12 +190,10 @@ static inline int audit_get_sessionid(struct task_struct *tsk)
	return tsk->sessionid;
	return tsk->sessionid;
}
}


extern void audit_log_task_context(struct audit_buffer *ab);
extern void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk);
extern void __audit_ipc_obj(struct kern_ipc_perm *ipcp);
extern void __audit_ipc_obj(struct kern_ipc_perm *ipcp);
extern void __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode);
extern void __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode);
extern int __audit_bprm(struct linux_binprm *bprm);
extern int __audit_bprm(struct linux_binprm *bprm);
extern void __audit_socketcall(int nargs, unsigned long *args);
extern int __audit_socketcall(int nargs, unsigned long *args);
extern int __audit_sockaddr(int len, void *addr);
extern int __audit_sockaddr(int len, void *addr);
extern void __audit_fd_pair(int fd1, int fd2);
extern void __audit_fd_pair(int fd1, int fd2);
extern void __audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr);
extern void __audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr);
@@ -224,10 +227,11 @@ static inline int audit_bprm(struct linux_binprm *bprm)
		return __audit_bprm(bprm);
		return __audit_bprm(bprm);
	return 0;
	return 0;
}
}
static inline void audit_socketcall(int nargs, unsigned long *args)
static inline int audit_socketcall(int nargs, unsigned long *args)
{
{
	if (unlikely(!audit_dummy_context()))
	if (unlikely(!audit_dummy_context()))
		__audit_socketcall(nargs, args);
		return __audit_socketcall(nargs, args);
	return 0;
}
}
static inline int audit_sockaddr(int len, void *addr)
static inline int audit_sockaddr(int len, void *addr)
{
{
@@ -340,11 +344,6 @@ static inline int audit_get_sessionid(struct task_struct *tsk)
{
{
	return -1;
	return -1;
}
}
static inline void audit_log_task_context(struct audit_buffer *ab)
{ }
static inline void audit_log_task_info(struct audit_buffer *ab,
				       struct task_struct *tsk)
{ }
static inline void audit_ipc_obj(struct kern_ipc_perm *ipcp)
static inline void audit_ipc_obj(struct kern_ipc_perm *ipcp)
{ }
{ }
static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid,
static inline void audit_ipc_set_perm(unsigned long qbytes, uid_t uid,
@@ -354,8 +353,10 @@ static inline int audit_bprm(struct linux_binprm *bprm)
{
{
	return 0;
	return 0;
}
}
static inline void audit_socketcall(int nargs, unsigned long *args)
static inline int audit_socketcall(int nargs, unsigned long *args)
{ }
{
	return 0;
}
static inline void audit_fd_pair(int fd1, int fd2)
static inline void audit_fd_pair(int fd1, int fd2)
{ }
{ }
static inline int audit_sockaddr(int len, void *addr)
static inline int audit_sockaddr(int len, void *addr)
@@ -390,6 +391,11 @@ static inline void audit_ptrace(struct task_struct *t)
#define audit_signals 0
#define audit_signals 0
#endif /* CONFIG_AUDITSYSCALL */
#endif /* CONFIG_AUDITSYSCALL */


static inline bool audit_loginuid_set(struct task_struct *tsk)
{
	return uid_valid(audit_get_loginuid(tsk));
}

#ifdef CONFIG_AUDIT
#ifdef CONFIG_AUDIT
/* These are defined in audit.c */
/* These are defined in audit.c */
				/* Public API */
				/* Public API */
@@ -429,14 +435,17 @@ static inline void audit_log_secctx(struct audit_buffer *ab, u32 secid)
{ }
{ }
#endif
#endif


extern int audit_log_task_context(struct audit_buffer *ab);
extern void audit_log_task_info(struct audit_buffer *ab,
				struct task_struct *tsk);

extern int		    audit_update_lsm_rules(void);
extern int		    audit_update_lsm_rules(void);


				/* Private API (for audit.c only) */
				/* Private API (for audit.c only) */
extern int audit_filter_user(void);
extern int audit_filter_user(int type);
extern int audit_filter_type(int type);
extern int audit_filter_type(int type);
extern int  audit_receive_filter(int type, int pid, int seq,
extern int  audit_receive_filter(int type, int pid, int seq,
				void *data, size_t datasz, kuid_t loginuid,
				void *data, size_t datasz);
				u32 sessionid, u32 sid);
extern int audit_enabled;
extern int audit_enabled;
#else /* CONFIG_AUDIT */
#else /* CONFIG_AUDIT */
static inline __printf(4, 5)
static inline __printf(4, 5)
@@ -476,6 +485,13 @@ static inline void audit_log_link_denied(const char *string,
{ }
{ }
static inline void audit_log_secctx(struct audit_buffer *ab, u32 secid)
static inline void audit_log_secctx(struct audit_buffer *ab, u32 secid)
{ }
{ }
static inline int audit_log_task_context(struct audit_buffer *ab)
{
	return 0;
}
static inline void audit_log_task_info(struct audit_buffer *ab,
				       struct task_struct *tsk)
{ }
#define audit_enabled 0
#define audit_enabled 0
#endif /* CONFIG_AUDIT */
#endif /* CONFIG_AUDIT */
static inline void audit_log_string(struct audit_buffer *ab, const char *buf)
static inline void audit_log_string(struct audit_buffer *ab, const char *buf)
+1 −0
Original line number Original line Diff line number Diff line
@@ -593,6 +593,7 @@ struct signal_struct {
#endif
#endif
#ifdef CONFIG_AUDIT
#ifdef CONFIG_AUDIT
	unsigned audit_tty;
	unsigned audit_tty;
	unsigned audit_tty_log_passwd;
	struct tty_audit_buf *tty_audit_buf;
	struct tty_audit_buf *tty_audit_buf;
#endif
#endif
#ifdef CONFIG_CGROUPS
#ifdef CONFIG_CGROUPS
Loading