audit.c 62.1 KB
Newer Older
1
/* audit.c -- Auditing support
L
Linus Torvalds 已提交
2 3 4
 * Gateway between the kernel (e.g., selinux) and the user-space audit daemon.
 * System-call specific features have moved to auditsc.c
 *
S
Steve Grubb 已提交
5
 * Copyright 2003-2007 Red Hat Inc., Durham, North Carolina.
L
Linus Torvalds 已提交
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
 * All Rights Reserved.
 *
 * 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; either version 2 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program; if not, write to the Free Software
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
 *
 * Written by Rickard E. (Rik) Faith <faith@redhat.com>
 *
24
 * Goals: 1) Integrate fully with Security Modules.
L
Linus Torvalds 已提交
25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40
 *	  2) Minimal run-time overhead:
 *	     a) Minimal when syscall auditing is disabled (audit_enable=0).
 *	     b) Small when syscall auditing is enabled and no audit record
 *		is generated (defer as much work as possible to record
 *		generation time):
 *		i) context is allocated,
 *		ii) names from getname are stored without a copy, and
 *		iii) inode information stored from path_lookup.
 *	  3) Ability to disable syscall auditing at boot time (audit=0).
 *	  4) Usable by other parts of the kernel (if audit_log* is called,
 *	     then a syscall record will be generated automatically for the
 *	     current syscall).
 *	  5) Netlink interface to user-space.
 *	  6) Support low-overhead kernel-based filtering to minimize the
 *	     information that must be passed to user-space.
 *
41
 * Example user-space utilities: http://people.redhat.com/sgrubb/audit/
L
Linus Torvalds 已提交
42 43
 */

44 45
#define pr_fmt(fmt) KBUILD_MODNAME ": " fmt

46
#include <linux/file.h>
L
Linus Torvalds 已提交
47
#include <linux/init.h>
P
Paul McQuade 已提交
48
#include <linux/types.h>
A
Arun Sharma 已提交
49
#include <linux/atomic.h>
L
Linus Torvalds 已提交
50
#include <linux/mm.h>
51
#include <linux/export.h>
52
#include <linux/slab.h>
53 54
#include <linux/err.h>
#include <linux/kthread.h>
55
#include <linux/kernel.h>
56
#include <linux/syscalls.h>
57 58 59 60
#include <linux/spinlock.h>
#include <linux/rcupdate.h>
#include <linux/mutex.h>
#include <linux/gfp.h>
61
#include <linux/pid.h>
62
#include <linux/slab.h>
L
Linus Torvalds 已提交
63 64 65 66

#include <linux/audit.h>

#include <net/sock.h>
67
#include <net/netlink.h>
L
Linus Torvalds 已提交
68
#include <linux/skbuff.h>
69 70 71
#ifdef CONFIG_SECURITY
#include <linux/security.h>
#endif
72
#include <linux/freezer.h>
73
#include <linux/pid_namespace.h>
74
#include <net/netns/generic.h>
75 76

#include "audit.h"
L
Linus Torvalds 已提交
77

78
/* No auditing will take place until audit_initialized == AUDIT_INITIALIZED.
L
Linus Torvalds 已提交
79
 * (Initialization happens after skb_init is called.) */
80 81 82
#define AUDIT_DISABLED		-1
#define AUDIT_UNINITIALIZED	0
#define AUDIT_INITIALIZED	1
L
Linus Torvalds 已提交
83 84
static int	audit_initialized;

85 86 87
#define AUDIT_OFF	0
#define AUDIT_ON	1
#define AUDIT_LOCKED	2
88 89
u32		audit_enabled;
u32		audit_ever_enabled;
L
Linus Torvalds 已提交
90

91 92
EXPORT_SYMBOL_GPL(audit_enabled);

L
Linus Torvalds 已提交
93
/* Default state when kernel boots without any parameters. */
94
static u32	audit_default;
L
Linus Torvalds 已提交
95 96

/* If auditing cannot proceed, audit_failure selects what happens. */
97
static u32	audit_failure = AUDIT_FAIL_PRINTK;
L
Linus Torvalds 已提交
98

99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114
/* private audit network namespace index */
static unsigned int audit_net_id;

/**
 * struct audit_net - audit private network namespace data
 * @sk: communication socket
 */
struct audit_net {
	struct sock *sk;
};

/**
 * struct auditd_connection - kernel/auditd connection state
 * @pid: auditd PID
 * @portid: netlink portid
 * @net: the associated network namespace
115
 * @rcu: RCU head
116 117 118
 *
 * Description:
 * This struct is RCU protected; you must either hold the RCU lock for reading
119
 * or the associated spinlock for writing.
120
 */
121
static struct auditd_connection {
122
	struct pid *pid;
123 124
	u32 portid;
	struct net *net;
125 126 127
	struct rcu_head rcu;
} *auditd_conn = NULL;
static DEFINE_SPINLOCK(auditd_conn_lock);
L
Linus Torvalds 已提交
128

129
/* If audit_rate_limit is non-zero, limit the rate of sending audit records
L
Linus Torvalds 已提交
130 131
 * to that number per second.  This prevents DoS attacks, but results in
 * audit records being dropped. */
132
static u32	audit_rate_limit;
L
Linus Torvalds 已提交
133

134 135
/* Number of outstanding audit_buffers allowed.
 * When set to zero, this means unlimited. */
136
static u32	audit_backlog_limit = 64;
137
#define AUDIT_BACKLOG_WAIT_TIME (60 * HZ)
138
static u32	audit_backlog_wait_time = AUDIT_BACKLOG_WAIT_TIME;
L
Linus Torvalds 已提交
139

140
/* The identity of the user shutting down the audit system. */
141
kuid_t		audit_sig_uid = INVALID_UID;
142
pid_t		audit_sig_pid = -1;
143
u32		audit_sig_sid = 0;
144

L
Linus Torvalds 已提交
145 146 147 148 149 150 151
/* Records can be lost in several ways:
   0) [suppressed in audit_alloc]
   1) out of memory in audit_log_start [kmalloc of struct audit_buffer]
   2) out of memory in audit_log_move [alloc_skb]
   3) suppressed due to audit_rate_limit
   4) suppressed due to audit_backlog_limit
*/
152
static atomic_t	audit_lost = ATOMIC_INIT(0);
L
Linus Torvalds 已提交
153

A
Amy Griffis 已提交
154 155 156
/* Hash for inode-based rules */
struct list_head audit_inode_hash[AUDIT_INODE_BUCKETS];

157
static struct kmem_cache *audit_buffer_cache;
L
Linus Torvalds 已提交
158

159
/* queue msgs to send via kauditd_task */
160
static struct sk_buff_head audit_queue;
161 162 163
/* queue msgs due to temporary unicast send problems */
static struct sk_buff_head audit_retry_queue;
/* queue msgs waiting for new auditd connection */
164
static struct sk_buff_head audit_hold_queue;
165 166

/* queue servicing thread */
167 168
static struct task_struct *kauditd_task;
static DECLARE_WAIT_QUEUE_HEAD(kauditd_wait);
169 170

/* waitqueue for callers who are blocked on the audit backlog */
171
static DECLARE_WAIT_QUEUE_HEAD(audit_backlog_wait);
L
Linus Torvalds 已提交
172

173 174 175 176 177
static struct audit_features af = {.vers = AUDIT_FEATURE_VERSION,
				   .mask = -1,
				   .features = 0,
				   .lock = 0,};

178
static char *audit_feature_names[2] = {
179
	"only_unset_loginuid",
180
	"loginuid_immutable",
181 182 183
};


A
Amy Griffis 已提交
184
/* Serialize requests from userspace. */
A
Al Viro 已提交
185
DEFINE_MUTEX(audit_cmd_mutex);
L
Linus Torvalds 已提交
186 187 188 189 190 191 192 193 194 195 196 197

/* AUDIT_BUFSIZ is the size of the temporary buffer used for formatting
 * audit records.  Since printk uses a 1024 byte buffer, this buffer
 * should be at least that large. */
#define AUDIT_BUFSIZ 1024

/* The audit_buffer is used when formatting an audit record.  The caller
 * locks briefly to get the record off the freelist or to allocate the
 * buffer, and locks briefly to send the buffer to the netlink layer or
 * to place it on a transmit queue.  Multiple audit_buffers can be in
 * use simultaneously. */
struct audit_buffer {
198
	struct sk_buff       *skb;	/* formatted skb ready to send */
L
Linus Torvalds 已提交
199
	struct audit_context *ctx;	/* NULL or associated context */
A
Al Viro 已提交
200
	gfp_t		     gfp_mask;
L
Linus Torvalds 已提交
201 202
};

203
struct audit_reply {
204
	__u32 portid;
205
	struct net *net;
206 207 208
	struct sk_buff *skb;
};

209 210 211 212 213 214 215
/**
 * auditd_test_task - Check to see if a given task is an audit daemon
 * @task: the task to check
 *
 * Description:
 * Return 1 if the task is a registered audit daemon, 0 otherwise.
 */
216
int auditd_test_task(struct task_struct *task)
217 218
{
	int rc;
219
	struct auditd_connection *ac;
220 221

	rcu_read_lock();
222 223
	ac = rcu_dereference(auditd_conn);
	rc = (ac && ac->pid == task_tgid(task) ? 1 : 0);
224 225 226 227 228
	rcu_read_unlock();

	return rc;
}

229 230 231 232
/**
 * auditd_pid_vnr - Return the auditd PID relative to the namespace
 *
 * Description:
233
 * Returns the PID in relation to the namespace, 0 on failure.
234
 */
235
static pid_t auditd_pid_vnr(void)
236 237
{
	pid_t pid;
238
	const struct auditd_connection *ac;
239 240

	rcu_read_lock();
241 242
	ac = rcu_dereference(auditd_conn);
	if (!ac || !ac->pid)
243 244
		pid = 0;
	else
245
		pid = pid_vnr(ac->pid);
246 247 248 249 250
	rcu_read_unlock();

	return pid;
}

251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269
/**
 * audit_get_sk - Return the audit socket for the given network namespace
 * @net: the destination network namespace
 *
 * Description:
 * Returns the sock pointer if valid, NULL otherwise.  The caller must ensure
 * that a reference is held for the network namespace while the sock is in use.
 */
static struct sock *audit_get_sk(const struct net *net)
{
	struct audit_net *aunet;

	if (!net)
		return NULL;

	aunet = net_generic(net, audit_net_id);
	return aunet->sk;
}

270
void audit_panic(const char *message)
L
Linus Torvalds 已提交
271
{
272
	switch (audit_failure) {
L
Linus Torvalds 已提交
273 274 275
	case AUDIT_FAIL_SILENT:
		break;
	case AUDIT_FAIL_PRINTK:
276
		if (printk_ratelimit())
277
			pr_err("%s\n", message);
L
Linus Torvalds 已提交
278 279
		break;
	case AUDIT_FAIL_PANIC:
280
		panic("audit: %s\n", message);
L
Linus Torvalds 已提交
281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313
		break;
	}
}

static inline int audit_rate_check(void)
{
	static unsigned long	last_check = 0;
	static int		messages   = 0;
	static DEFINE_SPINLOCK(lock);
	unsigned long		flags;
	unsigned long		now;
	unsigned long		elapsed;
	int			retval	   = 0;

	if (!audit_rate_limit) return 1;

	spin_lock_irqsave(&lock, flags);
	if (++messages < audit_rate_limit) {
		retval = 1;
	} else {
		now     = jiffies;
		elapsed = now - last_check;
		if (elapsed > HZ) {
			last_check = now;
			messages   = 0;
			retval     = 1;
		}
	}
	spin_unlock_irqrestore(&lock, flags);

	return retval;
}

