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-2004 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 SELinux. 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/atomic.h> 46 #include <asm/types.h> 47 #include <linux/mm.h> 48 #include <linux/module.h> 49 #include <linux/err.h> 50 #include <linux/kthread.h> 51 52 #include <linux/audit.h> 53 54 #include <net/sock.h> 55 #include <linux/skbuff.h> 56 #include <linux/netlink.h> 57 58 /* No auditing will take place until audit_initialized != 0. 59 * (Initialization happens after skb_init is called.) */ 60 static int audit_initialized; 61 62 /* No syscall auditing will take place unless audit_enabled != 0. */ 63 int audit_enabled; 64 65 /* Default state when kernel boots without any parameters. */ 66 static int audit_default; 67 68 /* If auditing cannot proceed, audit_failure selects what happens. */ 69 static int audit_failure = AUDIT_FAIL_PRINTK; 70 71 /* If audit records are to be written to the netlink socket, audit_pid 72 * contains the (non-zero) pid. */ 73 int audit_pid; 74 75 /* If audit_limit is non-zero, limit the rate of sending audit records 76 * to that number per second. This prevents DoS attacks, but results in 77 * audit records being dropped. */ 78 static int audit_rate_limit; 79 80 /* Number of outstanding audit_buffers allowed. */ 81 static int audit_backlog_limit = 64; 82 83 /* The identity of the user shutting down the audit system. */ 84 uid_t audit_sig_uid = -1; 85 pid_t audit_sig_pid = -1; 86 87 /* Records can be lost in several ways: 88 0) [suppressed in audit_alloc] 89 1) out of memory in audit_log_start [kmalloc of struct audit_buffer] 90 2) out of memory in audit_log_move [alloc_skb] 91 3) suppressed due to audit_rate_limit 92 4) suppressed due to audit_backlog_limit 93 */ 94 static atomic_t audit_lost = ATOMIC_INIT(0); 95 96 /* The netlink socket. */ 97 static struct sock *audit_sock; 98 99 /* The audit_freelist is a list of pre-allocated audit buffers (if more 100 * than AUDIT_MAXFREE are in use, the audit buffer is freed instead of 101 * being placed on the freelist). */ 102 static DEFINE_SPINLOCK(audit_freelist_lock); 103 static int audit_freelist_count = 0; 104 static LIST_HEAD(audit_freelist); 105 106 static struct sk_buff_head audit_skb_queue; 107 static struct task_struct *kauditd_task; 108 static DECLARE_WAIT_QUEUE_HEAD(kauditd_wait); 109 110 /* There are three lists of rules -- one to search at task creation 111 * time, one to search at syscall entry time, and another to search at 112 * syscall exit time. */ 113 static LIST_HEAD(audit_tsklist); 114 static LIST_HEAD(audit_entlist); 115 static LIST_HEAD(audit_extlist); 116 117 /* The netlink socket is only to be read by 1 CPU, which lets us assume 118 * that list additions and deletions never happen simultaneously in 119 * auditsc.c */ 120 static DECLARE_MUTEX(audit_netlink_sem); 121 122 /* AUDIT_BUFSIZ is the size of the temporary buffer used for formatting 123 * audit records. Since printk uses a 1024 byte buffer, this buffer 124 * should be at least that large. */ 125 #define AUDIT_BUFSIZ 1024 126 127 /* AUDIT_MAXFREE is the number of empty audit_buffers we keep on the 128 * audit_freelist. Doing so eliminates many kmalloc/kfree calls. */ 129 #define AUDIT_MAXFREE (2*NR_CPUS) 130 131 /* The audit_buffer is used when formatting an audit record. The caller 132 * locks briefly to get the record off the freelist or to allocate the 133 * buffer, and locks briefly to send the buffer to the netlink layer or 134 * to place it on a transmit queue. Multiple audit_buffers can be in 135 * use simultaneously. */ 136 struct audit_buffer { 137 struct list_head list; 138 struct sk_buff *skb; /* formatted skb ready to send */ 139 struct audit_context *ctx; /* NULL or associated context */ 140 }; 141 142 static void audit_set_pid(struct audit_buffer *ab, pid_t pid) 143 { 144 struct nlmsghdr *nlh = (struct nlmsghdr *)ab->skb->data; 145 nlh->nlmsg_pid = pid; 146 } 147 148 struct audit_entry { 149 struct list_head list; 150 struct audit_rule rule; 151 }; 152 153 static void audit_panic(const char *message) 154 { 155 switch (audit_failure) 156 { 157 case AUDIT_FAIL_SILENT: 158 break; 159 case AUDIT_FAIL_PRINTK: 160 printk(KERN_ERR "audit: %s\n", message); 161 break; 162 case AUDIT_FAIL_PANIC: 163 panic("audit: %s\n", message); 164 break; 165 } 166 } 167 168 static inline int audit_rate_check(void) 169 { 170 static unsigned long last_check = 0; 171 static int messages = 0; 172 static DEFINE_SPINLOCK(lock); 173 unsigned long flags; 174 unsigned long now; 175 unsigned long elapsed; 176 int retval = 0; 177 178 if (!audit_rate_limit) return 1; 179 180 spin_lock_irqsave(&lock, flags); 181 if (++messages < audit_rate_limit) { 182 retval = 1; 183 } else { 184 now = jiffies; 185 elapsed = now - last_check; 186 if (elapsed > HZ) { 187 last_check = now; 188 messages = 0; 189 retval = 1; 190 } 191 } 192 spin_unlock_irqrestore(&lock, flags); 193 194 return retval; 195 } 196 197 /* Emit at least 1 message per second, even if audit_rate_check is 198 * throttling. */ 199 void audit_log_lost(const char *message) 200 { 201 static unsigned long last_msg = 0; 202 static DEFINE_SPINLOCK(lock); 203 unsigned long flags; 204 unsigned long now; 205 int print; 206 207 atomic_inc(&audit_lost); 208 209 print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit); 210 211 if (!print) { 212 spin_lock_irqsave(&lock, flags); 213 now = jiffies; 214 if (now - last_msg > HZ) { 215 print = 1; 216 last_msg = now; 217 } 218 spin_unlock_irqrestore(&lock, flags); 219 } 220 221 if (print) { 222 printk(KERN_WARNING 223 "audit: audit_lost=%d audit_rate_limit=%d audit_backlog_limit=%d\n", 224 atomic_read(&audit_lost), 225 audit_rate_limit, 226 audit_backlog_limit); 227 audit_panic(message); 228 } 229 230 } 231 232 static int audit_set_rate_limit(int limit, uid_t loginuid) 233 { 234 int old = audit_rate_limit; 235 audit_rate_limit = limit; 236 audit_log(NULL, AUDIT_CONFIG_CHANGE, 237 "audit_rate_limit=%d old=%d by auid=%u", 238 audit_rate_limit, old, loginuid); 239 return old; 240 } 241 242 static int audit_set_backlog_limit(int limit, uid_t loginuid) 243 { 244 int old = audit_backlog_limit; 245 audit_backlog_limit = limit; 246 audit_log(NULL, AUDIT_CONFIG_CHANGE, 247 "audit_backlog_limit=%d old=%d by auid=%u", 248 audit_backlog_limit, old, loginuid); 249 return old; 250 } 251 252 static int audit_set_enabled(int state, uid_t loginuid) 253 { 254 int old = audit_enabled; 255 if (state != 0 && state != 1) 256 return -EINVAL; 257 audit_enabled = state; 258 audit_log(NULL, AUDIT_CONFIG_CHANGE, 259 "audit_enabled=%d old=%d by auid=%u", 260 audit_enabled, old, loginuid); 261 return old; 262 } 263 264 static int audit_set_failure(int state, uid_t loginuid) 265 { 266 int old = audit_failure; 267 if (state != AUDIT_FAIL_SILENT 268 && state != AUDIT_FAIL_PRINTK 269 && state != AUDIT_FAIL_PANIC) 270 return -EINVAL; 271 audit_failure = state; 272 audit_log(NULL, AUDIT_CONFIG_CHANGE, 273 "audit_failure=%d old=%d by auid=%u", 274 audit_failure, old, loginuid); 275 return old; 276 } 277 278 int kauditd_thread(void *dummy) 279 { 280 struct sk_buff *skb; 281 282 while (1) { 283 skb = skb_dequeue(&audit_skb_queue); 284 if (skb) { 285 if (audit_pid) { 286 int err = netlink_unicast(audit_sock, skb, audit_pid, 0); 287 if (err < 0) { 288 BUG_ON(err != -ECONNREFUSED); /* Shoudn't happen */ 289 printk(KERN_ERR "audit: *NO* daemon at audit_pid=%d\n", audit_pid); 290 audit_pid = 0; 291 } 292 } else { 293 printk(KERN_ERR "%s\n", skb->data + NLMSG_SPACE(0)); 294 kfree_skb(skb); 295 } 296 } else { 297 DECLARE_WAITQUEUE(wait, current); 298 set_current_state(TASK_INTERRUPTIBLE); 299 add_wait_queue(&kauditd_wait, &wait); 300 301 if (!skb_queue_len(&audit_skb_queue)) 302 schedule(); 303 304 __set_current_state(TASK_RUNNING); 305 remove_wait_queue(&kauditd_wait, &wait); 306 } 307 } 308 } 309 310 void audit_send_reply(int pid, int seq, int type, int done, int multi, 311 void *payload, int size) 312 { 313 struct sk_buff *skb; 314 struct nlmsghdr *nlh; 315 int len = NLMSG_SPACE(size); 316 void *data; 317 int flags = multi ? NLM_F_MULTI : 0; 318 int t = done ? NLMSG_DONE : type; 319 320 skb = alloc_skb(len, GFP_KERNEL); 321 if (!skb) 322 return; 323 324 nlh = NLMSG_PUT(skb, pid, seq, t, size); 325 nlh->nlmsg_flags = flags; 326 data = NLMSG_DATA(nlh); 327 memcpy(data, payload, size); 328 329 /* Ignore failure. It'll only happen if the sender goes away, 330 because our timeout is set to infinite. */ 331 netlink_unicast(audit_sock, skb, pid, 0); 332 return; 333 334 nlmsg_failure: /* Used by NLMSG_PUT */ 335 if (skb) 336 kfree_skb(skb); 337 } 338 339 /* 340 * Check for appropriate CAP_AUDIT_ capabilities on incoming audit 341 * control messages. 342 */ 343 static int audit_netlink_ok(kernel_cap_t eff_cap, u16 msg_type) 344 { 345 int err = 0; 346 347 switch (msg_type) { 348 case AUDIT_GET: 349 case AUDIT_LIST: 350 case AUDIT_SET: 351 case AUDIT_ADD: 352 case AUDIT_DEL: 353 case AUDIT_SIGNAL_INFO: 354 if (!cap_raised(eff_cap, CAP_AUDIT_CONTROL)) 355 err = -EPERM; 356 break; 357 case AUDIT_USER: 358 case AUDIT_FIRST_USER_MSG...AUDIT_LAST_USER_MSG: 359 if (!cap_raised(eff_cap, CAP_AUDIT_WRITE)) 360 err = -EPERM; 361 break; 362 default: /* bad msg */ 363 err = -EINVAL; 364 } 365 366 return err; 367 } 368 369 static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh) 370 { 371 u32 uid, pid, seq; 372 void *data; 373 struct audit_status *status_get, status_set; 374 int err; 375 struct audit_buffer *ab; 376 u16 msg_type = nlh->nlmsg_type; 377 uid_t loginuid; /* loginuid of sender */ 378 struct audit_sig_info sig_data; 379 380 err = audit_netlink_ok(NETLINK_CB(skb).eff_cap, msg_type); 381 if (err) 382 return err; 383 384 /* As soon as there's any sign of userspace auditd, start kauditd to talk to it */ 385 if (!kauditd_task) 386 kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd"); 387 if (IS_ERR(kauditd_task)) { 388 err = PTR_ERR(kauditd_task); 389 kauditd_task = NULL; 390 return err; 391 } 392 393 pid = NETLINK_CREDS(skb)->pid; 394 uid = NETLINK_CREDS(skb)->uid; 395 loginuid = NETLINK_CB(skb).loginuid; 396 seq = nlh->nlmsg_seq; 397 data = NLMSG_DATA(nlh); 398 399 switch (msg_type) { 400 case AUDIT_GET: 401 status_set.enabled = audit_enabled; 402 status_set.failure = audit_failure; 403 status_set.pid = audit_pid; 404 status_set.rate_limit = audit_rate_limit; 405 status_set.backlog_limit = audit_backlog_limit; 406 status_set.lost = atomic_read(&audit_lost); 407 status_set.backlog = skb_queue_len(&audit_skb_queue); 408 audit_send_reply(NETLINK_CB(skb).pid, seq, AUDIT_GET, 0, 0, 409 &status_set, sizeof(status_set)); 410 break; 411 case AUDIT_SET: 412 if (nlh->nlmsg_len < sizeof(struct audit_status)) 413 return -EINVAL; 414 status_get = (struct audit_status *)data; 415 if (status_get->mask & AUDIT_STATUS_ENABLED) { 416 err = audit_set_enabled(status_get->enabled, loginuid); 417 if (err < 0) return err; 418 } 419 if (status_get->mask & AUDIT_STATUS_FAILURE) { 420 err = audit_set_failure(status_get->failure, loginuid); 421 if (err < 0) return err; 422 } 423 if (status_get->mask & AUDIT_STATUS_PID) { 424 int old = audit_pid; 425 audit_pid = status_get->pid; 426 audit_log(NULL, AUDIT_CONFIG_CHANGE, 427 "audit_pid=%d old=%d by auid=%u", 428 audit_pid, old, loginuid); 429 } 430 if (status_get->mask & AUDIT_STATUS_RATE_LIMIT) 431 audit_set_rate_limit(status_get->rate_limit, loginuid); 432 if (status_get->mask & AUDIT_STATUS_BACKLOG_LIMIT) 433 audit_set_backlog_limit(status_get->backlog_limit, 434 loginuid); 435 break; 436 case AUDIT_USER: 437 case AUDIT_FIRST_USER_MSG...AUDIT_LAST_USER_MSG: 438 ab = audit_log_start(NULL, msg_type); 439 if (!ab) 440 break; /* audit_panic has been called */ 441 audit_log_format(ab, 442 "user pid=%d uid=%u auid=%u" 443 " msg='%.1024s'", 444 pid, uid, loginuid, (char *)data); 445 audit_set_pid(ab, pid); 446 audit_log_end(ab); 447 break; 448 case AUDIT_ADD: 449 case AUDIT_DEL: 450 if (nlh->nlmsg_len < sizeof(struct audit_rule)) 451 return -EINVAL; 452 /* fallthrough */ 453 case AUDIT_LIST: 454 err = audit_receive_filter(nlh->nlmsg_type, NETLINK_CB(skb).pid, 455 uid, seq, data, loginuid); 456 break; 457 case AUDIT_SIGNAL_INFO: 458 sig_data.uid = audit_sig_uid; 459 sig_data.pid = audit_sig_pid; 460 audit_send_reply(NETLINK_CB(skb).pid, seq, AUDIT_SIGNAL_INFO, 461 0, 0, &sig_data, sizeof(sig_data)); 462 break; 463 default: 464 err = -EINVAL; 465 break; 466 } 467 468 return err < 0 ? err : 0; 469 } 470 471 /* Get message from skb (based on rtnetlink_rcv_skb). Each message is 472 * processed by audit_receive_msg. Malformed skbs with wrong length are 473 * discarded silently. */ 474 static void audit_receive_skb(struct sk_buff *skb) 475 { 476 int err; 477 struct nlmsghdr *nlh; 478 u32 rlen; 479 480 while (skb->len >= NLMSG_SPACE(0)) { 481 nlh = (struct nlmsghdr *)skb->data; 482 if (nlh->nlmsg_len < sizeof(*nlh) || skb->len < nlh->nlmsg_len) 483 return; 484 rlen = NLMSG_ALIGN(nlh->nlmsg_len); 485 if (rlen > skb->len) 486 rlen = skb->len; 487 if ((err = audit_receive_msg(skb, nlh))) { 488 netlink_ack(skb, nlh, err); 489 } else if (nlh->nlmsg_flags & NLM_F_ACK) 490 netlink_ack(skb, nlh, 0); 491 skb_pull(skb, rlen); 492 } 493 } 494 495 /* Receive messages from netlink socket. */ 496 static void audit_receive(struct sock *sk, int length) 497 { 498 struct sk_buff *skb; 499 unsigned int qlen; 500 501 down(&audit_netlink_sem); 502 503 for (qlen = skb_queue_len(&sk->sk_receive_queue); qlen; qlen--) { 504 skb = skb_dequeue(&sk->sk_receive_queue); 505 audit_receive_skb(skb); 506 kfree_skb(skb); 507 } 508 up(&audit_netlink_sem); 509 } 510 511 512 /* Initialize audit support at boot time. */ 513 static int __init audit_init(void) 514 { 515 printk(KERN_INFO "audit: initializing netlink socket (%s)\n", 516 audit_default ? "enabled" : "disabled"); 517 audit_sock = netlink_kernel_create(NETLINK_AUDIT, 0, audit_receive, 518 THIS_MODULE); 519 if (!audit_sock) 520 audit_panic("cannot initialize netlink socket"); 521 522 audit_sock->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT; 523 skb_queue_head_init(&audit_skb_queue); 524 audit_initialized = 1; 525 audit_enabled = audit_default; 526 audit_log(NULL, AUDIT_KERNEL, "initialized"); 527 return 0; 528 } 529 __initcall(audit_init); 530 531 /* Process kernel command-line parameter at boot time. audit=0 or audit=1. */ 532 static int __init audit_enable(char *str) 533 { 534 audit_default = !!simple_strtol(str, NULL, 0); 535 printk(KERN_INFO "audit: %s%s\n", 536 audit_default ? "enabled" : "disabled", 537 audit_initialized ? "" : " (after initialization)"); 538 if (audit_initialized) 539 audit_enabled = audit_default; 540 return 0; 541 } 542 543 __setup("audit=", audit_enable); 544 545 static void audit_buffer_free(struct audit_buffer *ab) 546 { 547 unsigned long flags; 548 549 if (!ab) 550 return; 551 552 if (ab->skb) 553 kfree_skb(ab->skb); 554 555 spin_lock_irqsave(&audit_freelist_lock, flags); 556 if (++audit_freelist_count > AUDIT_MAXFREE) 557 kfree(ab); 558 else 559 list_add(&ab->list, &audit_freelist); 560 spin_unlock_irqrestore(&audit_freelist_lock, flags); 561 } 562 563 static struct audit_buffer * audit_buffer_alloc(struct audit_context *ctx, 564 int gfp_mask, int type) 565 { 566 unsigned long flags; 567 struct audit_buffer *ab = NULL; 568 struct nlmsghdr *nlh; 569 570 spin_lock_irqsave(&audit_freelist_lock, flags); 571 if (!list_empty(&audit_freelist)) { 572 ab = list_entry(audit_freelist.next, 573 struct audit_buffer, list); 574 list_del(&ab->list); 575 --audit_freelist_count; 576 } 577 spin_unlock_irqrestore(&audit_freelist_lock, flags); 578 579 if (!ab) { 580 ab = kmalloc(sizeof(*ab), gfp_mask); 581 if (!ab) 582 goto err; 583 } 584 585 ab->skb = alloc_skb(AUDIT_BUFSIZ, gfp_mask); 586 if (!ab->skb) 587 goto err; 588 589 ab->ctx = ctx; 590 nlh = (struct nlmsghdr *)skb_put(ab->skb, NLMSG_SPACE(0)); 591 nlh->nlmsg_type = type; 592 nlh->nlmsg_flags = 0; 593 nlh->nlmsg_pid = 0; 594 nlh->nlmsg_seq = 0; 595 return ab; 596 err: 597 audit_buffer_free(ab); 598 return NULL; 599 } 600 601 /* Compute a serial number for the audit record. Audit records are 602 * written to user-space as soon as they are generated, so a complete 603 * audit record may be written in several pieces. The timestamp of the 604 * record and this serial number are used by the user-space tools to 605 * determine which pieces belong to the same audit record. The 606 * (timestamp,serial) tuple is unique for each syscall and is live from 607 * syscall entry to syscall exit. 608 * 609 * Atomic values are only guaranteed to be 24-bit, so we count down. 610 * 611 * NOTE: Another possibility is to store the formatted records off the 612 * audit context (for those records that have a context), and emit them 613 * all at syscall exit. However, this could delay the reporting of 614 * significant errors until syscall exit (or never, if the system 615 * halts). */ 616 unsigned int audit_serial(void) 617 { 618 static atomic_t serial = ATOMIC_INIT(0xffffff); 619 unsigned int a, b; 620 621 do { 622 a = atomic_read(&serial); 623 if (atomic_dec_and_test(&serial)) 624 atomic_set(&serial, 0xffffff); 625 b = atomic_read(&serial); 626 } while (b != a - 1); 627 628 return 0xffffff - b; 629 } 630 631 static inline void audit_get_stamp(struct audit_context *ctx, 632 struct timespec *t, unsigned int *serial) 633 { 634 if (ctx) 635 auditsc_get_stamp(ctx, t, serial); 636 else { 637 *t = CURRENT_TIME; 638 *serial = audit_serial(); 639 } 640 } 641 642 /* Obtain an audit buffer. This routine does locking to obtain the 643 * audit buffer, but then no locking is required for calls to 644 * audit_log_*format. If the tsk is a task that is currently in a 645 * syscall, then the syscall is marked as auditable and an audit record 646 * will be written at syscall exit. If there is no associated task, tsk 647 * should be NULL. */ 648 struct audit_buffer *audit_log_start(struct audit_context *ctx, int type) 649 { 650 struct audit_buffer *ab = NULL; 651 struct timespec t; 652 unsigned int serial; 653 654 if (!audit_initialized) 655 return NULL; 656 657 if (audit_backlog_limit 658 && skb_queue_len(&audit_skb_queue) > audit_backlog_limit) { 659 if (audit_rate_check()) 660 printk(KERN_WARNING 661 "audit: audit_backlog=%d > " 662 "audit_backlog_limit=%d\n", 663 skb_queue_len(&audit_skb_queue), 664 audit_backlog_limit); 665 audit_log_lost("backlog limit exceeded"); 666 return NULL; 667 } 668 669 ab = audit_buffer_alloc(ctx, GFP_ATOMIC, type); 670 if (!ab) { 671 audit_log_lost("out of memory in audit_log_start"); 672 return NULL; 673 } 674 675 audit_get_stamp(ab->ctx, &t, &serial); 676 677 audit_log_format(ab, "audit(%lu.%03lu:%u): ", 678 t.tv_sec, t.tv_nsec/1000000, serial); 679 return ab; 680 } 681 682 /** 683 * audit_expand - expand skb in the audit buffer 684 * @ab: audit_buffer 685 * 686 * Returns 0 (no space) on failed expansion, or available space if 687 * successful. 688 */ 689 static inline int audit_expand(struct audit_buffer *ab, int extra) 690 { 691 struct sk_buff *skb = ab->skb; 692 int ret = pskb_expand_head(skb, skb_headroom(skb), extra, 693 GFP_ATOMIC); 694 if (ret < 0) { 695 audit_log_lost("out of memory in audit_expand"); 696 return 0; 697 } 698 return skb_tailroom(skb); 699 } 700 701 /* Format an audit message into the audit buffer. If there isn't enough 702 * room in the audit buffer, more room will be allocated and vsnprint 703 * will be called a second time. Currently, we assume that a printk 704 * can't format message larger than 1024 bytes, so we don't either. */ 705 static void audit_log_vformat(struct audit_buffer *ab, const char *fmt, 706 va_list args) 707 { 708 int len, avail; 709 struct sk_buff *skb; 710 va_list args2; 711 712 if (!ab) 713 return; 714 715 BUG_ON(!ab->skb); 716 skb = ab->skb; 717 avail = skb_tailroom(skb); 718 if (avail == 0) { 719 avail = audit_expand(ab, AUDIT_BUFSIZ); 720 if (!avail) 721 goto out; 722 } 723 va_copy(args2, args); 724 len = vsnprintf(skb->tail, avail, fmt, args); 725 if (len >= avail) { 726 /* The printk buffer is 1024 bytes long, so if we get 727 * here and AUDIT_BUFSIZ is at least 1024, then we can 728 * log everything that printk could have logged. */ 729 avail = audit_expand(ab, max_t(unsigned, AUDIT_BUFSIZ, 1+len-avail)); 730 if (!avail) 731 goto out; 732 len = vsnprintf(skb->tail, avail, fmt, args2); 733 } 734 if (len > 0) 735 skb_put(skb, len); 736 out: 737 return; 738 } 739 740 /* Format a message into the audit buffer. All the work is done in 741 * audit_log_vformat. */ 742 void audit_log_format(struct audit_buffer *ab, const char *fmt, ...) 743 { 744 va_list args; 745 746 if (!ab) 747 return; 748 va_start(args, fmt); 749 audit_log_vformat(ab, fmt, args); 750 va_end(args); 751 } 752 753 /* This function will take the passed buf and convert it into a string of 754 * ascii hex digits. The new string is placed onto the skb. */ 755 void audit_log_hex(struct audit_buffer *ab, const unsigned char *buf, 756 size_t len) 757 { 758 int i, avail, new_len; 759 unsigned char *ptr; 760 struct sk_buff *skb; 761 static const unsigned char *hex = "0123456789ABCDEF"; 762 763 BUG_ON(!ab->skb); 764 skb = ab->skb; 765 avail = skb_tailroom(skb); 766 new_len = len<<1; 767 if (new_len >= avail) { 768 /* Round the buffer request up to the next multiple */ 769 new_len = AUDIT_BUFSIZ*(((new_len-avail)/AUDIT_BUFSIZ) + 1); 770 avail = audit_expand(ab, new_len); 771 if (!avail) 772 return; 773 } 774 775 ptr = skb->tail; 776 for (i=0; i<len; i++) { 777 *ptr++ = hex[(buf[i] & 0xF0)>>4]; /* Upper nibble */ 778 *ptr++ = hex[buf[i] & 0x0F]; /* Lower nibble */ 779 } 780 *ptr = 0; 781 skb_put(skb, len << 1); /* new string is twice the old string */ 782 } 783 784 /* This code will escape a string that is passed to it if the string 785 * contains a control character, unprintable character, double quote mark, 786 * or a space. Unescaped strings will start and end with a double quote mark. 787 * Strings that are escaped are printed in hex (2 digits per char). */ 788 void audit_log_untrustedstring(struct audit_buffer *ab, const char *string) 789 { 790 const unsigned char *p = string; 791 792 while (*p) { 793 if (*p == '"' || *p < 0x21 || *p > 0x7f) { 794 audit_log_hex(ab, string, strlen(string)); 795 return; 796 } 797 p++; 798 } 799 audit_log_format(ab, "\"%s\"", string); 800 } 801 802 /* This is a helper-function to print the escaped d_path */ 803 void audit_log_d_path(struct audit_buffer *ab, const char *prefix, 804 struct dentry *dentry, struct vfsmount *vfsmnt) 805 { 806 char *p, *path; 807 808 if (prefix) 809 audit_log_format(ab, " %s", prefix); 810 811 /* We will allow 11 spaces for ' (deleted)' to be appended */ 812 path = kmalloc(PATH_MAX+11, GFP_KERNEL); 813 if (!path) { 814 audit_log_format(ab, "<no memory>"); 815 return; 816 } 817 p = d_path(dentry, vfsmnt, path, PATH_MAX+11); 818 if (IS_ERR(p)) { /* Should never happen since we send PATH_MAX */ 819 /* FIXME: can we save some information here? */ 820 audit_log_format(ab, "<too long>"); 821 } else 822 audit_log_untrustedstring(ab, p); 823 kfree(path); 824 } 825 826 /* The netlink_* functions cannot be called inside an irq context, so 827 * the audit buffer is places on a queue and a tasklet is scheduled to 828 * remove them from the queue outside the irq context. May be called in 829 * any context. */ 830 void audit_log_end(struct audit_buffer *ab) 831 { 832 if (!ab) 833 return; 834 if (!audit_rate_check()) { 835 audit_log_lost("rate limit exceeded"); 836 } else { 837 if (audit_pid) { 838 struct nlmsghdr *nlh = (struct nlmsghdr *)ab->skb->data; 839 nlh->nlmsg_len = ab->skb->len - NLMSG_SPACE(0); 840 skb_queue_tail(&audit_skb_queue, ab->skb); 841 ab->skb = NULL; 842 wake_up_interruptible(&kauditd_wait); 843 } else { 844 printk("%s\n", ab->skb->data + NLMSG_SPACE(0)); 845 } 846 } 847 audit_buffer_free(ab); 848 } 849 850 /* Log an audit record. This is a convenience function that calls 851 * audit_log_start, audit_log_vformat, and audit_log_end. It may be 852 * called in any context. */ 853 void audit_log(struct audit_context *ctx, int type, const char *fmt, ...) 854 { 855 struct audit_buffer *ab; 856 va_list args; 857 858 ab = audit_log_start(ctx, type); 859 if (ab) { 860 va_start(args, fmt); 861 audit_log_vformat(ab, fmt, args); 862 va_end(args); 863 audit_log_end(ab); 864 } 865 } 866