1 /* audit.c -- Auditing support 2 * Gateway between the kernel (e.g., selinux) and the user-space audit daemon. 3 * System-call specific features have moved to auditsc.c 4 * 5 * Copyright 2003-2007 Red Hat Inc., Durham, North Carolina. 6 * All Rights Reserved. 7 * 8 * This program is free software; you can redistribute it and/or modify 9 * it under the terms of the GNU General Public License as published by 10 * the Free Software Foundation; either version 2 of the License, or 11 * (at your option) any later version. 12 * 13 * This program is distributed in the hope that it will be useful, 14 * but WITHOUT ANY WARRANTY; without even the implied warranty of 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 16 * GNU General Public License for more details. 17 * 18 * You should have received a copy of the GNU General Public License 19 * along with this program; if not, write to the Free Software 20 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 21 * 22 * Written by Rickard E. (Rik) Faith <faith@redhat.com> 23 * 24 * Goals: 1) Integrate fully with Security Modules. 25 * 2) Minimal run-time overhead: 26 * a) Minimal when syscall auditing is disabled (audit_enable=0). 27 * b) Small when syscall auditing is enabled and no audit record 28 * is generated (defer as much work as possible to record 29 * generation time): 30 * i) context is allocated, 31 * ii) names from getname are stored without a copy, and 32 * iii) inode information stored from path_lookup. 33 * 3) Ability to disable syscall auditing at boot time (audit=0). 34 * 4) Usable by other parts of the kernel (if audit_log* is called, 35 * then a syscall record will be generated automatically for the 36 * current syscall). 37 * 5) Netlink interface to user-space. 38 * 6) Support low-overhead kernel-based filtering to minimize the 39 * information that must be passed to user-space. 40 * 41 * Example user-space utilities: http://people.redhat.com/sgrubb/audit/ 42 */ 43 44 #include <linux/init.h> 45 #include <asm/types.h> 46 #include <linux/atomic.h> 47 #include <linux/mm.h> 48 #include <linux/export.h> 49 #include <linux/slab.h> 50 #include <linux/err.h> 51 #include <linux/kthread.h> 52 #include <linux/kernel.h> 53 #include <linux/syscalls.h> 54 55 #include <linux/audit.h> 56 57 #include <net/sock.h> 58 #include <net/netlink.h> 59 #include <linux/skbuff.h> 60 #ifdef CONFIG_SECURITY 61 #include <linux/security.h> 62 #endif 63 #include <net/netlink.h> 64 #include <linux/freezer.h> 65 #include <linux/tty.h> 66 #include <linux/pid_namespace.h> 67 68 #include "audit.h" 69 70 /* No auditing will take place until audit_initialized == AUDIT_INITIALIZED. 71 * (Initialization happens after skb_init is called.) */ 72 #define AUDIT_DISABLED -1 73 #define AUDIT_UNINITIALIZED 0 74 #define AUDIT_INITIALIZED 1 75 static int audit_initialized; 76 77 #define AUDIT_OFF 0 78 #define AUDIT_ON 1 79 #define AUDIT_LOCKED 2 80 int audit_enabled; 81 int audit_ever_enabled; 82 83 EXPORT_SYMBOL_GPL(audit_enabled); 84 85 /* Default state when kernel boots without any parameters. */ 86 static int audit_default; 87 88 /* If auditing cannot proceed, audit_failure selects what happens. */ 89 static int audit_failure = AUDIT_FAIL_PRINTK; 90 91 /* 92 * If audit records are to be written to the netlink socket, audit_pid 93 * contains the pid of the auditd process and audit_nlk_portid contains 94 * the portid to use to send netlink messages to that process. 95 */ 96 int audit_pid; 97 static int audit_nlk_portid; 98 99 /* If audit_rate_limit is non-zero, limit the rate of sending audit records 100 * to that number per second. This prevents DoS attacks, but results in 101 * audit records being dropped. */ 102 static int audit_rate_limit; 103 104 /* Number of outstanding audit_buffers allowed. */ 105 static int audit_backlog_limit = 64; 106 static int audit_backlog_wait_time = 60 * HZ; 107 static int audit_backlog_wait_overflow = 0; 108 109 /* The identity of the user shutting down the audit system. */ 110 kuid_t audit_sig_uid = INVALID_UID; 111 pid_t audit_sig_pid = -1; 112 u32 audit_sig_sid = 0; 113 114 /* Records can be lost in several ways: 115 0) [suppressed in audit_alloc] 116 1) out of memory in audit_log_start [kmalloc of struct audit_buffer] 117 2) out of memory in audit_log_move [alloc_skb] 118 3) suppressed due to audit_rate_limit 119 4) suppressed due to audit_backlog_limit 120 */ 121 static atomic_t audit_lost = ATOMIC_INIT(0); 122 123 /* The netlink socket. */ 124 static struct sock *audit_sock; 125 126 /* Hash for inode-based rules */ 127 struct list_head audit_inode_hash[AUDIT_INODE_BUCKETS]; 128 129 /* The audit_freelist is a list of pre-allocated audit buffers (if more 130 * than AUDIT_MAXFREE are in use, the audit buffer is freed instead of 131 * being placed on the freelist). */ 132 static DEFINE_SPINLOCK(audit_freelist_lock); 133 static int audit_freelist_count; 134 static LIST_HEAD(audit_freelist); 135 136 static struct sk_buff_head audit_skb_queue; 137 /* queue of skbs to send to auditd when/if it comes back */ 138 static struct sk_buff_head audit_skb_hold_queue; 139 static struct task_struct *kauditd_task; 140 static DECLARE_WAIT_QUEUE_HEAD(kauditd_wait); 141 static DECLARE_WAIT_QUEUE_HEAD(audit_backlog_wait); 142 143 /* Serialize requests from userspace. */ 144 DEFINE_MUTEX(audit_cmd_mutex); 145 146 /* AUDIT_BUFSIZ is the size of the temporary buffer used for formatting 147 * audit records. Since printk uses a 1024 byte buffer, this buffer 148 * should be at least that large. */ 149 #define AUDIT_BUFSIZ 1024 150 151 /* AUDIT_MAXFREE is the number of empty audit_buffers we keep on the 152 * audit_freelist. Doing so eliminates many kmalloc/kfree calls. */ 153 #define AUDIT_MAXFREE (2*NR_CPUS) 154 155 /* The audit_buffer is used when formatting an audit record. The caller 156 * locks briefly to get the record off the freelist or to allocate the 157 * buffer, and locks briefly to send the buffer to the netlink layer or 158 * to place it on a transmit queue. Multiple audit_buffers can be in 159 * use simultaneously. */ 160 struct audit_buffer { 161 struct list_head list; 162 struct sk_buff *skb; /* formatted skb ready to send */ 163 struct audit_context *ctx; /* NULL or associated context */ 164 gfp_t gfp_mask; 165 }; 166 167 struct audit_reply { 168 int pid; 169 struct sk_buff *skb; 170 }; 171 172 static void audit_set_pid(struct audit_buffer *ab, pid_t pid) 173 { 174 if (ab) { 175 struct nlmsghdr *nlh = nlmsg_hdr(ab->skb); 176 nlh->nlmsg_pid = pid; 177 } 178 } 179 180 void audit_panic(const char *message) 181 { 182 switch (audit_failure) 183 { 184 case AUDIT_FAIL_SILENT: 185 break; 186 case AUDIT_FAIL_PRINTK: 187 if (printk_ratelimit()) 188 printk(KERN_ERR "audit: %s\n", message); 189 break; 190 case AUDIT_FAIL_PANIC: 191 /* test audit_pid since printk is always losey, why bother? */ 192 if (audit_pid) 193 panic("audit: %s\n", message); 194 break; 195 } 196 } 197 198 static inline int audit_rate_check(void) 199 { 200 static unsigned long last_check = 0; 201 static int messages = 0; 202 static DEFINE_SPINLOCK(lock); 203 unsigned long flags; 204 unsigned long now; 205 unsigned long elapsed; 206 int retval = 0; 207 208 if (!audit_rate_limit) return 1; 209 210 spin_lock_irqsave(&lock, flags); 211 if (++messages < audit_rate_limit) { 212 retval = 1; 213 } else { 214 now = jiffies; 215 elapsed = now - last_check; 216 if (elapsed > HZ) { 217 last_check = now; 218 messages = 0; 219 retval = 1; 220 } 221 } 222 spin_unlock_irqrestore(&lock, flags); 223 224 return retval; 225 } 226 227 /** 228 * audit_log_lost - conditionally log lost audit message event 229 * @message: the message stating reason for lost audit message 230 * 231 * Emit at least 1 message per second, even if audit_rate_check is 232 * throttling. 233 * Always increment the lost messages counter. 234 */ 235 void audit_log_lost(const char *message) 236 { 237 static unsigned long last_msg = 0; 238 static DEFINE_SPINLOCK(lock); 239 unsigned long flags; 240 unsigned long now; 241 int print; 242 243 atomic_inc(&audit_lost); 244 245 print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit); 246 247 if (!print) { 248 spin_lock_irqsave(&lock, flags); 249 now = jiffies; 250 if (now - last_msg > HZ) { 251 print = 1; 252 last_msg = now; 253 } 254 spin_unlock_irqrestore(&lock, flags); 255 } 256 257 if (print) { 258 if (printk_ratelimit()) 259 printk(KERN_WARNING 260 "audit: audit_lost=%d audit_rate_limit=%d " 261 "audit_backlog_limit=%d\n", 262 atomic_read(&audit_lost), 263 audit_rate_limit, 264 audit_backlog_limit); 265 audit_panic(message); 266 } 267 } 268 269 static int audit_log_config_change(char *function_name, int new, int old, 270 int allow_changes) 271 { 272 struct audit_buffer *ab; 273 int rc = 0; 274 275 ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE); 276 if (unlikely(!ab)) 277 return rc; 278 audit_log_format(ab, "%s=%d old=%d", function_name, new, old); 279 audit_log_session_info(ab); 280 rc = audit_log_task_context(ab); 281 if (rc) 282 allow_changes = 0; /* Something weird, deny request */ 283 audit_log_format(ab, " res=%d", allow_changes); 284 audit_log_end(ab); 285 return rc; 286 } 287 288 static int audit_do_config_change(char *function_name, int *to_change, int new) 289 { 290 int allow_changes, rc = 0, old = *to_change; 291 292 /* check if we are locked */ 293 if (audit_enabled == AUDIT_LOCKED) 294 allow_changes = 0; 295 else 296 allow_changes = 1; 297 298 if (audit_enabled != AUDIT_OFF) { 299 rc = audit_log_config_change(function_name, new, old, allow_changes); 300 if (rc) 301 allow_changes = 0; 302 } 303 304 /* If we are allowed, make the change */ 305 if (allow_changes == 1) 306 *to_change = new; 307 /* Not allowed, update reason */ 308 else if (rc == 0) 309 rc = -EPERM; 310 return rc; 311 } 312 313 static int audit_set_rate_limit(int limit) 314 { 315 return audit_do_config_change("audit_rate_limit", &audit_rate_limit, limit); 316 } 317 318 static int audit_set_backlog_limit(int limit) 319 { 320 return audit_do_config_change("audit_backlog_limit", &audit_backlog_limit, limit); 321 } 322 323 static int audit_set_enabled(int state) 324 { 325 int rc; 326 if (state < AUDIT_OFF || state > AUDIT_LOCKED) 327 return -EINVAL; 328 329 rc = audit_do_config_change("audit_enabled", &audit_enabled, state); 330 if (!rc) 331 audit_ever_enabled |= !!state; 332 333 return rc; 334 } 335 336 static int audit_set_failure(int state) 337 { 338 if (state != AUDIT_FAIL_SILENT 339 && state != AUDIT_FAIL_PRINTK 340 && state != AUDIT_FAIL_PANIC) 341 return -EINVAL; 342 343 return audit_do_config_change("audit_failure", &audit_failure, state); 344 } 345 346 /* 347 * Queue skbs to be sent to auditd when/if it comes back. These skbs should 348 * already have been sent via prink/syslog and so if these messages are dropped 349 * it is not a huge concern since we already passed the audit_log_lost() 350 * notification and stuff. This is just nice to get audit messages during 351 * boot before auditd is running or messages generated while auditd is stopped. 352 * This only holds messages is audit_default is set, aka booting with audit=1 353 * or building your kernel that way. 354 */ 355 static void audit_hold_skb(struct sk_buff *skb) 356 { 357 if (audit_default && 358 skb_queue_len(&audit_skb_hold_queue) < audit_backlog_limit) 359 skb_queue_tail(&audit_skb_hold_queue, skb); 360 else 361 kfree_skb(skb); 362 } 363 364 /* 365 * For one reason or another this nlh isn't getting delivered to the userspace 366 * audit daemon, just send it to printk. 367 */ 368 static void audit_printk_skb(struct sk_buff *skb) 369 { 370 struct nlmsghdr *nlh = nlmsg_hdr(skb); 371 char *data = nlmsg_data(nlh); 372 373 if (nlh->nlmsg_type != AUDIT_EOE) { 374 if (printk_ratelimit()) 375 printk(KERN_NOTICE "type=%d %s\n", nlh->nlmsg_type, data); 376 else 377 audit_log_lost("printk limit exceeded\n"); 378 } 379 380 audit_hold_skb(skb); 381 } 382 383 static void kauditd_send_skb(struct sk_buff *skb) 384 { 385 int err; 386 /* take a reference in case we can't send it and we want to hold it */ 387 skb_get(skb); 388 err = netlink_unicast(audit_sock, skb, audit_nlk_portid, 0); 389 if (err < 0) { 390 BUG_ON(err != -ECONNREFUSED); /* Shouldn't happen */ 391 printk(KERN_ERR "audit: *NO* daemon at audit_pid=%d\n", audit_pid); 392 audit_log_lost("auditd disappeared\n"); 393 audit_pid = 0; 394 /* we might get lucky and get this in the next auditd */ 395 audit_hold_skb(skb); 396 } else 397 /* drop the extra reference if sent ok */ 398 consume_skb(skb); 399 } 400 401 /* 402 * flush_hold_queue - empty the hold queue if auditd appears 403 * 404 * If auditd just started, drain the queue of messages already 405 * sent to syslog/printk. Remember loss here is ok. We already 406 * called audit_log_lost() if it didn't go out normally. so the 407 * race between the skb_dequeue and the next check for audit_pid 408 * doesn't matter. 409 * 410 * If you ever find kauditd to be too slow we can get a perf win 411 * by doing our own locking and keeping better track if there 412 * are messages in this queue. I don't see the need now, but 413 * in 5 years when I want to play with this again I'll see this 414 * note and still have no friggin idea what i'm thinking today. 415 */ 416 static void flush_hold_queue(void) 417 { 418 struct sk_buff *skb; 419 420 if (!audit_default || !audit_pid) 421 return; 422 423 skb = skb_dequeue(&audit_skb_hold_queue); 424 if (likely(!skb)) 425 return; 426 427 while (skb && audit_pid) { 428 kauditd_send_skb(skb); 429 skb = skb_dequeue(&audit_skb_hold_queue); 430 } 431 432 /* 433 * if auditd just disappeared but we 434 * dequeued an skb we need to drop ref 435 */ 436 if (skb) 437 consume_skb(skb); 438 } 439 440 static int kauditd_thread(void *dummy) 441 { 442 set_freezable(); 443 while (!kthread_should_stop()) { 444 struct sk_buff *skb; 445 DECLARE_WAITQUEUE(wait, current); 446 447 flush_hold_queue(); 448 449 skb = skb_dequeue(&audit_skb_queue); 450 wake_up(&audit_backlog_wait); 451 if (skb) { 452 if (audit_pid) 453 kauditd_send_skb(skb); 454 else 455 audit_printk_skb(skb); 456 continue; 457 } 458 set_current_state(TASK_INTERRUPTIBLE); 459 add_wait_queue(&kauditd_wait, &wait); 460 461 if (!skb_queue_len(&audit_skb_queue)) { 462 try_to_freeze(); 463 schedule(); 464 } 465 466 __set_current_state(TASK_RUNNING); 467 remove_wait_queue(&kauditd_wait, &wait); 468 } 469 return 0; 470 } 471 472 int audit_send_list(void *_dest) 473 { 474 struct audit_netlink_list *dest = _dest; 475 int pid = dest->pid; 476 struct sk_buff *skb; 477 478 /* wait for parent to finish and send an ACK */ 479 mutex_lock(&audit_cmd_mutex); 480 mutex_unlock(&audit_cmd_mutex); 481 482 while ((skb = __skb_dequeue(&dest->q)) != NULL) 483 netlink_unicast(audit_sock, skb, pid, 0); 484 485 kfree(dest); 486 487 return 0; 488 } 489 490 struct sk_buff *audit_make_reply(int pid, int seq, int type, int done, 491 int multi, const void *payload, int size) 492 { 493 struct sk_buff *skb; 494 struct nlmsghdr *nlh; 495 void *data; 496 int flags = multi ? NLM_F_MULTI : 0; 497 int t = done ? NLMSG_DONE : type; 498 499 skb = nlmsg_new(size, GFP_KERNEL); 500 if (!skb) 501 return NULL; 502 503 nlh = nlmsg_put(skb, pid, seq, t, size, flags); 504 if (!nlh) 505 goto out_kfree_skb; 506 data = nlmsg_data(nlh); 507 memcpy(data, payload, size); 508 return skb; 509 510 out_kfree_skb: 511 kfree_skb(skb); 512 return NULL; 513 } 514 515 static int audit_send_reply_thread(void *arg) 516 { 517 struct audit_reply *reply = (struct audit_reply *)arg; 518 519 mutex_lock(&audit_cmd_mutex); 520 mutex_unlock(&audit_cmd_mutex); 521 522 /* Ignore failure. It'll only happen if the sender goes away, 523 because our timeout is set to infinite. */ 524 netlink_unicast(audit_sock, reply->skb, reply->pid, 0); 525 kfree(reply); 526 return 0; 527 } 528 /** 529 * audit_send_reply - send an audit reply message via netlink 530 * @pid: process id to send reply to 531 * @seq: sequence number 532 * @type: audit message type 533 * @done: done (last) flag 534 * @multi: multi-part message flag 535 * @payload: payload data 536 * @size: payload size 537 * 538 * Allocates an skb, builds the netlink message, and sends it to the pid. 539 * No failure notifications. 540 */ 541 static void audit_send_reply(int pid, int seq, int type, int done, int multi, 542 const void *payload, int size) 543 { 544 struct sk_buff *skb; 545 struct task_struct *tsk; 546 struct audit_reply *reply = kmalloc(sizeof(struct audit_reply), 547 GFP_KERNEL); 548 549 if (!reply) 550 return; 551 552 skb = audit_make_reply(pid, seq, type, done, multi, payload, size); 553 if (!skb) 554 goto out; 555 556 reply->pid = pid; 557 reply->skb = skb; 558 559 tsk = kthread_run(audit_send_reply_thread, reply, "audit_send_reply"); 560 if (!IS_ERR(tsk)) 561 return; 562 kfree_skb(skb); 563 out: 564 kfree(reply); 565 } 566 567 /* 568 * Check for appropriate CAP_AUDIT_ capabilities on incoming audit 569 * control messages. 570 */ 571 static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type) 572 { 573 int err = 0; 574 575 /* Only support the initial namespaces for now. */ 576 if ((current_user_ns() != &init_user_ns) || 577 (task_active_pid_ns(current) != &init_pid_ns)) 578 return -EPERM; 579 580 switch (msg_type) { 581 case AUDIT_LIST: 582 case AUDIT_ADD: 583 case AUDIT_DEL: 584 return -EOPNOTSUPP; 585 case AUDIT_GET: 586 case AUDIT_SET: 587 case AUDIT_LIST_RULES: 588 case AUDIT_ADD_RULE: 589 case AUDIT_DEL_RULE: 590 case AUDIT_SIGNAL_INFO: 591 case AUDIT_TTY_GET: 592 case AUDIT_TTY_SET: 593 case AUDIT_TRIM: 594 case AUDIT_MAKE_EQUIV: 595 if (!capable(CAP_AUDIT_CONTROL)) 596 err = -EPERM; 597 break; 598 case AUDIT_USER: 599 case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG: 600 case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2: 601 if (!capable(CAP_AUDIT_WRITE)) 602 err = -EPERM; 603 break; 604 default: /* bad msg */ 605 err = -EINVAL; 606 } 607 608 return err; 609 } 610 611 static int audit_log_common_recv_msg(struct audit_buffer **ab, u16 msg_type) 612 { 613 int rc = 0; 614 uid_t uid = from_kuid(&init_user_ns, current_uid()); 615 616 if (!audit_enabled) { 617 *ab = NULL; 618 return rc; 619 } 620 621 *ab = audit_log_start(NULL, GFP_KERNEL, msg_type); 622 if (unlikely(!*ab)) 623 return rc; 624 audit_log_format(*ab, "pid=%d uid=%u", task_tgid_vnr(current), uid); 625 audit_log_session_info(*ab); 626 audit_log_task_context(*ab); 627 628 return rc; 629 } 630 631 static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) 632 { 633 u32 seq; 634 void *data; 635 struct audit_status *status_get, status_set; 636 int err; 637 struct audit_buffer *ab; 638 u16 msg_type = nlh->nlmsg_type; 639 struct audit_sig_info *sig_data; 640 char *ctx = NULL; 641 u32 len; 642 643 err = audit_netlink_ok(skb, msg_type); 644 if (err) 645 return err; 646 647 /* As soon as there's any sign of userspace auditd, 648 * start kauditd to talk to it */ 649 if (!kauditd_task) { 650 kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd"); 651 if (IS_ERR(kauditd_task)) { 652 err = PTR_ERR(kauditd_task); 653 kauditd_task = NULL; 654 return err; 655 } 656 } 657 seq = nlh->nlmsg_seq; 658 data = nlmsg_data(nlh); 659 660 switch (msg_type) { 661 case AUDIT_GET: 662 status_set.enabled = audit_enabled; 663 status_set.failure = audit_failure; 664 status_set.pid = audit_pid; 665 status_set.rate_limit = audit_rate_limit; 666 status_set.backlog_limit = audit_backlog_limit; 667 status_set.lost = atomic_read(&audit_lost); 668 status_set.backlog = skb_queue_len(&audit_skb_queue); 669 audit_send_reply(NETLINK_CB(skb).portid, seq, AUDIT_GET, 0, 0, 670 &status_set, sizeof(status_set)); 671 break; 672 case AUDIT_SET: 673 if (nlh->nlmsg_len < sizeof(struct audit_status)) 674 return -EINVAL; 675 status_get = (struct audit_status *)data; 676 if (status_get->mask & AUDIT_STATUS_ENABLED) { 677 err = audit_set_enabled(status_get->enabled); 678 if (err < 0) 679 return err; 680 } 681 if (status_get->mask & AUDIT_STATUS_FAILURE) { 682 err = audit_set_failure(status_get->failure); 683 if (err < 0) 684 return err; 685 } 686 if (status_get->mask & AUDIT_STATUS_PID) { 687 int new_pid = status_get->pid; 688 689 if (audit_enabled != AUDIT_OFF) 690 audit_log_config_change("audit_pid", new_pid, audit_pid, 1); 691 audit_pid = new_pid; 692 audit_nlk_portid = NETLINK_CB(skb).portid; 693 } 694 if (status_get->mask & AUDIT_STATUS_RATE_LIMIT) { 695 err = audit_set_rate_limit(status_get->rate_limit); 696 if (err < 0) 697 return err; 698 } 699 if (status_get->mask & AUDIT_STATUS_BACKLOG_LIMIT) 700 err = audit_set_backlog_limit(status_get->backlog_limit); 701 break; 702 case AUDIT_USER: 703 case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG: 704 case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2: 705 if (!audit_enabled && msg_type != AUDIT_USER_AVC) 706 return 0; 707 708 err = audit_filter_user(msg_type); 709 if (err == 1) { 710 err = 0; 711 if (msg_type == AUDIT_USER_TTY) { 712 err = tty_audit_push_current(); 713 if (err) 714 break; 715 } 716 audit_log_common_recv_msg(&ab, msg_type); 717 if (msg_type != AUDIT_USER_TTY) 718 audit_log_format(ab, " msg='%.1024s'", 719 (char *)data); 720 else { 721 int size; 722 723 audit_log_format(ab, " data="); 724 size = nlmsg_len(nlh); 725 if (size > 0 && 726 ((unsigned char *)data)[size - 1] == '\0') 727 size--; 728 audit_log_n_untrustedstring(ab, data, size); 729 } 730 audit_set_pid(ab, NETLINK_CB(skb).portid); 731 audit_log_end(ab); 732 } 733 break; 734 case AUDIT_ADD_RULE: 735 case AUDIT_DEL_RULE: 736 if (nlmsg_len(nlh) < sizeof(struct audit_rule_data)) 737 return -EINVAL; 738 if (audit_enabled == AUDIT_LOCKED) { 739 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE); 740 audit_log_format(ab, " audit_enabled=%d res=0", audit_enabled); 741 audit_log_end(ab); 742 return -EPERM; 743 } 744 /* fallthrough */ 745 case AUDIT_LIST_RULES: 746 err = audit_receive_filter(msg_type, NETLINK_CB(skb).portid, 747 seq, data, nlmsg_len(nlh)); 748 break; 749 case AUDIT_TRIM: 750 audit_trim_trees(); 751 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE); 752 audit_log_format(ab, " op=trim res=1"); 753 audit_log_end(ab); 754 break; 755 case AUDIT_MAKE_EQUIV: { 756 void *bufp = data; 757 u32 sizes[2]; 758 size_t msglen = nlmsg_len(nlh); 759 char *old, *new; 760 761 err = -EINVAL; 762 if (msglen < 2 * sizeof(u32)) 763 break; 764 memcpy(sizes, bufp, 2 * sizeof(u32)); 765 bufp += 2 * sizeof(u32); 766 msglen -= 2 * sizeof(u32); 767 old = audit_unpack_string(&bufp, &msglen, sizes[0]); 768 if (IS_ERR(old)) { 769 err = PTR_ERR(old); 770 break; 771 } 772 new = audit_unpack_string(&bufp, &msglen, sizes[1]); 773 if (IS_ERR(new)) { 774 err = PTR_ERR(new); 775 kfree(old); 776 break; 777 } 778 /* OK, here comes... */ 779 err = audit_tag_tree(old, new); 780 781 audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE); 782 783 audit_log_format(ab, " op=make_equiv old="); 784 audit_log_untrustedstring(ab, old); 785 audit_log_format(ab, " new="); 786 audit_log_untrustedstring(ab, new); 787 audit_log_format(ab, " res=%d", !err); 788 audit_log_end(ab); 789 kfree(old); 790 kfree(new); 791 break; 792 } 793 case AUDIT_SIGNAL_INFO: 794 len = 0; 795 if (audit_sig_sid) { 796 err = security_secid_to_secctx(audit_sig_sid, &ctx, &len); 797 if (err) 798 return err; 799 } 800 sig_data = kmalloc(sizeof(*sig_data) + len, GFP_KERNEL); 801 if (!sig_data) { 802 if (audit_sig_sid) 803 security_release_secctx(ctx, len); 804 return -ENOMEM; 805 } 806 sig_data->uid = from_kuid(&init_user_ns, audit_sig_uid); 807 sig_data->pid = audit_sig_pid; 808 if (audit_sig_sid) { 809 memcpy(sig_data->ctx, ctx, len); 810 security_release_secctx(ctx, len); 811 } 812 audit_send_reply(NETLINK_CB(skb).portid, seq, AUDIT_SIGNAL_INFO, 813 0, 0, sig_data, sizeof(*sig_data) + len); 814 kfree(sig_data); 815 break; 816 case AUDIT_TTY_GET: { 817 struct audit_tty_status s; 818 struct task_struct *tsk = current; 819 820 spin_lock(&tsk->sighand->siglock); 821 s.enabled = tsk->signal->audit_tty != 0; 822 s.log_passwd = tsk->signal->audit_tty_log_passwd; 823 spin_unlock(&tsk->sighand->siglock); 824 825 audit_send_reply(NETLINK_CB(skb).portid, seq, 826 AUDIT_TTY_GET, 0, 0, &s, sizeof(s)); 827 break; 828 } 829 case AUDIT_TTY_SET: { 830 struct audit_tty_status s; 831 struct task_struct *tsk = current; 832 833 memset(&s, 0, sizeof(s)); 834 /* guard against past and future API changes */ 835 memcpy(&s, data, min(sizeof(s), (size_t)nlh->nlmsg_len)); 836 if ((s.enabled != 0 && s.enabled != 1) || 837 (s.log_passwd != 0 && s.log_passwd != 1)) 838 return -EINVAL; 839 840 spin_lock(&tsk->sighand->siglock); 841 tsk->signal->audit_tty = s.enabled; 842 tsk->signal->audit_tty_log_passwd = s.log_passwd; 843 spin_unlock(&tsk->sighand->siglock); 844 break; 845 } 846 default: 847 err = -EINVAL; 848 break; 849 } 850 851 return err < 0 ? err : 0; 852 } 853 854 /* 855 * Get message from skb. Each message is processed by audit_receive_msg. 856 * Malformed skbs with wrong length are discarded silently. 857 */ 858 static void audit_receive_skb(struct sk_buff *skb) 859 { 860 struct nlmsghdr *nlh; 861 /* 862 * len MUST be signed for nlmsg_next to be able to dec it below 0 863 * if the nlmsg_len was not aligned 864 */ 865 int len; 866 int err; 867 868 nlh = nlmsg_hdr(skb); 869 len = skb->len; 870 871 while (nlmsg_ok(nlh, len)) { 872 err = audit_receive_msg(skb, nlh); 873 /* if err or if this message says it wants a response */ 874 if (err || (nlh->nlmsg_flags & NLM_F_ACK)) 875 netlink_ack(skb, nlh, err); 876 877 nlh = nlmsg_next(nlh, &len); 878 } 879 } 880 881 /* Receive messages from netlink socket. */ 882 static void audit_receive(struct sk_buff *skb) 883 { 884 mutex_lock(&audit_cmd_mutex); 885 audit_receive_skb(skb); 886 mutex_unlock(&audit_cmd_mutex); 887 } 888 889 /* Initialize audit support at boot time. */ 890 static int __init audit_init(void) 891 { 892 int i; 893 struct netlink_kernel_cfg cfg = { 894 .input = audit_receive, 895 }; 896 897 if (audit_initialized == AUDIT_DISABLED) 898 return 0; 899 900 printk(KERN_INFO "audit: initializing netlink socket (%s)\n", 901 audit_default ? "enabled" : "disabled"); 902 audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, &cfg); 903 if (!audit_sock) 904 audit_panic("cannot initialize netlink socket"); 905 else 906 audit_sock->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT; 907 908 skb_queue_head_init(&audit_skb_queue); 909 skb_queue_head_init(&audit_skb_hold_queue); 910 audit_initialized = AUDIT_INITIALIZED; 911 audit_enabled = audit_default; 912 audit_ever_enabled |= !!audit_default; 913 914 audit_log(NULL, GFP_KERNEL, AUDIT_KERNEL, "initialized"); 915 916 for (i = 0; i < AUDIT_INODE_BUCKETS; i++) 917 INIT_LIST_HEAD(&audit_inode_hash[i]); 918 919 return 0; 920 } 921 __initcall(audit_init); 922 923 /* Process kernel command-line parameter at boot time. audit=0 or audit=1. */ 924 static int __init audit_enable(char *str) 925 { 926 audit_default = !!simple_strtol(str, NULL, 0); 927 if (!audit_default) 928 audit_initialized = AUDIT_DISABLED; 929 930 printk(KERN_INFO "audit: %s", audit_default ? "enabled" : "disabled"); 931 932 if (audit_initialized == AUDIT_INITIALIZED) { 933 audit_enabled = audit_default; 934 audit_ever_enabled |= !!audit_default; 935 } else if (audit_initialized == AUDIT_UNINITIALIZED) { 936 printk(" (after initialization)"); 937 } else { 938 printk(" (until reboot)"); 939 } 940 printk("\n"); 941 942 return 1; 943 } 944 945 __setup("audit=", audit_enable); 946 947 static void audit_buffer_free(struct audit_buffer *ab) 948 { 949 unsigned long flags; 950 951 if (!ab) 952 return; 953 954 if (ab->skb) 955 kfree_skb(ab->skb); 956 957 spin_lock_irqsave(&audit_freelist_lock, flags); 958 if (audit_freelist_count > AUDIT_MAXFREE) 959 kfree(ab); 960 else { 961 audit_freelist_count++; 962 list_add(&ab->list, &audit_freelist); 963 } 964 spin_unlock_irqrestore(&audit_freelist_lock, flags); 965 } 966 967 static struct audit_buffer * audit_buffer_alloc(struct audit_context *ctx, 968 gfp_t gfp_mask, int type) 969 { 970 unsigned long flags; 971 struct audit_buffer *ab = NULL; 972 struct nlmsghdr *nlh; 973 974 spin_lock_irqsave(&audit_freelist_lock, flags); 975 if (!list_empty(&audit_freelist)) { 976 ab = list_entry(audit_freelist.next, 977 struct audit_buffer, list); 978 list_del(&ab->list); 979 --audit_freelist_count; 980 } 981 spin_unlock_irqrestore(&audit_freelist_lock, flags); 982 983 if (!ab) { 984 ab = kmalloc(sizeof(*ab), gfp_mask); 985 if (!ab) 986 goto err; 987 } 988 989 ab->ctx = ctx; 990 ab->gfp_mask = gfp_mask; 991 992 ab->skb = nlmsg_new(AUDIT_BUFSIZ, gfp_mask); 993 if (!ab->skb) 994 goto err; 995 996 nlh = nlmsg_put(ab->skb, 0, 0, type, 0, 0); 997 if (!nlh) 998 goto out_kfree_skb; 999 1000 return ab; 1001 1002 out_kfree_skb: 1003 kfree_skb(ab->skb); 1004 ab->skb = NULL; 1005 err: 1006 audit_buffer_free(ab); 1007 return NULL; 1008 } 1009 1010 /** 1011 * audit_serial - compute a serial number for the audit record 1012 * 1013 * Compute a serial number for the audit record. Audit records are 1014 * written to user-space as soon as they are generated, so a complete 1015 * audit record may be written in several pieces. The timestamp of the 1016 * record and this serial number are used by the user-space tools to 1017 * determine which pieces belong to the same audit record. The 1018 * (timestamp,serial) tuple is unique for each syscall and is live from 1019 * syscall entry to syscall exit. 1020 * 1021 * NOTE: Another possibility is to store the formatted records off the 1022 * audit context (for those records that have a context), and emit them 1023 * all at syscall exit. However, this could delay the reporting of 1024 * significant errors until syscall exit (or never, if the system 1025 * halts). 1026 */ 1027 unsigned int audit_serial(void) 1028 { 1029 static DEFINE_SPINLOCK(serial_lock); 1030 static unsigned int serial = 0; 1031 1032 unsigned long flags; 1033 unsigned int ret; 1034 1035 spin_lock_irqsave(&serial_lock, flags); 1036 do { 1037 ret = ++serial; 1038 } while (unlikely(!ret)); 1039 spin_unlock_irqrestore(&serial_lock, flags); 1040 1041 return ret; 1042 } 1043 1044 static inline void audit_get_stamp(struct audit_context *ctx, 1045 struct timespec *t, unsigned int *serial) 1046 { 1047 if (!ctx || !auditsc_get_stamp(ctx, t, serial)) { 1048 *t = CURRENT_TIME; 1049 *serial = audit_serial(); 1050 } 1051 } 1052 1053 /* 1054 * Wait for auditd to drain the queue a little 1055 */ 1056 static void wait_for_auditd(unsigned long sleep_time) 1057 { 1058 DECLARE_WAITQUEUE(wait, current); 1059 set_current_state(TASK_UNINTERRUPTIBLE); 1060 add_wait_queue(&audit_backlog_wait, &wait); 1061 1062 if (audit_backlog_limit && 1063 skb_queue_len(&audit_skb_queue) > audit_backlog_limit) 1064 schedule_timeout(sleep_time); 1065 1066 __set_current_state(TASK_RUNNING); 1067 remove_wait_queue(&audit_backlog_wait, &wait); 1068 } 1069 1070 /* Obtain an audit buffer. This routine does locking to obtain the 1071 * audit buffer, but then no locking is required for calls to 1072 * audit_log_*format. If the tsk is a task that is currently in a 1073 * syscall, then the syscall is marked as auditable and an audit record 1074 * will be written at syscall exit. If there is no associated task, tsk 1075 * should be NULL. */ 1076 1077 /** 1078 * audit_log_start - obtain an audit buffer 1079 * @ctx: audit_context (may be NULL) 1080 * @gfp_mask: type of allocation 1081 * @type: audit message type 1082 * 1083 * Returns audit_buffer pointer on success or NULL on error. 1084 * 1085 * Obtain an audit buffer. This routine does locking to obtain the 1086 * audit buffer, but then no locking is required for calls to 1087 * audit_log_*format. If the task (ctx) is a task that is currently in a 1088 * syscall, then the syscall is marked as auditable and an audit record 1089 * will be written at syscall exit. If there is no associated task, then 1090 * task context (ctx) should be NULL. 1091 */ 1092 struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask, 1093 int type) 1094 { 1095 struct audit_buffer *ab = NULL; 1096 struct timespec t; 1097 unsigned int uninitialized_var(serial); 1098 int reserve; 1099 unsigned long timeout_start = jiffies; 1100 1101 if (audit_initialized != AUDIT_INITIALIZED) 1102 return NULL; 1103 1104 if (unlikely(audit_filter_type(type))) 1105 return NULL; 1106 1107 if (gfp_mask & __GFP_WAIT) 1108 reserve = 0; 1109 else 1110 reserve = 5; /* Allow atomic callers to go up to five 1111 entries over the normal backlog limit */ 1112 1113 while (audit_backlog_limit 1114 && skb_queue_len(&audit_skb_queue) > audit_backlog_limit + reserve) { 1115 if (gfp_mask & __GFP_WAIT && audit_backlog_wait_time) { 1116 unsigned long sleep_time; 1117 1118 sleep_time = timeout_start + audit_backlog_wait_time - 1119 jiffies; 1120 if ((long)sleep_time > 0) { 1121 wait_for_auditd(sleep_time); 1122 continue; 1123 } 1124 } 1125 if (audit_rate_check() && printk_ratelimit()) 1126 printk(KERN_WARNING 1127 "audit: audit_backlog=%d > " 1128 "audit_backlog_limit=%d\n", 1129 skb_queue_len(&audit_skb_queue), 1130 audit_backlog_limit); 1131 audit_log_lost("backlog limit exceeded"); 1132 audit_backlog_wait_time = audit_backlog_wait_overflow; 1133 wake_up(&audit_backlog_wait); 1134 return NULL; 1135 } 1136 1137 ab = audit_buffer_alloc(ctx, gfp_mask, type); 1138 if (!ab) { 1139 audit_log_lost("out of memory in audit_log_start"); 1140 return NULL; 1141 } 1142 1143 audit_get_stamp(ab->ctx, &t, &serial); 1144 1145 audit_log_format(ab, "audit(%lu.%03lu:%u): ", 1146 t.tv_sec, t.tv_nsec/1000000, serial); 1147 return ab; 1148 } 1149 1150 /** 1151 * audit_expand - expand skb in the audit buffer 1152 * @ab: audit_buffer 1153 * @extra: space to add at tail of the skb 1154 * 1155 * Returns 0 (no space) on failed expansion, or available space if 1156 * successful. 1157 */ 1158 static inline int audit_expand(struct audit_buffer *ab, int extra) 1159 { 1160 struct sk_buff *skb = ab->skb; 1161 int oldtail = skb_tailroom(skb); 1162 int ret = pskb_expand_head(skb, 0, extra, ab->gfp_mask); 1163 int newtail = skb_tailroom(skb); 1164 1165 if (ret < 0) { 1166 audit_log_lost("out of memory in audit_expand"); 1167 return 0; 1168 } 1169 1170 skb->truesize += newtail - oldtail; 1171 return newtail; 1172 } 1173 1174 /* 1175 * Format an audit message into the audit buffer. If there isn't enough 1176 * room in the audit buffer, more room will be allocated and vsnprint 1177 * will be called a second time. Currently, we assume that a printk 1178 * can't format message larger than 1024 bytes, so we don't either. 1179 */ 1180 static void audit_log_vformat(struct audit_buffer *ab, const char *fmt, 1181 va_list args) 1182 { 1183 int len, avail; 1184 struct sk_buff *skb; 1185 va_list args2; 1186 1187 if (!ab) 1188 return; 1189 1190 BUG_ON(!ab->skb); 1191 skb = ab->skb; 1192 avail = skb_tailroom(skb); 1193 if (avail == 0) { 1194 avail = audit_expand(ab, AUDIT_BUFSIZ); 1195 if (!avail) 1196 goto out; 1197 } 1198 va_copy(args2, args); 1199 len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args); 1200 if (len >= avail) { 1201 /* The printk buffer is 1024 bytes long, so if we get 1202 * here and AUDIT_BUFSIZ is at least 1024, then we can 1203 * log everything that printk could have logged. */ 1204 avail = audit_expand(ab, 1205 max_t(unsigned, AUDIT_BUFSIZ, 1+len-avail)); 1206 if (!avail) 1207 goto out_va_end; 1208 len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args2); 1209 } 1210 if (len > 0) 1211 skb_put(skb, len); 1212 out_va_end: 1213 va_end(args2); 1214 out: 1215 return; 1216 } 1217 1218 /** 1219 * audit_log_format - format a message into the audit buffer. 1220 * @ab: audit_buffer 1221 * @fmt: format string 1222 * @...: optional parameters matching @fmt string 1223 * 1224 * All the work is done in audit_log_vformat. 1225 */ 1226 void audit_log_format(struct audit_buffer *ab, const char *fmt, ...) 1227 { 1228 va_list args; 1229 1230 if (!ab) 1231 return; 1232 va_start(args, fmt); 1233 audit_log_vformat(ab, fmt, args); 1234 va_end(args); 1235 } 1236 1237 /** 1238 * audit_log_hex - convert a buffer to hex and append it to the audit skb 1239 * @ab: the audit_buffer 1240 * @buf: buffer to convert to hex 1241 * @len: length of @buf to be converted 1242 * 1243 * No return value; failure to expand is silently ignored. 1244 * 1245 * This function will take the passed buf and convert it into a string of 1246 * ascii hex digits. The new string is placed onto the skb. 1247 */ 1248 void audit_log_n_hex(struct audit_buffer *ab, const unsigned char *buf, 1249 size_t len) 1250 { 1251 int i, avail, new_len; 1252 unsigned char *ptr; 1253 struct sk_buff *skb; 1254 static const unsigned char *hex = "0123456789ABCDEF"; 1255 1256 if (!ab) 1257 return; 1258 1259 BUG_ON(!ab->skb); 1260 skb = ab->skb; 1261 avail = skb_tailroom(skb); 1262 new_len = len<<1; 1263 if (new_len >= avail) { 1264 /* Round the buffer request up to the next multiple */ 1265 new_len = AUDIT_BUFSIZ*(((new_len-avail)/AUDIT_BUFSIZ) + 1); 1266 avail = audit_expand(ab, new_len); 1267 if (!avail) 1268 return; 1269 } 1270 1271 ptr = skb_tail_pointer(skb); 1272 for (i=0; i<len; i++) { 1273 *ptr++ = hex[(buf[i] & 0xF0)>>4]; /* Upper nibble */ 1274 *ptr++ = hex[buf[i] & 0x0F]; /* Lower nibble */ 1275 } 1276 *ptr = 0; 1277 skb_put(skb, len << 1); /* new string is twice the old string */ 1278 } 1279 1280 /* 1281 * Format a string of no more than slen characters into the audit buffer, 1282 * enclosed in quote marks. 1283 */ 1284 void audit_log_n_string(struct audit_buffer *ab, const char *string, 1285 size_t slen) 1286 { 1287 int avail, new_len; 1288 unsigned char *ptr; 1289 struct sk_buff *skb; 1290 1291 if (!ab) 1292 return; 1293 1294 BUG_ON(!ab->skb); 1295 skb = ab->skb; 1296 avail = skb_tailroom(skb); 1297 new_len = slen + 3; /* enclosing quotes + null terminator */ 1298 if (new_len > avail) { 1299 avail = audit_expand(ab, new_len); 1300 if (!avail) 1301 return; 1302 } 1303 ptr = skb_tail_pointer(skb); 1304 *ptr++ = '"'; 1305 memcpy(ptr, string, slen); 1306 ptr += slen; 1307 *ptr++ = '"'; 1308 *ptr = 0; 1309 skb_put(skb, slen + 2); /* don't include null terminator */ 1310 } 1311 1312 /** 1313 * audit_string_contains_control - does a string need to be logged in hex 1314 * @string: string to be checked 1315 * @len: max length of the string to check 1316 */ 1317 int audit_string_contains_control(const char *string, size_t len) 1318 { 1319 const unsigned char *p; 1320 for (p = string; p < (const unsigned char *)string + len; p++) { 1321 if (*p == '"' || *p < 0x21 || *p > 0x7e) 1322 return 1; 1323 } 1324 return 0; 1325 } 1326 1327 /** 1328 * audit_log_n_untrustedstring - log a string that may contain random characters 1329 * @ab: audit_buffer 1330 * @len: length of string (not including trailing null) 1331 * @string: string to be logged 1332 * 1333 * This code will escape a string that is passed to it if the string 1334 * contains a control character, unprintable character, double quote mark, 1335 * or a space. Unescaped strings will start and end with a double quote mark. 1336 * Strings that are escaped are printed in hex (2 digits per char). 1337 * 1338 * The caller specifies the number of characters in the string to log, which may 1339 * or may not be the entire string. 1340 */ 1341 void audit_log_n_untrustedstring(struct audit_buffer *ab, const char *string, 1342 size_t len) 1343 { 1344 if (audit_string_contains_control(string, len)) 1345 audit_log_n_hex(ab, string, len); 1346 else 1347 audit_log_n_string(ab, string, len); 1348 } 1349 1350 /** 1351 * audit_log_untrustedstring - log a string that may contain random characters 1352 * @ab: audit_buffer 1353 * @string: string to be logged 1354 * 1355 * Same as audit_log_n_untrustedstring(), except that strlen is used to 1356 * determine string length. 1357 */ 1358 void audit_log_untrustedstring(struct audit_buffer *ab, const char *string) 1359 { 1360 audit_log_n_untrustedstring(ab, string, strlen(string)); 1361 } 1362 1363 /* This is a helper-function to print the escaped d_path */ 1364 void audit_log_d_path(struct audit_buffer *ab, const char *prefix, 1365 const struct path *path) 1366 { 1367 char *p, *pathname; 1368 1369 if (prefix) 1370 audit_log_format(ab, "%s", prefix); 1371 1372 /* We will allow 11 spaces for ' (deleted)' to be appended */ 1373 pathname = kmalloc(PATH_MAX+11, ab->gfp_mask); 1374 if (!pathname) { 1375 audit_log_string(ab, "<no_memory>"); 1376 return; 1377 } 1378 p = d_path(path, pathname, PATH_MAX+11); 1379 if (IS_ERR(p)) { /* Should never happen since we send PATH_MAX */ 1380 /* FIXME: can we save some information here? */ 1381 audit_log_string(ab, "<too_long>"); 1382 } else 1383 audit_log_untrustedstring(ab, p); 1384 kfree(pathname); 1385 } 1386 1387 void audit_log_session_info(struct audit_buffer *ab) 1388 { 1389 u32 sessionid = audit_get_sessionid(current); 1390 uid_t auid = from_kuid(&init_user_ns, audit_get_loginuid(current)); 1391 1392 audit_log_format(ab, " auid=%u ses=%u\n", auid, sessionid); 1393 } 1394 1395 void audit_log_key(struct audit_buffer *ab, char *key) 1396 { 1397 audit_log_format(ab, " key="); 1398 if (key) 1399 audit_log_untrustedstring(ab, key); 1400 else 1401 audit_log_format(ab, "(null)"); 1402 } 1403 1404 void audit_log_cap(struct audit_buffer *ab, char *prefix, kernel_cap_t *cap) 1405 { 1406 int i; 1407 1408 audit_log_format(ab, " %s=", prefix); 1409 CAP_FOR_EACH_U32(i) { 1410 audit_log_format(ab, "%08x", 1411 cap->cap[(_KERNEL_CAPABILITY_U32S-1) - i]); 1412 } 1413 } 1414 1415 void audit_log_fcaps(struct audit_buffer *ab, struct audit_names *name) 1416 { 1417 kernel_cap_t *perm = &name->fcap.permitted; 1418 kernel_cap_t *inh = &name->fcap.inheritable; 1419 int log = 0; 1420 1421 if (!cap_isclear(*perm)) { 1422 audit_log_cap(ab, "cap_fp", perm); 1423 log = 1; 1424 } 1425 if (!cap_isclear(*inh)) { 1426 audit_log_cap(ab, "cap_fi", inh); 1427 log = 1; 1428 } 1429 1430 if (log) 1431 audit_log_format(ab, " cap_fe=%d cap_fver=%x", 1432 name->fcap.fE, name->fcap_ver); 1433 } 1434 1435 static inline int audit_copy_fcaps(struct audit_names *name, 1436 const struct dentry *dentry) 1437 { 1438 struct cpu_vfs_cap_data caps; 1439 int rc; 1440 1441 if (!dentry) 1442 return 0; 1443 1444 rc = get_vfs_caps_from_disk(dentry, &caps); 1445 if (rc) 1446 return rc; 1447 1448 name->fcap.permitted = caps.permitted; 1449 name->fcap.inheritable = caps.inheritable; 1450 name->fcap.fE = !!(caps.magic_etc & VFS_CAP_FLAGS_EFFECTIVE); 1451 name->fcap_ver = (caps.magic_etc & VFS_CAP_REVISION_MASK) >> 1452 VFS_CAP_REVISION_SHIFT; 1453 1454 return 0; 1455 } 1456 1457 /* Copy inode data into an audit_names. */ 1458 void audit_copy_inode(struct audit_names *name, const struct dentry *dentry, 1459 const struct inode *inode) 1460 { 1461 name->ino = inode->i_ino; 1462 name->dev = inode->i_sb->s_dev; 1463 name->mode = inode->i_mode; 1464 name->uid = inode->i_uid; 1465 name->gid = inode->i_gid; 1466 name->rdev = inode->i_rdev; 1467 security_inode_getsecid(inode, &name->osid); 1468 audit_copy_fcaps(name, dentry); 1469 } 1470 1471 /** 1472 * audit_log_name - produce AUDIT_PATH record from struct audit_names 1473 * @context: audit_context for the task 1474 * @n: audit_names structure with reportable details 1475 * @path: optional path to report instead of audit_names->name 1476 * @record_num: record number to report when handling a list of names 1477 * @call_panic: optional pointer to int that will be updated if secid fails 1478 */ 1479 void audit_log_name(struct audit_context *context, struct audit_names *n, 1480 struct path *path, int record_num, int *call_panic) 1481 { 1482 struct audit_buffer *ab; 1483 ab = audit_log_start(context, GFP_KERNEL, AUDIT_PATH); 1484 if (!ab) 1485 return; 1486 1487 audit_log_format(ab, "item=%d", record_num); 1488 1489 if (path) 1490 audit_log_d_path(ab, " name=", path); 1491 else if (n->name) { 1492 switch (n->name_len) { 1493 case AUDIT_NAME_FULL: 1494 /* log the full path */ 1495 audit_log_format(ab, " name="); 1496 audit_log_untrustedstring(ab, n->name->name); 1497 break; 1498 case 0: 1499 /* name was specified as a relative path and the 1500 * directory component is the cwd */ 1501 audit_log_d_path(ab, " name=", &context->pwd); 1502 break; 1503 default: 1504 /* log the name's directory component */ 1505 audit_log_format(ab, " name="); 1506 audit_log_n_untrustedstring(ab, n->name->name, 1507 n->name_len); 1508 } 1509 } else 1510 audit_log_format(ab, " name=(null)"); 1511 1512 if (n->ino != (unsigned long)-1) { 1513 audit_log_format(ab, " inode=%lu" 1514 " dev=%02x:%02x mode=%#ho" 1515 " ouid=%u ogid=%u rdev=%02x:%02x", 1516 n->ino, 1517 MAJOR(n->dev), 1518 MINOR(n->dev), 1519 n->mode, 1520 from_kuid(&init_user_ns, n->uid), 1521 from_kgid(&init_user_ns, n->gid), 1522 MAJOR(n->rdev), 1523 MINOR(n->rdev)); 1524 } 1525 if (n->osid != 0) { 1526 char *ctx = NULL; 1527 u32 len; 1528 if (security_secid_to_secctx( 1529 n->osid, &ctx, &len)) { 1530 audit_log_format(ab, " osid=%u", n->osid); 1531 if (call_panic) 1532 *call_panic = 2; 1533 } else { 1534 audit_log_format(ab, " obj=%s", ctx); 1535 security_release_secctx(ctx, len); 1536 } 1537 } 1538 1539 audit_log_fcaps(ab, n); 1540 audit_log_end(ab); 1541 } 1542 1543 int audit_log_task_context(struct audit_buffer *ab) 1544 { 1545 char *ctx = NULL; 1546 unsigned len; 1547 int error; 1548 u32 sid; 1549 1550 security_task_getsecid(current, &sid); 1551 if (!sid) 1552 return 0; 1553 1554 error = security_secid_to_secctx(sid, &ctx, &len); 1555 if (error) { 1556 if (error != -EINVAL) 1557 goto error_path; 1558 return 0; 1559 } 1560 1561 audit_log_format(ab, " subj=%s", ctx); 1562 security_release_secctx(ctx, len); 1563 return 0; 1564 1565 error_path: 1566 audit_panic("error in audit_log_task_context"); 1567 return error; 1568 } 1569 EXPORT_SYMBOL(audit_log_task_context); 1570 1571 void audit_log_task_info(struct audit_buffer *ab, struct task_struct *tsk) 1572 { 1573 const struct cred *cred; 1574 char name[sizeof(tsk->comm)]; 1575 struct mm_struct *mm = tsk->mm; 1576 char *tty; 1577 1578 if (!ab) 1579 return; 1580 1581 /* tsk == current */ 1582 cred = current_cred(); 1583 1584 spin_lock_irq(&tsk->sighand->siglock); 1585 if (tsk->signal && tsk->signal->tty && tsk->signal->tty->name) 1586 tty = tsk->signal->tty->name; 1587 else 1588 tty = "(none)"; 1589 spin_unlock_irq(&tsk->sighand->siglock); 1590 1591 audit_log_format(ab, 1592 " ppid=%ld pid=%d auid=%u uid=%u gid=%u" 1593 " euid=%u suid=%u fsuid=%u" 1594 " egid=%u sgid=%u fsgid=%u ses=%u tty=%s", 1595 sys_getppid(), 1596 tsk->pid, 1597 from_kuid(&init_user_ns, audit_get_loginuid(tsk)), 1598 from_kuid(&init_user_ns, cred->uid), 1599 from_kgid(&init_user_ns, cred->gid), 1600 from_kuid(&init_user_ns, cred->euid), 1601 from_kuid(&init_user_ns, cred->suid), 1602 from_kuid(&init_user_ns, cred->fsuid), 1603 from_kgid(&init_user_ns, cred->egid), 1604 from_kgid(&init_user_ns, cred->sgid), 1605 from_kgid(&init_user_ns, cred->fsgid), 1606 audit_get_sessionid(tsk), tty); 1607 1608 get_task_comm(name, tsk); 1609 audit_log_format(ab, " comm="); 1610 audit_log_untrustedstring(ab, name); 1611 1612 if (mm) { 1613 down_read(&mm->mmap_sem); 1614 if (mm->exe_file) 1615 audit_log_d_path(ab, " exe=", &mm->exe_file->f_path); 1616 up_read(&mm->mmap_sem); 1617 } 1618 audit_log_task_context(ab); 1619 } 1620 EXPORT_SYMBOL(audit_log_task_info); 1621 1622 /** 1623 * audit_log_link_denied - report a link restriction denial 1624 * @operation: specific link opreation 1625 * @link: the path that triggered the restriction 1626 */ 1627 void audit_log_link_denied(const char *operation, struct path *link) 1628 { 1629 struct audit_buffer *ab; 1630 struct audit_names *name; 1631 1632 name = kzalloc(sizeof(*name), GFP_NOFS); 1633 if (!name) 1634 return; 1635 1636 /* Generate AUDIT_ANOM_LINK with subject, operation, outcome. */ 1637 ab = audit_log_start(current->audit_context, GFP_KERNEL, 1638 AUDIT_ANOM_LINK); 1639 if (!ab) 1640 goto out; 1641 audit_log_format(ab, "op=%s", operation); 1642 audit_log_task_info(ab, current); 1643 audit_log_format(ab, " res=0"); 1644 audit_log_end(ab); 1645 1646 /* Generate AUDIT_PATH record with object. */ 1647 name->type = AUDIT_TYPE_NORMAL; 1648 audit_copy_inode(name, link->dentry, link->dentry->d_inode); 1649 audit_log_name(current->audit_context, name, link, 0, NULL); 1650 out: 1651 kfree(name); 1652 } 1653 1654 /** 1655 * audit_log_end - end one audit record 1656 * @ab: the audit_buffer 1657 * 1658 * The netlink_* functions cannot be called inside an irq context, so 1659 * the audit buffer is placed on a queue and a tasklet is scheduled to 1660 * remove them from the queue outside the irq context. May be called in 1661 * any context. 1662 */ 1663 void audit_log_end(struct audit_buffer *ab) 1664 { 1665 if (!ab) 1666 return; 1667 if (!audit_rate_check()) { 1668 audit_log_lost("rate limit exceeded"); 1669 } else { 1670 struct nlmsghdr *nlh = nlmsg_hdr(ab->skb); 1671 nlh->nlmsg_len = ab->skb->len - NLMSG_HDRLEN; 1672 1673 if (audit_pid) { 1674 skb_queue_tail(&audit_skb_queue, ab->skb); 1675 wake_up_interruptible(&kauditd_wait); 1676 } else { 1677 audit_printk_skb(ab->skb); 1678 } 1679 ab->skb = NULL; 1680 } 1681 audit_buffer_free(ab); 1682 } 1683 1684 /** 1685 * audit_log - Log an audit record 1686 * @ctx: audit context 1687 * @gfp_mask: type of allocation 1688 * @type: audit message type 1689 * @fmt: format string to use 1690 * @...: variable parameters matching the format string 1691 * 1692 * This is a convenience function that calls audit_log_start, 1693 * audit_log_vformat, and audit_log_end. It may be called 1694 * in any context. 1695 */ 1696 void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type, 1697 const char *fmt, ...) 1698 { 1699 struct audit_buffer *ab; 1700 va_list args; 1701 1702 ab = audit_log_start(ctx, gfp_mask, type); 1703 if (ab) { 1704 va_start(args, fmt); 1705 audit_log_vformat(ab, fmt, args); 1706 va_end(args); 1707 audit_log_end(ab); 1708 } 1709 } 1710 1711 #ifdef CONFIG_SECURITY 1712 /** 1713 * audit_log_secctx - Converts and logs SELinux context 1714 * @ab: audit_buffer 1715 * @secid: security number 1716 * 1717 * This is a helper function that calls security_secid_to_secctx to convert 1718 * secid to secctx and then adds the (converted) SELinux context to the audit 1719 * log by calling audit_log_format, thus also preventing leak of internal secid 1720 * to userspace. If secid cannot be converted audit_panic is called. 1721 */ 1722 void audit_log_secctx(struct audit_buffer *ab, u32 secid) 1723 { 1724 u32 len; 1725 char *secctx; 1726 1727 if (security_secid_to_secctx(secid, &secctx, &len)) { 1728 audit_panic("Cannot convert secid to context"); 1729 } else { 1730 audit_log_format(ab, " obj=%s", secctx); 1731 security_release_secctx(secctx, len); 1732 } 1733 } 1734 EXPORT_SYMBOL(audit_log_secctx); 1735 #endif 1736 1737 EXPORT_SYMBOL(audit_log_start); 1738 EXPORT_SYMBOL(audit_log_end); 1739 EXPORT_SYMBOL(audit_log_format); 1740 EXPORT_SYMBOL(audit_log); 1741