314 315 316 317 318 319 320 321
/**
 * audit_log_lost - conditionally log lost audit message event
 * @message: the message stating reason for lost audit message
 *
 * Emit at least 1 message per second, even if audit_rate_check is
 * throttling.
 * Always increment the lost messages counter.
*/
L
Linus Torvalds 已提交
322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344
void audit_log_lost(const char *message)
{
	static unsigned long	last_msg = 0;
	static DEFINE_SPINLOCK(lock);
	unsigned long		flags;
	unsigned long		now;
	int			print;

	atomic_inc(&audit_lost);

	print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit);

	if (!print) {
		spin_lock_irqsave(&lock, flags);
		now = jiffies;
		if (now - last_msg > HZ) {
			print = 1;
			last_msg = now;
		}
		spin_unlock_irqrestore(&lock, flags);
	}

	if (print) {
345
		if (printk_ratelimit())
346
			pr_warn("audit_lost=%u audit_rate_limit=%u audit_backlog_limit=%u\n",
347 348 349
				atomic_read(&audit_lost),
				audit_rate_limit,
				audit_backlog_limit);
L
Linus Torvalds 已提交
350 351 352 353
		audit_panic(message);
	}
}

354
static int audit_log_config_change(char *function_name, u32 new, u32 old,
355
				   int allow_changes)
L
Linus Torvalds 已提交
356
{
357 358
	struct audit_buffer *ab;
	int rc = 0;
359

360
	ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE);
361 362
	if (unlikely(!ab))
		return rc;
363
	audit_log_format(ab, "%s=%u old=%u", function_name, new, old);
E
Eric Paris 已提交
364
	audit_log_session_info(ab);
365 366 367
	rc = audit_log_task_context(ab);
	if (rc)
		allow_changes = 0; /* Something weird, deny request */
368 369
	audit_log_format(ab, " res=%d", allow_changes);
	audit_log_end(ab);
S
Steve Grubb 已提交
370
	return rc;
L
Linus Torvalds 已提交
371 372
}

373
static int audit_do_config_change(char *function_name, u32 *to_change, u32 new)
L
Linus Torvalds 已提交
374
{
375 376
	int allow_changes, rc = 0;
	u32 old = *to_change;
S
Steve Grubb 已提交
377 378

	/* check if we are locked */
379 380
	if (audit_enabled == AUDIT_LOCKED)
		allow_changes = 0;
S
Steve Grubb 已提交
381
	else
382
		allow_changes = 1;
383

384
	if (audit_enabled != AUDIT_OFF) {
385
		rc = audit_log_config_change(function_name, new, old, allow_changes);
386 387
		if (rc)
			allow_changes = 0;
S
Steve Grubb 已提交
388 389 390
	}

	/* If we are allowed, make the change */
391 392
	if (allow_changes == 1)
		*to_change = new;
S
Steve Grubb 已提交
393 394 395 396
	/* Not allowed, update reason */
	else if (rc == 0)
		rc = -EPERM;
	return rc;
L
Linus Torvalds 已提交
397 398
}

399
static int audit_set_rate_limit(u32 limit)
L
Linus Torvalds 已提交
400
{
401
	return audit_do_config_change("audit_rate_limit", &audit_rate_limit, limit);
402
}
403

404
static int audit_set_backlog_limit(u32 limit)
405
{
406
	return audit_do_config_change("audit_backlog_limit", &audit_backlog_limit, limit);
407
}
S
Steve Grubb 已提交
408

409
static int audit_set_backlog_wait_time(u32 timeout)
410 411
{
	return audit_do_config_change("audit_backlog_wait_time",
P
Paul Moore 已提交
412
				      &audit_backlog_wait_time, timeout);
413 414
}

415
static int audit_set_enabled(u32 state)
416
{
417
	int rc;
418
	if (state > AUDIT_LOCKED)
419
		return -EINVAL;
S
Steve Grubb 已提交
420

421
	rc =  audit_do_config_change("audit_enabled", &audit_enabled, state);
422 423 424 425
	if (!rc)
		audit_ever_enabled |= !!state;

	return rc;
L
Linus Torvalds 已提交
426 427
}

428
static int audit_set_failure(u32 state)
L
Linus Torvalds 已提交
429 430 431 432 433
{
	if (state != AUDIT_FAIL_SILENT
	    && state != AUDIT_FAIL_PRINTK
	    && state != AUDIT_FAIL_PANIC)
		return -EINVAL;
434

435
	return audit_do_config_change("audit_failure", &audit_failure, state);
L
Linus Torvalds 已提交
436 437
}

438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455
/**
 * auditd_conn_free - RCU helper to release an auditd connection struct
 * @rcu: RCU head
 *
 * Description:
 * Drop any references inside the auditd connection tracking struct and free
 * the memory.
 */
 static void auditd_conn_free(struct rcu_head *rcu)
 {
	struct auditd_connection *ac;

	ac = container_of(rcu, struct auditd_connection, rcu);
	put_pid(ac->pid);
	put_net(ac->net);
	kfree(ac);
 }

456 457 458 459 460 461 462 463
/**
 * auditd_set - Set/Reset the auditd connection state
 * @pid: auditd PID
 * @portid: auditd netlink portid
 * @net: auditd network namespace pointer
 *
 * Description:
 * This function will obtain and drop network namespace references as
464
 * necessary.  Returns zero on success, negative values on failure.
465
 */
466
static int auditd_set(struct pid *pid, u32 portid, struct net *net)
467 468
{
	unsigned long flags;
469
	struct auditd_connection *ac_old, *ac_new;
470

471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490
	if (!pid || !net)
		return -EINVAL;

	ac_new = kzalloc(sizeof(*ac_new), GFP_KERNEL);
	if (!ac_new)
		return -ENOMEM;
	ac_new->pid = get_pid(pid);
	ac_new->portid = portid;
	ac_new->net = get_net(net);

	spin_lock_irqsave(&auditd_conn_lock, flags);
	ac_old = rcu_dereference_protected(auditd_conn,
					   lockdep_is_held(&auditd_conn_lock));
	rcu_assign_pointer(auditd_conn, ac_new);
	spin_unlock_irqrestore(&auditd_conn_lock, flags);

	if (ac_old)
		call_rcu(&ac_old->rcu, auditd_conn_free);

	return 0;
491 492 493 494 495 496 497 498
}

/**
 * kauditd_print_skb - Print the audit record to the ring buffer
 * @skb: audit record
 *
 * Whatever the reason, this packet may not make it to the auditd connection
 * so write it via printk so the information isn't completely lost.
499
 */
500
static void kauditd_printk_skb(struct sk_buff *skb)
501 502
{
	struct nlmsghdr *nlh = nlmsg_hdr(skb);
503
	char *data = nlmsg_data(nlh);
504

505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520
	if (nlh->nlmsg_type != AUDIT_EOE && printk_ratelimit())
		pr_notice("type=%d %s\n", nlh->nlmsg_type, data);
}

/**
 * kauditd_rehold_skb - Handle a audit record send failure in the hold queue
 * @skb: audit record
 *
 * Description:
 * This should only be used by the kauditd_thread when it fails to flush the
 * hold queue.
 */
static void kauditd_rehold_skb(struct sk_buff *skb)
{
	/* put the record back in the queue at the same place */
	skb_queue_head(&audit_hold_queue, skb);
521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552
}

/**
 * kauditd_hold_skb - Queue an audit record, waiting for auditd
 * @skb: audit record
 *
 * Description:
 * Queue the audit record, waiting for an instance of auditd.  When this
 * function is called we haven't given up yet on sending the record, but things
 * are not looking good.  The first thing we want to do is try to write the
 * record via printk and then see if we want to try and hold on to the record
 * and queue it, if we have room.  If we want to hold on to the record, but we
 * don't have room, record a record lost message.
 */
static void kauditd_hold_skb(struct sk_buff *skb)
{
	/* at this point it is uncertain if we will ever send this to auditd so
	 * try to send the message via printk before we go any further */
	kauditd_printk_skb(skb);

	/* can we just silently drop the message? */
	if (!audit_default) {
		kfree_skb(skb);
		return;
	}

	/* if we have room, queue the message */
	if (!audit_backlog_limit ||
	    skb_queue_len(&audit_hold_queue) < audit_backlog_limit) {
		skb_queue_tail(&audit_hold_queue, skb);
		return;
	}
553

554 555 556
	/* we have no other options - drop the message */
	audit_log_lost("kauditd hold queue overflow");
	kfree_skb(skb);
557 558
}

559 560 561 562 563 564 565 566 567 568
/**
 * kauditd_retry_skb - Queue an audit record, attempt to send again to auditd
 * @skb: audit record
 *
 * Description:
 * Not as serious as kauditd_hold_skb() as we still have a connected auditd,
 * but for some reason we are having problems sending it audit records so
 * queue the given record and attempt to resend.
 */
static void kauditd_retry_skb(struct sk_buff *skb)
569
{
570 571 572 573 574
	/* NOTE: because records should only live in the retry queue for a
	 * short period of time, before either being sent or moved to the hold
	 * queue, we don't currently enforce a limit on this queue */
	skb_queue_tail(&audit_retry_queue, skb);
}
575

576 577
/**
 * auditd_reset - Disconnect the auditd connection
578
 * @ac: auditd connection state
579 580 581
 *
 * Description:
 * Break the auditd/kauditd connection and move all the queued records into the
582 583 584 585
 * hold queue in case auditd reconnects.  It is important to note that the @ac
 * pointer should never be dereferenced inside this function as it may be NULL
 * or invalid, you can only compare the memory address!  If @ac is NULL then
 * the connection will always be reset.
586
 */
587
static void auditd_reset(const struct auditd_connection *ac)
588
{
589
	unsigned long flags;
590
	struct sk_buff *skb;
591
	struct auditd_connection *ac_old;
592 593

	/* if it isn't already broken, break the connection */
594 595 596
	spin_lock_irqsave(&auditd_conn_lock, flags);
	ac_old = rcu_dereference_protected(auditd_conn,
					   lockdep_is_held(&auditd_conn_lock));
597 598 599 600 601
	if (ac && ac != ac_old) {
		/* someone already registered a new auditd connection */
		spin_unlock_irqrestore(&auditd_conn_lock, flags);
		return;
	}
602 603 604 605 606
	rcu_assign_pointer(auditd_conn, NULL);
	spin_unlock_irqrestore(&auditd_conn_lock, flags);

	if (ac_old)
		call_rcu(&ac_old->rcu, auditd_conn_free);
607

608 609
	/* flush the retry queue to the hold queue, but don't touch the main
	 * queue since we need to process that normally for multicast */
610 611 612 613
	while ((skb = skb_dequeue(&audit_retry_queue)))
		kauditd_hold_skb(skb);
}

614
/**
615 616
 * auditd_send_unicast_skb - Send a record via unicast to auditd
 * @skb: audit record
617 618
 *
 * Description:
619 620 621 622 623
 * Send a skb to the audit daemon, returns positive/zero values on success and
 * negative values on failure; in all cases the skb will be consumed by this
 * function.  If the send results in -ECONNREFUSED the connection with auditd
 * will be reset.  This function may sleep so callers should not hold any locks
 * where this would cause a problem.
624
 */
625
static int auditd_send_unicast_skb(struct sk_buff *skb)
626
{
627 628 629 630
	int rc;
	u32 portid;
	struct net *net;
	struct sock *sk;
631
	struct auditd_connection *ac;
632 633 634 635 636 637 638 639 640

	/* NOTE: we can't call netlink_unicast while in the RCU section so
	 *       take a reference to the network namespace and grab local
	 *       copies of the namespace, the sock, and the portid; the
	 *       namespace and sock aren't going to go away while we hold a
	 *       reference and if the portid does become invalid after the RCU
	 *       section netlink_unicast() should safely return an error */

	rcu_read_lock();
641 642
	ac = rcu_dereference(auditd_conn);
	if (!ac) {
643 644 645
		rcu_read_unlock();
		rc = -ECONNREFUSED;
		goto err;
646
	}
647
	net = get_net(ac->net);
648
	sk = audit_get_sk(net);
649
	portid = ac->portid;
650
	rcu_read_unlock();
651

652 653 654 655 656 657 658 659
	rc = netlink_unicast(sk, skb, portid, 0);
	put_net(net);
	if (rc < 0)
		goto err;

	return rc;

err:
660 661
	if (ac && rc == -ECONNREFUSED)
		auditd_reset(ac);
662
	return rc;
663 664 665
}

/**
666 667 668 669 670 671 672 673 674 675 676 677 678
 * kauditd_send_queue - Helper for kauditd_thread to flush skb queues
 * @sk: the sending sock
 * @portid: the netlink destination
 * @queue: the skb queue to process
 * @retry_limit: limit on number of netlink unicast failures
 * @skb_hook: per-skb hook for additional processing
 * @err_hook: hook called if the skb fails the netlink unicast send
 *
 * Description:
 * Run through the given queue and attempt to send the audit records to auditd,
 * returns zero on success, negative values on failure.  It is up to the caller
 * to ensure that the @sk is valid for the duration of this function.
 *
679
 */
680 681 682 683 684
static int kauditd_send_queue(struct sock *sk, u32 portid,
			      struct sk_buff_head *queue,
			      unsigned int retry_limit,
			      void (*skb_hook)(struct sk_buff *skb),
			      void (*err_hook)(struct sk_buff *skb))
685
{
686 687 688
	int rc = 0;
	struct sk_buff *skb;
	static unsigned int failed = 0;
689

690 691 692 693 694 695 696 697 698 699 700 701 702 703
	/* NOTE: kauditd_thread takes care of all our locking, we just use
	 *       the netlink info passed to us (e.g. sk and portid) */

	while ((skb = skb_dequeue(queue))) {
		/* call the skb_hook for each skb we touch */
		if (skb_hook)
			(*skb_hook)(skb);

		/* can we send to anyone via unicast? */
		if (!sk) {
			if (err_hook)
				(*err_hook)(skb);
			continue;
		}
704

705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727
		/* grab an extra skb reference in case of error */
		skb_get(skb);
		rc = netlink_unicast(sk, skb, portid, 0);
		if (rc < 0) {
			/* fatal failure for our queue flush attempt? */
			if (++failed >= retry_limit ||
			    rc == -ECONNREFUSED || rc == -EPERM) {
				/* yes - error processing for the queue */
				sk = NULL;
				if (err_hook)
					(*err_hook)(skb);
				if (!skb_hook)
					goto out;
				/* keep processing with the skb_hook */
				continue;
			} else
				/* no - requeue to preserve ordering */
				skb_queue_head(queue, skb);
		} else {
			/* it worked - drop the extra reference and continue */
			consume_skb(skb);
			failed = 0;
		}
728 729
	}

730 731
out:
	return (rc >= 0 ? 0 : rc);
732 733
}

734
/*
735 736
 * kauditd_send_multicast_skb - Send a record to any multicast listeners
 * @skb: audit record
737
 *
738
 * Description:
739 740 741
 * Write a multicast message to anyone listening in the initial network
 * namespace.  This function doesn't consume an skb as might be expected since
 * it has to copy it anyways.
742
 */
743
static void kauditd_send_multicast_skb(struct sk_buff *skb)
744
{
745
	struct sk_buff *copy;
746
	struct sock *sock = audit_get_sk(&init_net);
747
	struct nlmsghdr *nlh;
748

749 750 751
	/* NOTE: we are not taking an additional reference for init_net since
	 *       we don't have to worry about it going away */

752 753 754
	if (!netlink_has_listeners(sock, AUDIT_NLGRP_READLOG))
		return;

755 756 757 758 759 760 761 762 763 764
	/*
	 * The seemingly wasteful skb_copy() rather than bumping the refcount
	 * using skb_get() is necessary because non-standard mods are made to
	 * the skb by the original kaudit unicast socket send routine.  The
	 * existing auditd daemon assumes this breakage.  Fixing this would
	 * require co-ordinating a change in the established protocol between
	 * the kaudit kernel subsystem and the auditd userspace code.  There is
	 * no reason for new multicast clients to continue with this
	 * non-compliance.
	 */
765
	copy = skb_copy(skb, GFP_KERNEL);
766 767
	if (!copy)
		return;
768 769
	nlh = nlmsg_hdr(copy);
	nlh->nlmsg_len = skb->len;
770

771
	nlmsg_multicast(sock, copy, 0, AUDIT_NLGRP_READLOG, GFP_KERNEL);
772 773
}

774
/**
775 776
 * kauditd_thread - Worker thread to send audit records to userspace
 * @dummy: unused
777
 */
A
Adrian Bunk 已提交
778
static int kauditd_thread(void *dummy)
779
{
780
	int rc;
781 782 783
	u32 portid = 0;
	struct net *net = NULL;
	struct sock *sk = NULL;
784
	struct auditd_connection *ac;
785

786 787
#define UNICAST_RETRIES 5

788
	set_freezable();
A
Andrew Morton 已提交
789
	while (!kthread_should_stop()) {
790 791
		/* NOTE: see the lock comments in auditd_send_unicast_skb() */
		rcu_read_lock();
792 793
		ac = rcu_dereference(auditd_conn);
		if (!ac) {
794 795 796
			rcu_read_unlock();
			goto main_queue;
		}
797
		net = get_net(ac->net);
798
		sk = audit_get_sk(net);
799
		portid = ac->portid;
800
		rcu_read_unlock();
801 802

		/* attempt to flush the hold queue */
803 804 805
		rc = kauditd_send_queue(sk, portid,
					&audit_hold_queue, UNICAST_RETRIES,
					NULL, kauditd_rehold_skb);
806
		if (ac && rc < 0) {
807
			sk = NULL;
808
			auditd_reset(ac);
809
			goto main_queue;
810
		}
811

812
		/* attempt to flush the retry queue */
813 814 815
		rc = kauditd_send_queue(sk, portid,
					&audit_retry_queue, UNICAST_RETRIES,
					NULL, kauditd_hold_skb);
816
		if (ac && rc < 0) {
817
			sk = NULL;
818
			auditd_reset(ac);
819
			goto main_queue;
820
		}
821

822 823 824 825
main_queue:
		/* process the main queue - do the multicast send and attempt
		 * unicast, dump failed record sends to the retry queue; if
		 * sk == NULL due to previous failures we will just do the
826
		 * multicast send and move the record to the hold queue */
827 828
		rc = kauditd_send_queue(sk, portid, &audit_queue, 1,
					kauditd_send_multicast_skb,
829 830 831 832
					(sk ?
					 kauditd_retry_skb : kauditd_hold_skb));
		if (ac && rc < 0)
			auditd_reset(ac);
833
		sk = NULL;
834 835 836 837 838

		/* drop our netns reference, no auditd sends past this line */
		if (net) {
			put_net(net);
			net = NULL;
839
		}
840 841 842 843 844 845 846 847 848 849

		/* we have processed all the queues so wake everyone */
		wake_up(&audit_backlog_wait);

		/* NOTE: we want to wake up if there is anything on the queue,
		 *       regardless of if an auditd is connected, as we need to
		 *       do the multicast send and rotate records from the
		 *       main queue to the retry/hold queues */
		wait_event_freezable(kauditd_wait,
				     (skb_queue_len(&audit_queue) ? 1 : 0));
850
	}
851

A
Andrew Morton 已提交
852
	return 0;
853 854
}

855 856 857 858
int audit_send_list(void *_dest)
{
	struct audit_netlink_list *dest = _dest;
	struct sk_buff *skb;
859
	struct sock *sk = audit_get_sk(dest->net);
860 861

	/* wait for parent to finish and send an ACK */
A
Amy Griffis 已提交
862 863
	mutex_lock(&audit_cmd_mutex);
	mutex_unlock(&audit_cmd_mutex);
864 865

	while ((skb = __skb_dequeue(&dest->q)) != NULL)
866
		netlink_unicast(sk, skb, dest->portid, 0);
867

868
	put_net(dest->net);
869 870 871 872 873
	kfree(dest);

	return 0;
}

874
struct sk_buff *audit_make_reply(int seq, int type, int done,
S
Stephen Hemminger 已提交
875
				 int multi, const void *payload, int size)
876 877 878 879 880 881 882
{
	struct sk_buff	*skb;
	struct nlmsghdr	*nlh;
	void		*data;
	int		flags = multi ? NLM_F_MULTI : 0;
	int		t     = done  ? NLMSG_DONE  : type;

883
	skb = nlmsg_new(size, GFP_KERNEL);
884 885 886
	if (!skb)
		return NULL;

887
	nlh	= nlmsg_put(skb, 0, seq, t, size, flags);
888 889 890
	if (!nlh)
		goto out_kfree_skb;
	data = nlmsg_data(nlh);
891 892 893
	memcpy(data, payload, size);
	return skb;

894 895
out_kfree_skb:
	kfree_skb(skb);
896 897 898
	return NULL;
}

899 900 901
static int audit_send_reply_thread(void *arg)
{
	struct audit_reply *reply = (struct audit_reply *)arg;
902
	struct sock *sk = audit_get_sk(reply->net);
903 904 905 906 907 908

	mutex_lock(&audit_cmd_mutex);
	mutex_unlock(&audit_cmd_mutex);

	/* Ignore failure. It'll only happen if the sender goes away,
	   because our timeout is set to infinite. */
909 910
	netlink_unicast(sk, reply->skb, reply->portid, 0);
	put_net(reply->net);
911 912 913
	kfree(reply);
	return 0;
}
914

915 916
/**
 * audit_send_reply - send an audit reply message via netlink
917
 * @request_skb: skb of request we are replying to (used to target the reply)
918 919 920 921 922 923 924
 * @seq: sequence number
 * @type: audit message type
 * @done: done (last) flag
 * @multi: multi-part message flag
 * @payload: payload data
 * @size: payload size
 *
925
 * Allocates an skb, builds the netlink message, and sends it to the port id.
926 927
 * No failure notifications.
 */
928
static void audit_send_reply(struct sk_buff *request_skb, int seq, int type, int done,
929
			     int multi, const void *payload, int size)
L
Linus Torvalds 已提交
930
{
931
	struct net *net = sock_net(NETLINK_CB(request_skb).sk);
932 933 934 935 936 937 938 939
	struct sk_buff *skb;
	struct task_struct *tsk;
	struct audit_reply *reply = kmalloc(sizeof(struct audit_reply),
					    GFP_KERNEL);

	if (!reply)
		return;

940
	skb = audit_make_reply(seq, type, done, multi, payload, size);
L
Linus Torvalds 已提交
941
	if (!skb)
942
		goto out;
943

944
	reply->net = get_net(net);
945
	reply->portid = NETLINK_CB(request_skb).portid;
946 947 948
	reply->skb = skb;

	tsk = kthread_run(audit_send_reply_thread, reply, "audit_send_reply");
949 950 951 952 953
	if (!IS_ERR(tsk))
		return;
	kfree_skb(skb);
out:
	kfree(reply);
L
Linus Torvalds 已提交
954 955 956 957 958 959
}

/*
 * Check for appropriate CAP_AUDIT_ capabilities on incoming audit
 * control messages.
 */
960
static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type)
L
Linus Torvalds 已提交
961 962 963
{
	int err = 0;

964
	/* Only support initial user namespace for now. */
965 966 967 968 969 970 971 972 973 974
	/*
	 * We return ECONNREFUSED because it tricks userspace into thinking
	 * that audit was not configured into the kernel.  Lots of users
	 * configure their PAM stack (because that's what the distro does)
	 * to reject login if unable to send messages to audit.  If we return
	 * ECONNREFUSED the PAM stack thinks the kernel does not have audit
	 * configured in and will let login proceed.  If we return EPERM
	 * userspace will reject all logins.  This should be removed when we
	 * support non init namespaces!!
	 */
975
	if (current_user_ns() != &init_user_ns)
976
		return -ECONNREFUSED;
977

L
Linus Torvalds 已提交
978 979 980 981
	switch (msg_type) {
	case AUDIT_LIST:
	case AUDIT_ADD:
	case AUDIT_DEL:
982 983 984
		return -EOPNOTSUPP;
	case AUDIT_GET:
	case AUDIT_SET:
985 986
	case AUDIT_GET_FEATURE:
	case AUDIT_SET_FEATURE:
987 988
	case AUDIT_LIST_RULES:
	case AUDIT_ADD_RULE:
989
	case AUDIT_DEL_RULE:
990
	case AUDIT_SIGNAL_INFO:
M
Miloslav Trmac 已提交
991 992
	case AUDIT_TTY_GET:
	case AUDIT_TTY_SET:
A
Al Viro 已提交
993 994
	case AUDIT_TRIM:
	case AUDIT_MAKE_EQUIV:
995 996
		/* Only support auditd and auditctl in initial pid namespace
		 * for now. */
A
Ameen Ali 已提交
997
		if (task_active_pid_ns(current) != &init_pid_ns)
998 999
			return -EPERM;

1000
		if (!netlink_capable(skb, CAP_AUDIT_CONTROL))
L
Linus Torvalds 已提交
1001 1002
			err = -EPERM;
		break;
1003
	case AUDIT_USER:
1004 1005
	case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG:
	case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
1006
		if (!netlink_capable(skb, CAP_AUDIT_WRITE))
L
Linus Torvalds 已提交
1007 1008 1009 1010 1011 1012 1013 1014 1015
			err = -EPERM;
		break;
	default:  /* bad msg */
		err = -EINVAL;
	}

	return err;
}

1016
static void audit_log_common_recv_msg(struct audit_buffer **ab, u16 msg_type)
1017
{
1018
	uid_t uid = from_kuid(&init_user_ns, current_uid());
1019
	pid_t pid = task_tgid_nr(current);
1020

1021
	if (!audit_enabled && msg_type != AUDIT_USER_AVC) {
1022
		*ab = NULL;
1023
		return;
1024 1025 1026
	}

	*ab = audit_log_start(NULL, GFP_KERNEL, msg_type);
1027
	if (unlikely(!*ab))
1028
		return;
1029
	audit_log_format(*ab, "pid=%d uid=%u", pid, uid);
E
Eric Paris 已提交
1030
	audit_log_session_info(*ab);
1031
	audit_log_task_context(*ab);
1032 1033
}

1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045
int is_audit_feature_set(int i)
{
	return af.features & AUDIT_FEATURE_TO_MASK(i);
}


static int audit_get_feature(struct sk_buff *skb)
{
	u32 seq;

	seq = nlmsg_hdr(skb)->nlmsg_seq;

1046
	audit_send_reply(skb, seq, AUDIT_GET_FEATURE, 0, 0, &af, sizeof(af));
1047 1048 1049 1050 1051 1052 1053 1054 1055

	return 0;
}

static void audit_log_feature_change(int which, u32 old_feature, u32 new_feature,
				     u32 old_lock, u32 new_lock, int res)
{
	struct audit_buffer *ab;

1056 1057 1058
	if (audit_enabled == AUDIT_OFF)
		return;

1059
	ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_FEATURE_CHANGE);
1060
	audit_log_task_info(ab, current);
1061
	audit_log_format(ab, " feature=%s old=%u new=%u old_lock=%u new_lock=%u res=%d",
1062 1063 1064 1065 1066 1067 1068 1069 1070 1071
			 audit_feature_names[which], !!old_feature, !!new_feature,
			 !!old_lock, !!new_lock, res);
	audit_log_end(ab);
}

static int audit_set_feature(struct sk_buff *skb)
{
	struct audit_features *uaf;
	int i;

1072
	BUILD_BUG_ON(AUDIT_LAST_FEATURE + 1 > ARRAY_SIZE(audit_feature_names));
1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090
	uaf = nlmsg_data(nlmsg_hdr(skb));

	/* if there is ever a version 2 we should handle that here */

	for (i = 0; i <= AUDIT_LAST_FEATURE; i++) {
		u32 feature = AUDIT_FEATURE_TO_MASK(i);
		u32 old_feature, new_feature, old_lock, new_lock;

		/* if we are not changing this feature, move along */
		if (!(feature & uaf->mask))
			continue;

		old_feature = af.features & feature;
		new_feature = uaf->features & feature;
		new_lock = (uaf->lock | af.lock) & feature;
		old_lock = af.lock & feature;

		/* are we changing a locked feature? */
1091
		if (old_lock && (new_feature != old_feature)) {
1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124
			audit_log_feature_change(i, old_feature, new_feature,
						 old_lock, new_lock, 0);
			return -EPERM;
		}
	}
	/* nothing invalid, do the changes */
	for (i = 0; i <= AUDIT_LAST_FEATURE; i++) {
		u32 feature = AUDIT_FEATURE_TO_MASK(i);
		u32 old_feature, new_feature, old_lock, new_lock;

		/* if we are not changing this feature, move along */
		if (!(feature & uaf->mask))
			continue;

		old_feature = af.features & feature;
		new_feature = uaf->features & feature;
		old_lock = af.lock & feature;
		new_lock = (uaf->lock | af.lock) & feature;

		if (new_feature != old_feature)
			audit_log_feature_change(i, old_feature, new_feature,
						 old_lock, new_lock, 1);

		if (new_feature)
			af.features |= feature;
		else
			af.features &= ~feature;
		af.lock |= new_lock;
	}

	return 0;
}

1125
static int audit_replace(struct pid *pid)
1126
{
1127
	pid_t pvnr;
1128
	struct sk_buff *skb;
1129

1130 1131
	pvnr = pid_vnr(pid);
	skb = audit_make_reply(0, AUDIT_REPLACE, 0, 0, &pvnr, sizeof(pvnr));
1132 1133
	if (!skb)
		return -ENOMEM;
1134
	return auditd_send_unicast_skb(skb);
1135 1136
}

L
Linus Torvalds 已提交
1137 1138
static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
{
1139
	u32			seq;
L
Linus Torvalds 已提交
1140 1141
	void			*data;
	int			err;
1142
	struct audit_buffer	*ab;
L
Linus Torvalds 已提交
1143
	u16			msg_type = nlh->nlmsg_type;
1144
	struct audit_sig_info   *sig_data;
1145
	char			*ctx = NULL;
1146
	u32			len;
L
Linus Torvalds 已提交
1147

1148
	err = audit_netlink_ok(skb, msg_type);
L
Linus Torvalds 已提交
1149 1150 1151 1152
	if (err)
		return err;

	seq  = nlh->nlmsg_seq;
1153
	data = nlmsg_data(nlh);
L
Linus Torvalds 已提交
1154 1155

	switch (msg_type) {
1156 1157 1158 1159 1160
	case AUDIT_GET: {
		struct audit_status	s;
		memset(&s, 0, sizeof(s));
		s.enabled		= audit_enabled;
		s.failure		= audit_failure;
1161 1162
		/* NOTE: use pid_vnr() so the PID is relative to the current
		 *       namespace */
1163
		s.pid			= auditd_pid_vnr();
1164 1165 1166
		s.rate_limit		= audit_rate_limit;
		s.backlog_limit		= audit_backlog_limit;
		s.lost			= atomic_read(&audit_lost);
1167
		s.backlog		= skb_queue_len(&audit_queue);
1168
		s.feature_bitmap	= AUDIT_FEATURE_BITMAP_ALL;
P
Paul Moore 已提交
1169
		s.backlog_wait_time	= audit_backlog_wait_time;
1170
		audit_send_reply(skb, seq, AUDIT_GET, 0, 0, &s, sizeof(s));
L
Linus Torvalds 已提交
1171
		break;
1172 1173 1174 1175 1176 1177 1178 1179
	}
	case AUDIT_SET: {
		struct audit_status	s;
		memset(&s, 0, sizeof(s));
		/* guard against past and future API changes */
		memcpy(&s, data, min_t(size_t, sizeof(s), nlmsg_len(nlh)));
		if (s.mask & AUDIT_STATUS_ENABLED) {
			err = audit_set_enabled(s.enabled);
1180 1181
			if (err < 0)
				return err;
L
Linus Torvalds 已提交
1182
		}
1183 1184
		if (s.mask & AUDIT_STATUS_FAILURE) {
			err = audit_set_failure(s.failure);
1185 1186
			if (err < 0)
				return err;
L
Linus Torvalds 已提交
1187
		}
1188
		if (s.mask & AUDIT_STATUS_PID) {
1189 1190 1191 1192 1193 1194 1195
			/* NOTE: we are using the vnr PID functions below
			 *       because the s.pid value is relative to the
			 *       namespace of the caller; at present this
			 *       doesn't matter much since you can really only
			 *       run auditd from the initial pid namespace, but
			 *       something to keep in mind if this changes */
			pid_t new_pid = s.pid;
1196
			pid_t auditd_pid;
1197 1198 1199 1200 1201
			struct pid *req_pid = task_tgid(current);

			/* sanity check - PID values must match */
			if (new_pid != pid_vnr(req_pid))
				return -EINVAL;
1202

1203
			/* test the auditd connection */
1204
			audit_replace(req_pid);
1205

1206
			auditd_pid = auditd_pid_vnr();
1207
			/* only the current auditd can unregister itself */
1208
			if ((!new_pid) && (new_pid != auditd_pid)) {
1209 1210
				audit_log_config_change("audit_pid", new_pid,
							auditd_pid, 0);
1211
				return -EACCES;
1212
			}
1213 1214 1215 1216
			/* replacing a healthy auditd is not allowed */
			if (auditd_pid && new_pid) {
				audit_log_config_change("audit_pid", new_pid,
							auditd_pid, 0);
1217
				return -EEXIST;
1218
			}
1219

1220
			if (new_pid) {
1221
				/* register a new auditd connection */
1222 1223 1224 1225 1226 1227 1228 1229 1230 1231 1232
				err = auditd_set(req_pid,
						 NETLINK_CB(skb).portid,
						 sock_net(NETLINK_CB(skb).sk));
				if (audit_enabled != AUDIT_OFF)
					audit_log_config_change("audit_pid",
								new_pid,
								auditd_pid,
								err ? 0 : 1);
				if (err)
					return err;

1233 1234
				/* try to process any backlog */
				wake_up_interruptible(&kauditd_wait);
1235 1236 1237 1238 1239 1240
			} else {
				if (audit_enabled != AUDIT_OFF)
					audit_log_config_change("audit_pid",
								new_pid,
								auditd_pid, 1);

1241
				/* unregister the auditd connection */
1242
				auditd_reset(NULL);
1243
			}
L
Linus Torvalds 已提交
1244
		}
1245 1246
		if (s.mask & AUDIT_STATUS_RATE_LIMIT) {
			err = audit_set_rate_limit(s.rate_limit);
1247 1248 1249
			if (err < 0)
				return err;
		}
1250
		if (s.mask & AUDIT_STATUS_BACKLOG_LIMIT) {
1251
			err = audit_set_backlog_limit(s.backlog_limit);
1252 1253 1254
			if (err < 0)
				return err;
		}
1255 1256 1257
		if (s.mask & AUDIT_STATUS_BACKLOG_WAIT_TIME) {
			if (sizeof(s) > (size_t)nlh->nlmsg_len)
				return -EINVAL;
1258
			if (s.backlog_wait_time > 10*AUDIT_BACKLOG_WAIT_TIME)
1259 1260 1261 1262
				return -EINVAL;
			err = audit_set_backlog_wait_time(s.backlog_wait_time);
			if (err < 0)
				return err;
1263
		}
1264 1265 1266 1267 1268 1269
		if (s.mask == AUDIT_STATUS_LOST) {
			u32 lost = atomic_xchg(&audit_lost, 0);

			audit_log_config_change("lost", 0, lost, 1);
			return lost;
		}
L
Linus Torvalds 已提交
1270
		break;
1271
	}
1272 1273 1274 1275 1276 1277 1278 1279 1280 1281
	case AUDIT_GET_FEATURE:
		err = audit_get_feature(skb);
		if (err)
			return err;
		break;
	case AUDIT_SET_FEATURE:
		err = audit_set_feature(skb);
		if (err)
			return err;
		break;
1282
	case AUDIT_USER:
1283 1284
	case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG:
	case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
1285 1286 1287
		if (!audit_enabled && msg_type != AUDIT_USER_AVC)
			return 0;

1288
		err = audit_filter(msg_type, AUDIT_FILTER_USER);
1289
		if (err == 1) { /* match or error */
1290
			err = 0;
M
Miloslav Trmac 已提交
1291
			if (msg_type == AUDIT_USER_TTY) {
1292
				err = tty_audit_push();
M
Miloslav Trmac 已提交
1293 1294 1295
				if (err)
					break;
			}
1296
			audit_log_common_recv_msg(&ab, msg_type);
1297
			if (msg_type != AUDIT_USER_TTY)
1298 1299
				audit_log_format(ab, " msg='%.*s'",
						 AUDIT_MESSAGE_TEXT_MAX,
1300 1301 1302 1303
						 (char *)data);
			else {
				int size;

1304
				audit_log_format(ab, " data=");
1305
				size = nlmsg_len(nlh);
1306 1307 1308
				if (size > 0 &&
				    ((unsigned char *)data)[size - 1] == '\0')
					size--;
1309
				audit_log_n_untrustedstring(ab, data, size);
1310
			}
1311
			audit_log_end(ab);
1312
		}
L
Linus Torvalds 已提交
1313
		break;
1314 1315 1316 1317
	case AUDIT_ADD_RULE:
	case AUDIT_DEL_RULE:
		if (nlmsg_len(nlh) < sizeof(struct audit_rule_data))
			return -EINVAL;
1318
		if (audit_enabled == AUDIT_LOCKED) {
1319 1320
			audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE);
			audit_log_format(ab, " audit_enabled=%d res=0", audit_enabled);
1321
			audit_log_end(ab);
S
Steve Grubb 已提交
1322 1323
			return -EPERM;
		}
1324
		err = audit_rule_change(msg_type, seq, data, nlmsg_len(nlh));
L
Linus Torvalds 已提交
1325
		break;
1326
	case AUDIT_LIST_RULES:
1327
		err = audit_list_rules_send(skb, seq);
1328
		break;
A
Al Viro 已提交
1329 1330
	case AUDIT_TRIM:
		audit_trim_trees();
1331
		audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE);
A
Al Viro 已提交
1332 1333 1334 1335 1336 1337
		audit_log_format(ab, " op=trim res=1");
		audit_log_end(ab);
		break;
	case AUDIT_MAKE_EQUIV: {
		void *bufp = data;
		u32 sizes[2];
1338
		size_t msglen = nlmsg_len(nlh);
A
Al Viro 已提交
1339 1340 1341
		char *old, *new;

		err = -EINVAL;
1342
		if (msglen < 2 * sizeof(u32))
A
Al Viro 已提交
1343 1344 1345
			break;
		memcpy(sizes, bufp, 2 * sizeof(u32));
		bufp += 2 * sizeof(u32);
1346 1347
		msglen -= 2 * sizeof(u32);
		old = audit_unpack_string(&bufp, &msglen, sizes[0]);
A
Al Viro 已提交
1348 1349 1350 1351
		if (IS_ERR(old)) {
			err = PTR_ERR(old);
			break;
		}
1352
		new = audit_unpack_string(&bufp, &msglen, sizes[1]);
A
Al Viro 已提交
1353 1354 1355 1356 1357 1358 1359 1360
		if (IS_ERR(new)) {
			err = PTR_ERR(new);
			kfree(old);
			break;
		}
		/* OK, here comes... */
		err = audit_tag_tree(old, new);

1361
		audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE);
1362

A
Al Viro 已提交
1363 1364 1365 1366 1367 1368 1369 1370 1371 1372
		audit_log_format(ab, " op=make_equiv old=");
		audit_log_untrustedstring(ab, old);
		audit_log_format(ab, " new=");
		audit_log_untrustedstring(ab, new);
		audit_log_format(ab, " res=%d", !err);
		audit_log_end(ab);
		kfree(old);
		kfree(new);
		break;
	}
1373
	case AUDIT_SIGNAL_INFO:
1374 1375 1376 1377 1378 1379
		len = 0;
		if (audit_sig_sid) {
			err = security_secid_to_secctx(audit_sig_sid, &ctx, &len);
			if (err)
				return err;
		}
1380 1381
		sig_data = kmalloc(sizeof(*sig_data) + len, GFP_KERNEL);
		if (!sig_data) {
1382 1383
			if (audit_sig_sid)
				security_release_secctx(ctx, len);
1384 1385
			return -ENOMEM;
		}
1386
		sig_data->uid = from_kuid(&init_user_ns, audit_sig_uid);
1387
		sig_data->pid = audit_sig_pid;
1388 1389 1390 1391
		if (audit_sig_sid) {
			memcpy(sig_data->ctx, ctx, len);
			security_release_secctx(ctx, len);
		}
1392 1393
		audit_send_reply(skb, seq, AUDIT_SIGNAL_INFO, 0, 0,
				 sig_data, sizeof(*sig_data) + len);
1394
		kfree(sig_data);
1395
		break;
M
Miloslav Trmac 已提交
1396 1397
	case AUDIT_TTY_GET: {
		struct audit_tty_status s;
1398
		unsigned int t;
1399

1400 1401 1402
		t = READ_ONCE(current->signal->audit_tty);
		s.enabled = t & AUDIT_TTY_ENABLE;
		s.log_passwd = !!(t & AUDIT_TTY_LOG_PASSWD);
1403

1404
		audit_send_reply(skb, seq, AUDIT_TTY_GET, 0, 0, &s, sizeof(s));
M
Miloslav Trmac 已提交
1405 1406 1407
		break;
	}
	case AUDIT_TTY_SET: {
1408 1409
		struct audit_tty_status s, old;
		struct audit_buffer	*ab;
1410
		unsigned int t;
1411 1412 1413 1414 1415 1416 1417 1418

		memset(&s, 0, sizeof(s));
		/* guard against past and future API changes */
		memcpy(&s, data, min_t(size_t, sizeof(s), nlmsg_len(nlh)));
		/* check if new data is valid */
		if ((s.enabled != 0 && s.enabled != 1) ||
		    (s.log_passwd != 0 && s.log_passwd != 1))
			err = -EINVAL;
1419

1420 1421 1422 1423 1424
		if (err)
			t = READ_ONCE(current->signal->audit_tty);
		else {
			t = s.enabled | (-s.log_passwd & AUDIT_TTY_LOG_PASSWD);
			t = xchg(&current->signal->audit_tty, t);
1425
		}
1426 1427
		old.enabled = t & AUDIT_TTY_ENABLE;
		old.log_passwd = !!(t & AUDIT_TTY_LOG_PASSWD);
M
Miloslav Trmac 已提交
1428

1429
		audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE);
1430 1431 1432 1433
		audit_log_format(ab, " op=tty_set old-enabled=%d new-enabled=%d"
				 " old-log_passwd=%d new-log_passwd=%d res=%d",
				 old.enabled, s.enabled, old.log_passwd,
				 s.log_passwd, !err);
1434
		audit_log_end(ab);
M
Miloslav Trmac 已提交
1435 1436
		break;
	}
L
Linus Torvalds 已提交
1437 1438 1439 1440 1441 1442 1443 1444
	default:
		err = -EINVAL;
		break;
	}

	return err < 0 ? err : 0;
}

1445 1446 1447 1448 1449 1450
/**
 * audit_receive - receive messages from a netlink control socket
 * @skb: the message buffer
 *
 * Parse the provided skb and deal with any messages that may be present,
 * malformed skbs are discarded.
1451
 */
1452
static void audit_receive(struct sk_buff  *skb)
L
Linus Torvalds 已提交
1453
{
E
Eric Paris 已提交
1454 1455
	struct nlmsghdr *nlh;
	/*
1456
	 * len MUST be signed for nlmsg_next to be able to dec it below 0
E
Eric Paris 已提交
1457 1458 1459 1460 1461 1462 1463 1464
	 * if the nlmsg_len was not aligned
	 */
	int len;
	int err;

	nlh = nlmsg_hdr(skb);
	len = skb->len;

1465
	mutex_lock(&audit_cmd_mutex);
1466
	while (nlmsg_ok(nlh, len)) {
E
Eric Paris 已提交
1467 1468 1469
		err = audit_receive_msg(skb, nlh);
		/* if err or if this message says it wants a response */
		if (err || (nlh->nlmsg_flags & NLM_F_ACK))
J
Johannes Berg 已提交
1470
			netlink_ack(skb, nlh, err, NULL);
E
Eric Paris 已提交
1471

A
Alexandru Copot 已提交
1472
		nlh = nlmsg_next(nlh, &len);
L
Linus Torvalds 已提交
1473
	}
A
Amy Griffis 已提交
1474
	mutex_unlock(&audit_cmd_mutex);
L
Linus Torvalds 已提交
1475 1476
}

1477
/* Run custom bind function on netlink socket group connect or bind requests. */
1478
static int audit_bind(struct net *net, int group)
1479 1480 1481 1482 1483 1484 1485
{
	if (!capable(CAP_AUDIT_READ))
		return -EPERM;

	return 0;
}

1486
static int __net_init audit_net_init(struct net *net)
L
Linus Torvalds 已提交
1487
{
1488 1489
	struct netlink_kernel_cfg cfg = {
		.input	= audit_receive,
1490
		.bind	= audit_bind,
1491 1492
		.flags	= NL_CFG_F_NONROOT_RECV,
		.groups	= AUDIT_NLGRP_MAX,
1493
	};
A
Amy Griffis 已提交
1494

1495 1496
	struct audit_net *aunet = net_generic(net, audit_net_id);

1497 1498
	aunet->sk = netlink_kernel_create(net, NETLINK_AUDIT, &cfg);
	if (aunet->sk == NULL) {
1499
		audit_panic("cannot initialize netlink socket in namespace");
1500 1501
		return -ENOMEM;
	}
1502 1503
	aunet->sk->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT;

1504 1505 1506 1507 1508 1509
	return 0;
}

static void __net_exit audit_net_exit(struct net *net)
{
	struct audit_net *aunet = net_generic(net, audit_net_id);
1510

1511 1512 1513 1514 1515
	/* NOTE: you would think that we would want to check the auditd
	 * connection and potentially reset it here if it lives in this
	 * namespace, but since the auditd connection tracking struct holds a
	 * reference to this namespace (see auditd_set()) we are only ever
	 * going to get here after that connection has been released */
1516

1517
	netlink_kernel_release(aunet->sk);
1518 1519
}

1520
static struct pernet_operations audit_net_ops __net_initdata = {
1521 1522 1523 1524 1525 1526 1527 1528 1529 1530 1531
	.init = audit_net_init,
	.exit = audit_net_exit,
	.id = &audit_net_id,
	.size = sizeof(struct audit_net),
};

/* Initialize audit support at boot time. */
static int __init audit_init(void)
{
	int i;

1532 1533 1534
	if (audit_initialized == AUDIT_DISABLED)
		return 0;

1535 1536 1537
	audit_buffer_cache = kmem_cache_create("audit_buffer",
					       sizeof(struct audit_buffer),
					       0, SLAB_PANIC, NULL);
L
Linus Torvalds 已提交
1538

1539
	skb_queue_head_init(&audit_queue);
1540
	skb_queue_head_init(&audit_retry_queue);
1541
	skb_queue_head_init(&audit_hold_queue);
1542

A
Amy Griffis 已提交
1543 1544 1545
	for (i = 0; i < AUDIT_INODE_BUCKETS; i++)
		INIT_LIST_HEAD(&audit_inode_hash[i]);

1546 1547 1548 1549 1550 1551 1552 1553
	pr_info("initializing netlink subsys (%s)\n",
		audit_default ? "enabled" : "disabled");
	register_pernet_subsys(&audit_net_ops);

	audit_initialized = AUDIT_INITIALIZED;
	audit_enabled = audit_default;
	audit_ever_enabled |= !!audit_default;

P
Paul Moore 已提交
1554 1555 1556 1557 1558 1559
	kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd");
	if (IS_ERR(kauditd_task)) {
		int err = PTR_ERR(kauditd_task);
		panic("audit: failed to start the kauditd thread (%d)\n", err);
	}

1560 1561 1562
	audit_log(NULL, GFP_KERNEL, AUDIT_KERNEL,
		"state=initialized audit_enabled=%u res=1",
		 audit_enabled);
P
Paul Moore 已提交
1563

L
Linus Torvalds 已提交
1564 1565 1566 1567 1568 1569 1570 1571
	return 0;
}
__initcall(audit_init);

/* Process kernel command-line parameter at boot time.  audit=0 or audit=1. */
static int __init audit_enable(char *str)
{
	audit_default = !!simple_strtol(str, NULL, 0);
1572 1573 1574
	if (!audit_default)
		audit_initialized = AUDIT_DISABLED;

1575
	pr_info("%s\n", audit_default ?
1576
		"enabled (after initialization)" : "disabled (until reboot)");
1577

1578
	return 1;
L
Linus Torvalds 已提交
1579 1580 1581
}
__setup("audit=", audit_enable);

1582 1583 1584 1585
/* Process kernel command-line parameter at boot time.
 * audit_backlog_limit=<n> */
static int __init audit_backlog_limit_set(char *str)
{
1586
	u32 audit_backlog_limit_arg;
1587

1588
	pr_info("audit_backlog_limit: ");
1589 1590
	if (kstrtouint(str, 0, &audit_backlog_limit_arg)) {
		pr_cont("using default of %u, unable to parse %s\n",
1591
			audit_backlog_limit, str);
1592 1593
		return 1;
	}
1594 1595

	audit_backlog_limit = audit_backlog_limit_arg;
1596
	pr_cont("%d\n", audit_backlog_limit);
1597 1598 1599 1600 1601

	return 1;
}
__setup("audit_backlog_limit=", audit_backlog_limit_set);

1602 1603
static void audit_buffer_free(struct audit_buffer *ab)
{
1604 1605 1606
	if (!ab)
		return;

1607
	kfree_skb(ab->skb);
1608
	kmem_cache_free(audit_buffer_cache, ab);
1609 1610
}

1611 1612
static struct audit_buffer *audit_buffer_alloc(struct audit_context *ctx,
					       gfp_t gfp_mask, int type)
1613
{
1614
	struct audit_buffer *ab;
1615

1616 1617 1618
	ab = kmem_cache_alloc(audit_buffer_cache, gfp_mask);
	if (!ab)
		return NULL;
1619 1620 1621

	ab->skb = nlmsg_new(AUDIT_BUFSIZ, gfp_mask);
	if (!ab->skb)
1622
		goto err;
1623 1624
	if (!nlmsg_put(ab->skb, 0, 0, type, 0, 0))
		goto err;
1625

1626 1627
	ab->ctx = ctx;
	ab->gfp_mask = gfp_mask;
1628

1629
	return ab;
1630

1631 1632 1633
err:
	audit_buffer_free(ab);
	return NULL;
1634
}
L
Linus Torvalds 已提交
1635

1636 1637 1638 1639
/**
 * audit_serial - compute a serial number for the audit record
 *
 * Compute a serial number for the audit record.  Audit records are
1640 1641 1642 1643 1644 1645 1646 1647 1648 1649 1650
 * written to user-space as soon as they are generated, so a complete
 * audit record may be written in several pieces.  The timestamp of the
 * record and this serial number are used by the user-space tools to
 * determine which pieces belong to the same audit record.  The
 * (timestamp,serial) tuple is unique for each syscall and is live from
 * syscall entry to syscall exit.
 *
 * NOTE: Another possibility is to store the formatted records off the
 * audit context (for those records that have a context), and emit them
 * all at syscall exit.  However, this could delay the reporting of
 * significant errors until syscall exit (or never, if the system
1651 1652
 * halts).
 */
1653 1654
unsigned int audit_serial(void)
{
1655
	static atomic_t serial = ATOMIC_INIT(0);
1656

1657
	return atomic_add_return(1, &serial);
1658 1659
}

D
Daniel Walker 已提交
1660
static inline void audit_get_stamp(struct audit_context *ctx,
1661
				   struct timespec64 *t, unsigned int *serial)
1662
{
1663
	if (!ctx || !auditsc_get_stamp(ctx, t, serial)) {
1664
		ktime_get_real_ts64(t);
1665 1666 1667 1668
		*serial = audit_serial();
	}
}

1669 1670 1671 1672 1673 1674 1675 1676 1677 1678 1679 1680 1681 1682 1683
/**
 * audit_log_start - obtain an audit buffer
 * @ctx: audit_context (may be NULL)
 * @gfp_mask: type of allocation
 * @type: audit message type
 *
 * Returns audit_buffer pointer on success or NULL on error.
 *
 * Obtain an audit buffer.  This routine does locking to obtain the
 * audit buffer, but then no locking is required for calls to
 * audit_log_*format.  If the task (ctx) is a task that is currently in a
 * syscall, then the syscall is marked as auditable and an audit record
 * will be written at syscall exit.  If there is no associated task, then
 * task context (ctx) should be NULL.
 */
A
Al Viro 已提交
1684
struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,
1685
				     int type)
L
Linus Torvalds 已提交
1686
{
P
Paul Moore 已提交
1687
	struct audit_buffer *ab;
1688
	struct timespec64 t;
P
Paul Moore 已提交
1689
	unsigned int uninitialized_var(serial);
L
Linus Torvalds 已提交
1690

1691
	if (audit_initialized != AUDIT_INITIALIZED)
L
Linus Torvalds 已提交
1692 1693
		return NULL;

1694
	if (unlikely(!audit_filter(type, AUDIT_FILTER_TYPE)))
1695 1696
		return NULL;

1697
	/* NOTE: don't ever fail/sleep on these two conditions:
1698 1699 1700 1701
	 * 1. auditd generated record - since we need auditd to drain the
	 *    queue; also, when we are checking for auditd, compare PIDs using
	 *    task_tgid_vnr() since auditd_pid is set in audit_receive_msg()
	 *    using a PID anchored in the caller's namespace
1702 1703 1704 1705 1706
	 * 2. generator holding the audit_cmd_mutex - we don't want to block
	 *    while holding the mutex */
	if (!(auditd_test_task(current) ||
	      (current == __mutex_owner(&audit_cmd_mutex)))) {
		long stime = audit_backlog_wait_time;
P
Paul Moore 已提交
1707 1708 1709 1710 1711

		while (audit_backlog_limit &&
		       (skb_queue_len(&audit_queue) > audit_backlog_limit)) {
			/* wake kauditd to try and flush the queue */
			wake_up_interruptible(&kauditd_wait);
1712

P
Paul Moore 已提交
1713 1714
			/* sleep if we are allowed and we haven't exhausted our
			 * backlog wait limit */
1715
			if (gfpflags_allow_blocking(gfp_mask) && (stime > 0)) {
P
Paul Moore 已提交
1716 1717 1718 1719 1720
				DECLARE_WAITQUEUE(wait, current);

				add_wait_queue_exclusive(&audit_backlog_wait,
							 &wait);
				set_current_state(TASK_UNINTERRUPTIBLE);
1721
				stime = schedule_timeout(stime);
P
Paul Moore 已提交
1722 1723 1724 1725 1726 1727 1728 1729
				remove_wait_queue(&audit_backlog_wait, &wait);
			} else {
				if (audit_rate_check() && printk_ratelimit())
					pr_warn("audit_backlog=%d > audit_backlog_limit=%d\n",
						skb_queue_len(&audit_queue),
						audit_backlog_limit);
				audit_log_lost("backlog limit exceeded");
				return NULL;
1730
			}
1731
		}
1732 1733
	}

1734
	ab = audit_buffer_alloc(ctx, gfp_mask, type);
L
Linus Torvalds 已提交
1735 1736 1737 1738 1739
	if (!ab) {
		audit_log_lost("out of memory in audit_log_start");
		return NULL;
	}

1740
	audit_get_stamp(ab->ctx, &t, &serial);
1741 1742
	audit_log_format(ab, "audit(%llu.%03lu:%u): ",
			 (unsigned long long)t.tv_sec, t.tv_nsec/1000000, serial);
P
Paul Moore 已提交
1743

L
Linus Torvalds 已提交
1744 1745 1746
	return ab;
}

1747
/**
1748
 * audit_expand - expand skb in the audit buffer
1749
 * @ab: audit_buffer
1750
 * @extra: space to add at tail of the skb
1751 1752 1753 1754
 *
 * Returns 0 (no space) on failed expansion, or available space if
 * successful.
 */
1755
static inline int audit_expand(struct audit_buffer *ab, int extra)
1756
{
1757
	struct sk_buff *skb = ab->skb;
1758 1759 1760 1761
	int oldtail = skb_tailroom(skb);
	int ret = pskb_expand_head(skb, 0, extra, ab->gfp_mask);
	int newtail = skb_tailroom(skb);

1762 1763
	if (ret < 0) {
		audit_log_lost("out of memory in audit_expand");
1764
		return 0;
1765
	}
1766 1767 1768

	skb->truesize += newtail - oldtail;
	return newtail;
1769
}
L
Linus Torvalds 已提交
1770

1771 1772
/*
 * Format an audit message into the audit buffer.  If there isn't enough
L
Linus Torvalds 已提交
1773 1774
 * room in the audit buffer, more room will be allocated and vsnprint
 * will be called a second time.  Currently, we assume that a printk
1775 1776
 * can't format message larger than 1024 bytes, so we don't either.
 */
L
Linus Torvalds 已提交
1777 1778 1779 1780
static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
			      va_list args)
{
	int len, avail;
1781
	struct sk_buff *skb;
D
David Woodhouse 已提交
1782
	va_list args2;
L
Linus Torvalds 已提交
1783 1784 1785 1786

	if (!ab)
		return;

1787 1788 1789 1790
	BUG_ON(!ab->skb);
	skb = ab->skb;
	avail = skb_tailroom(skb);
	if (avail == 0) {
1791
		avail = audit_expand(ab, AUDIT_BUFSIZ);
1792 1793
		if (!avail)
			goto out;
L
Linus Torvalds 已提交
1794
	}
D
David Woodhouse 已提交
1795
	va_copy(args2, args);
1796
	len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args);
L
Linus Torvalds 已提交
1797 1798 1799 1800
	if (len >= avail) {
		/* The printk buffer is 1024 bytes long, so if we get
		 * here and AUDIT_BUFSIZ is at least 1024, then we can
		 * log everything that printk could have logged. */
1801 1802
		avail = audit_expand(ab,
			max_t(unsigned, AUDIT_BUFSIZ, 1+len-avail));
1803
		if (!avail)
1804
			goto out_va_end;
1805
		len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args2);
L
Linus Torvalds 已提交
1806
	}
1807 1808
	if (len > 0)
		skb_put(skb, len);
1809 1810
out_va_end:
	va_end(args2);
1811 1812
out:
	return;
L
Linus Torvalds 已提交
1813 1814
}

1815 1816 1817 1818 1819 1820 1821 1822
/**
 * audit_log_format - format a message into the audit buffer.
 * @ab: audit_buffer
 * @fmt: format string
 * @...: optional parameters matching @fmt string
 *
 * All the work is done in audit_log_vformat.
 */
L
Linus Torvalds 已提交
1823 1824 1825 1826 1827 1828 1829 1830 1831 1832 1833
void audit_log_format(struct audit_buffer *ab, const char *fmt, ...)
{
	va_list args;

	if (!ab)
		return;
	va_start(args, fmt);
	audit_log_vformat(ab, fmt, args);
	va_end(args);
}

1834 1835 1836 1837 1838 1839 1840 1841 1842 1843 1844
/**
 * audit_log_hex - convert a buffer to hex and append it to the audit skb
 * @ab: the audit_buffer
 * @buf: buffer to convert to hex
 * @len: length of @buf to be converted
 *
 * No return value; failure to expand is silently ignored.
 *
 * This function will take the passed buf and convert it into a string of
 * ascii hex digits. The new string is placed onto the skb.
 */
1845
void audit_log_n_hex(struct audit_buffer *ab, const unsigned char *buf,
1846
		size_t len)
1847
{
1848 1849 1850 1851
	int i, avail, new_len;
	unsigned char *ptr;
	struct sk_buff *skb;

A
Amy Griffis 已提交
1852 1853 1854
	if (!ab)
		return;

1855 1856 1857 1858 1859 1860 1861 1862 1863 1864 1865
	BUG_ON(!ab->skb);
	skb = ab->skb;
	avail = skb_tailroom(skb);
	new_len = len<<1;
	if (new_len >= avail) {
		/* Round the buffer request up to the next multiple */
		new_len = AUDIT_BUFSIZ*(((new_len-avail)/AUDIT_BUFSIZ) + 1);
		avail = audit_expand(ab, new_len);
		if (!avail)
			return;
	}
1866

1867
	ptr = skb_tail_pointer(skb);
J
Joe Perches 已提交
1868 1869
	for (i = 0; i < len; i++)
		ptr = hex_byte_pack_upper(ptr, buf[i]);
1870 1871
	*ptr = 0;
	skb_put(skb, len << 1); /* new string is twice the old string */
1872 1873
}

1874 1875 1876 1877
/*
 * Format a string of no more than slen characters into the audit buffer,
 * enclosed in quote marks.
 */
1878 1879
void audit_log_n_string(struct audit_buffer *ab, const char *string,
			size_t slen)
1880 1881 1882 1883 1884
{
	int avail, new_len;
	unsigned char *ptr;
	struct sk_buff *skb;

A
Amy Griffis 已提交
1885 1886 1887
	if (!ab)
		return;

1888 1889 1890 1891 1892 1893 1894 1895 1896
	BUG_ON(!ab->skb);
	skb = ab->skb;
	avail = skb_tailroom(skb);
	new_len = slen + 3;	/* enclosing quotes + null terminator */
	if (new_len > avail) {
		avail = audit_expand(ab, new_len);
		if (!avail)
			return;
	}
1897
	ptr = skb_tail_pointer(skb);
1898 1899 1900 1901 1902 1903 1904 1905
	*ptr++ = '"';
	memcpy(ptr, string, slen);
	ptr += slen;
	*ptr++ = '"';
	*ptr = 0;
	skb_put(skb, slen + 2);	/* don't include null terminator */
}

1906 1907
/**
 * audit_string_contains_control - does a string need to be logged in hex
1908 1909
 * @string: string to be checked
 * @len: max length of the string to check
1910
 */
1911
bool audit_string_contains_control(const char *string, size_t len)
1912 1913
{
	const unsigned char *p;
1914
	for (p = string; p < (const unsigned char *)string + len; p++) {
1915
		if (*p == '"' || *p < 0x21 || *p > 0x7e)
1916
			return true;
1917
	}
1918
	return false;
1919 1920
}

1921
/**
M
Miloslav Trmac 已提交
1922
 * audit_log_n_untrustedstring - log a string that may contain random characters
1923
 * @ab: audit_buffer
1924
 * @len: length of string (not including trailing null)
1925 1926 1927 1928
 * @string: string to be logged
 *
 * This code will escape a string that is passed to it if the string
 * contains a control character, unprintable character, double quote mark,
1929
 * or a space. Unescaped strings will start and end with a double quote mark.
1930
 * Strings that are escaped are printed in hex (2 digits per char).
1931 1932 1933
 *
 * The caller specifies the number of characters in the string to log, which may
 * or may not be the entire string.
1934
 */
1935 1936
void audit_log_n_untrustedstring(struct audit_buffer *ab, const char *string,
				 size_t len)
1937
{
1938
	if (audit_string_contains_control(string, len))
1939
		audit_log_n_hex(ab, string, len);
1940
	else
1941
		audit_log_n_string(ab, string, len);
1942 1943
}

1944
/**
M
Miloslav Trmac 已提交
1945
 * audit_log_untrustedstring - log a string that may contain random characters
1946 1947 1948
 * @ab: audit_buffer
 * @string: string to be logged
 *
M
Miloslav Trmac 已提交
1949
 * Same as audit_log_n_untrustedstring(), except that strlen is used to
1950 1951
 * determine string length.
 */
1952
void audit_log_untrustedstring(struct audit_buffer *ab, const char *string)
1953
{
1954
	audit_log_n_untrustedstring(ab, string, strlen(string));
1955 1956
}

1957
/* This is a helper-function to print the escaped d_path */
L
Linus Torvalds 已提交
1958
void audit_log_d_path(struct audit_buffer *ab, const char *prefix,
1959
		      const struct path *path)
L
Linus Torvalds 已提交
1960
{
1961
	char *p, *pathname;
L
Linus Torvalds 已提交
1962

1963
	if (prefix)
1964
		audit_log_format(ab, "%s", prefix);
L
Linus Torvalds 已提交
1965

1966
	/* We will allow 11 spaces for ' (deleted)' to be appended */
1967 1968
	pathname = kmalloc(PATH_MAX+11, ab->gfp_mask);
	if (!pathname) {
1969
		audit_log_string(ab, "<no_memory>");
1970
		return;
L
Linus Torvalds 已提交
1971
	}
1972
	p = d_path(path, pathname, PATH_MAX+11);
1973 1974
	if (IS_ERR(p)) { /* Should never happen since we send PATH_MAX */
		/* FIXME: can we save some information here? */
1975
		audit_log_string(ab, "<too_long>");
D
Daniel Walker 已提交
1976
	} else
1977
		audit_log_untrustedstring(ab, p);
1978
	kfree(pathname);
L
Linus Torvalds 已提交
1979 1980
}

E
Eric Paris 已提交
1981 1982
void audit_log_session_info(struct audit_buffer *ab)
{
1983
	unsigned int sessionid = audit_get_sessionid(current);
E
Eric Paris 已提交
1984 1985
	uid_t auid = from_kuid(&init_user_ns, audit_get_loginuid(current));

1986
	audit_log_format(ab, " auid=%u ses=%u", auid, sessionid);
E
Eric Paris 已提交
1987 1988
}

1989 1990 1991 1992 1993 1994 1995 1996 1997
void audit_log_key(struct audit_buffer *ab, char *key)
{
	audit_log_format(ab, " key=");
	if (key)
		audit_log_untrustedstring(ab, key);
	else
		audit_log_format(ab, "(null)");
}

1998 1999 2000 2001 2002 2003 2004
void audit_log_cap(struct audit_buffer *ab, char *prefix, kernel_cap_t *cap)
{
	int i;

	audit_log_format(ab, " %s=", prefix);
	CAP_FOR_EACH_U32(i) {
		audit_log_format(ab, "%08x",
2005
				 cap->cap[CAP_LAST_U32 - i]);
2006 2007 2008
	}
}

2009
static void audit_log_fcaps(struct audit_buffer *ab, struct audit_names *name)
2010
{
2011 2012 2013 2014
	audit_log_cap(ab, "cap_fp", &name->fcap.permitted);
	audit_log_cap(ab, "cap_fi", &name->fcap.inheritable);
	audit_log_format(ab, " cap_fe=%d cap_fver=%x",
			 name->fcap.fE, name->fcap_ver);
2015 2016 2017 2018 2019 2020 2021 2022 2023 2024 2025 2026 2027 2028 2029 2030 2031 2032 2033 2034 2035 2036 2037 2038 2039 2040
}

static inline int audit_copy_fcaps(struct audit_names *name,
				   const struct dentry *dentry)
{
	struct cpu_vfs_cap_data caps;
	int rc;

	if (!dentry)
		return 0;

	rc = get_vfs_caps_from_disk(dentry, &caps);
	if (rc)
		return rc;

	name->fcap.permitted = caps.permitted;
	name->fcap.inheritable = caps.inheritable;
	name->fcap.fE = !!(caps.magic_etc & VFS_CAP_FLAGS_EFFECTIVE);
	name->fcap_ver = (caps.magic_etc & VFS_CAP_REVISION_MASK) >>
				VFS_CAP_REVISION_SHIFT;

	return 0;
}

/* Copy inode data into an audit_names. */
void audit_copy_inode(struct audit_names *name, const struct dentry *dentry,
2041
		      struct inode *inode)
2042 2043 2044 2045 2046 2047 2048 2049 2050 2051 2052 2053 2054 2055 2056 2057 2058 2059 2060 2061
{
	name->ino   = inode->i_ino;
	name->dev   = inode->i_sb->s_dev;
	name->mode  = inode->i_mode;
	name->uid   = inode->i_uid;
	name->gid   = inode->i_gid;
	name->rdev  = inode->i_rdev;
	security_inode_getsecid(inode, &name->osid);
	audit_copy_fcaps(name, dentry);
}

/**
 * audit_log_name - produce AUDIT_PATH record from struct audit_names
 * @context: audit_context for the task
 * @n: audit_names structure with reportable details
 * @path: optional path to report instead of audit_names->name
 * @record_num: record number to report when handling a list of names
 * @call_panic: optional pointer to int that will be updated if secid fails
 */
void audit_log_name(struct audit_context *context, struct audit_names *n,
2062
		    const struct path *path, int record_num, int *call_panic)
2063 2064 2065 2066 2067 2068 2069 2070 2071 2072 2073 2074 2075 2076 2077 2078 2079 2080 2081 2082 2083 2084 2085 2086 2087 2088 2089 2090 2091 2092 2093
{
	struct audit_buffer *ab;
	ab = audit_log_start(context, GFP_KERNEL, AUDIT_PATH);
	if (!ab)
		return;

	audit_log_format(ab, "item=%d", record_num);

	if (path)
		audit_log_d_path(ab, " name=", path);
	else if (n->name) {
		switch (n->name_len) {
		case AUDIT_NAME_FULL:
			/* log the full path */
			audit_log_format(ab, " name=");
			audit_log_untrustedstring(ab, n->name->name);
			break;
		case 0:
			/* name was specified as a relative path and the
			 * directory component is the cwd */
			audit_log_d_path(ab, " name=", &context->pwd);
			break;
		default:
			/* log the name's directory component */
			audit_log_format(ab, " name=");
			audit_log_n_untrustedstring(ab, n->name->name,
						    n->name_len);
		}
	} else
		audit_log_format(ab, " name=(null)");

2094
	if (n->ino != AUDIT_INO_UNSET)
2095 2096 2097 2098 2099 2100 2101 2102 2103 2104 2105 2106 2107 2108 2109 2110 2111 2112 2113 2114 2115 2116 2117 2118 2119
		audit_log_format(ab, " inode=%lu"
				 " dev=%02x:%02x mode=%#ho"
				 " ouid=%u ogid=%u rdev=%02x:%02x",
				 n->ino,
				 MAJOR(n->dev),
				 MINOR(n->dev),
				 n->mode,
				 from_kuid(&init_user_ns, n->uid),
				 from_kgid(&init_user_ns, n->gid),
				 MAJOR(n->rdev),
				 MINOR(n->rdev));
	if (n->osid != 0) {
		char *ctx = NULL;
		u32 len;
		if (security_secid_to_secctx(
			n->osid, &ctx, &len)) {
			audit_log_format(ab, " osid=%u", n->osid);
			if (call_panic)
				*call_panic = 2;
		} else {
			audit_log_format(ab, " obj=%s", ctx);
			security_release_secctx(ctx, len);
		}
	}

2120 2121 2122 2123 2124 2125 2126 2127 2128 2129 2130 2131 2132 2133 2134 2135 2136 2137 2138 2139
	/* log the audit_names record type */
	audit_log_format(ab, " nametype=");
	switch(n->type) {
	case AUDIT_TYPE_NORMAL:
		audit_log_format(ab, "NORMAL");
		break;
	case AUDIT_TYPE_PARENT:
		audit_log_format(ab, "PARENT");
		break;
	case AUDIT_TYPE_CHILD_DELETE:
		audit_log_format(ab, "DELETE");
		break;
	case AUDIT_TYPE_CHILD_CREATE:
		audit_log_format(ab, "CREATE");
		break;
	default:
		audit_log_format(ab, "UNKNOWN");
		break;
	}

2140 2141 2142 2143 2144 2145 2146 2147 2148 2149 2150 2151 2152 2153 2154 2155 2156 2157 2158 2159 2160 2161 2162 2163 2164 2165 2166 2167 2168 2169 2170 2171
	audit_log_fcaps(ab, n);
	audit_log_end(ab);
}

int audit_log_task_context(struct audit_buffer *ab)
{
	char *ctx = NULL;
	unsigned len;
	int error;
	u32 sid;

	security_task_getsecid(current, &sid);
	if (!sid)
		return 0;

	error = security_secid_to_secctx(sid, &ctx, &len);
	if (error) {
		if (error != -EINVAL)
			goto error_path;
		return 0;
	}

	audit_log_format(ab, " subj=%s", ctx);
	security_release_secctx(ctx, len);
	return 0;

error_path:
	audit_panic("error in audit_log_task_context");
	return error;
}
EXPORT_SYMBOL(audit_log_task_context);

2172 2173 2174
void audit_log_d_path_exe(struct audit_buffer *ab,
			  struct mm_struct *mm)
{
2175 2176 2177 2178
	struct file *exe_file;

	if (!mm)
		goto out_null;
2179

2180 2181 2182 2183 2184 2185 2186 2187 2188
	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)");
2189 2190
}

2191 2192 2193 2194 2195 2196 2197 2198 2199 2200 2201 2202 2203 2204 2205 2206 2207
struct tty_struct *audit_get_tty(struct task_struct *tsk)
{
	struct tty_struct *tty = NULL;
	unsigned long flags;

	spin_lock_irqsave(&tsk->sighand->siglock, flags);
	if (tsk->signal)
		tty = tty_kref_get(tsk->signal->tty);
	spin_unlock_irqrestore(&tsk->sighand->siglock, flags);
	return tty;
}

void audit_put_tty(struct tty_struct *tty)
{
	tty_kref_put(tty);
}

2208 2209 2210
void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk)
{
	const struct cred *cred;
2211
	char comm[sizeof(tsk->comm)];
2212
	struct tty_struct *tty;
2213 2214 2215 2216 2217 2218

	if (!ab)
		return;

	/* tsk == current */
	cred = current_cred();
2219
	tty = audit_get_tty(tsk);
2220
	audit_log_format(ab,
2221
			 " ppid=%d pid=%d auid=%u uid=%u gid=%u"
2222
			 " euid=%u suid=%u fsuid=%u"
2223
			 " egid=%u sgid=%u fsgid=%u tty=%s ses=%u",
2224
			 task_ppid_nr(tsk),
2225
			 task_tgid_nr(tsk),
2226 2227 2228 2229 2230 2231 2232 2233 2234
			 from_kuid(&init_user_ns, audit_get_loginuid(tsk)),
			 from_kuid(&init_user_ns, cred->uid),
			 from_kgid(&init_user_ns, cred->gid),
			 from_kuid(&init_user_ns, cred->euid),
			 from_kuid(&init_user_ns, cred->suid),
			 from_kuid(&init_user_ns, cred->fsuid),
			 from_kgid(&init_user_ns, cred->egid),
			 from_kgid(&init_user_ns, cred->sgid),
			 from_kgid(&init_user_ns, cred->fsgid),
2235 2236 2237
			 tty ? tty_name(tty) : "(none)",
			 audit_get_sessionid(tsk));
	audit_put_tty(tty);
2238
	audit_log_format(ab, " comm=");
2239
	audit_log_untrustedstring(ab, get_task_comm(comm, tsk));
2240
	audit_log_d_path_exe(ab, tsk->mm);
2241 2242 2243 2244
	audit_log_task_context(ab);
}
EXPORT_SYMBOL(audit_log_task_info);

2245 2246
/**
 * audit_log_link_denied - report a link restriction denial
2247
 * @operation: specific link operation
2248 2249
 * @link: the path that triggered the restriction
 */
2250
void audit_log_link_denied(const char *operation, const struct path *link)
2251 2252
{
	struct audit_buffer *ab;
2253 2254 2255 2256 2257
	struct audit_names *name;

	name = kzalloc(sizeof(*name), GFP_NOFS);
	if (!name)
		return;
2258

2259
	/* Generate AUDIT_ANOM_LINK with subject, operation, outcome. */
2260 2261
	ab = audit_log_start(current->audit_context, GFP_KERNEL,
			     AUDIT_ANOM_LINK);
2262
	if (!ab)
2263 2264 2265 2266
		goto out;
	audit_log_format(ab, "op=%s", operation);
	audit_log_task_info(ab, current);
	audit_log_format(ab, " res=0");
2267
	audit_log_end(ab);
2268 2269 2270

	/* Generate AUDIT_PATH record with object. */
	name->type = AUDIT_TYPE_NORMAL;
2271
	audit_copy_inode(name, link->dentry, d_backing_inode(link->dentry));
2272 2273 2274
	audit_log_name(current->audit_context, name, link, 0, NULL);
out:
	kfree(name);
2275 2276
}

2277 2278 2279 2280
/**
 * audit_log_end - end one audit record
 * @ab: the audit_buffer
 *
2281 2282 2283 2284
 * We can not do a netlink send inside an irq context because it blocks (last
 * arg, flags, is not set to MSG_DONTWAIT), so the audit buffer is placed on a
 * queue and a tasklet is scheduled to remove them from the queue outside the
 * irq context.  May be called in any context.
2285
 */
2286
void audit_log_end(struct audit_buffer *ab)
L
Linus Torvalds 已提交
2287
{
2288 2289 2290
	struct sk_buff *skb;
	struct nlmsghdr *nlh;

L
Linus Torvalds 已提交
2291 2292
	if (!ab)
		return;
2293 2294 2295

	if (audit_rate_check()) {
		skb = ab->skb;
2296
		ab->skb = NULL;
2297 2298 2299 2300 2301 2302 2303 2304 2305 2306 2307 2308

		/* setup the netlink header, see the comments in
		 * kauditd_send_multicast_skb() for length quirks */
		nlh = nlmsg_hdr(skb);
		nlh->nlmsg_len = skb->len - NLMSG_HDRLEN;

		/* queue the netlink packet and poke the kauditd thread */
		skb_queue_tail(&audit_queue, skb);
		wake_up_interruptible(&kauditd_wait);
	} else
		audit_log_lost("rate limit exceeded");

2309
	audit_buffer_free(ab);
L
Linus Torvalds 已提交
2310 2311
}

2312 2313 2314 2315 2316 2317 2318 2319 2320 2321 2322 2323
/**
 * audit_log - Log an audit record
 * @ctx: audit context
 * @gfp_mask: type of allocation
 * @type: audit message type
 * @fmt: format string to use
 * @...: variable parameters matching the format string
 *
 * This is a convenience function that calls audit_log_start,
 * audit_log_vformat, and audit_log_end.  It may be called
 * in any context.
 */
D
Daniel Walker 已提交
2324
void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type,
2325
	       const char *fmt, ...)
L
Linus Torvalds 已提交
2326 2327 2328 2329
{
	struct audit_buffer *ab;
	va_list args;

2330
	ab = audit_log_start(ctx, gfp_mask, type);
L
Linus Torvalds 已提交
2331 2332 2333 2334 2335 2336 2337
	if (ab) {
		va_start(args, fmt);
		audit_log_vformat(ab, fmt, args);
		va_end(args);
		audit_log_end(ab);
	}
}
2338

2339 2340 2341 2342 2343 2344 2345 2346 2347 2348 2349 2350 2351 2352 2353 2354 2355 2356 2357 2358 2359 2360 2361 2362 2363 2364
#ifdef CONFIG_SECURITY
/**
 * audit_log_secctx - Converts and logs SELinux context
 * @ab: audit_buffer
 * @secid: security number
 *
 * This is a helper function that calls security_secid_to_secctx to convert
 * secid to secctx and then adds the (converted) SELinux context to the audit
 * log by calling audit_log_format, thus also preventing leak of internal secid
 * to userspace. If secid cannot be converted audit_panic is called.
 */
void audit_log_secctx(struct audit_buffer *ab, u32 secid)
{
	u32 len;
	char *secctx;

	if (security_secid_to_secctx(secid, &secctx, &len)) {
		audit_panic("Cannot convert secid to context");
	} else {
		audit_log_format(ab, " obj=%s", secctx);
		security_release_secctx(secctx, len);
	}
}
EXPORT_SYMBOL(audit_log_secctx);
#endif

2365 2366 2367 2368
EXPORT_SYMBOL(audit_log_start);
EXPORT_SYMBOL(audit_log_end);
EXPORT_SYMBOL(audit_log_format);
EXPORT_SYMBOL(audit_log);