linux/kernel/audit.c
<<
>>
Prefs
   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 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/types.h>
  46#include <asm/atomic.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 <net/netlink.h>
  56#include <linux/skbuff.h>
  57#include <linux/netlink.h>
  58#include <linux/selinux.h>
  59#include <linux/inotify.h>
  60#include <linux/freezer.h>
  61#include <linux/tty.h>
  62
  63#include "audit.h"
  64
  65/* No auditing will take place until audit_initialized != 0.
  66 * (Initialization happens after skb_init is called.) */
  67static int      audit_initialized;
  68
  69#define AUDIT_OFF       0
  70#define AUDIT_ON        1
  71#define AUDIT_LOCKED    2
  72int             audit_enabled;
  73int             audit_ever_enabled;
  74
  75/* Default state when kernel boots without any parameters. */
  76static int      audit_default;
  77
  78/* If auditing cannot proceed, audit_failure selects what happens. */
  79static int      audit_failure = AUDIT_FAIL_PRINTK;
  80
  81/*
  82 * If audit records are to be written to the netlink socket, audit_pid
  83 * contains the pid of the auditd process and audit_nlk_pid contains
  84 * the pid to use to send netlink messages to that process.
  85 */
  86int             audit_pid;
  87static int      audit_nlk_pid;
  88
  89/* If audit_rate_limit is non-zero, limit the rate of sending audit records
  90 * to that number per second.  This prevents DoS attacks, but results in
  91 * audit records being dropped. */
  92static int      audit_rate_limit;
  93
  94/* Number of outstanding audit_buffers allowed. */
  95static int      audit_backlog_limit = 64;
  96static int      audit_backlog_wait_time = 60 * HZ;
  97static int      audit_backlog_wait_overflow = 0;
  98
  99/* The identity of the user shutting down the audit system. */
 100uid_t           audit_sig_uid = -1;
 101pid_t           audit_sig_pid = -1;
 102u32             audit_sig_sid = 0;
 103
 104/* Records can be lost in several ways:
 105   0) [suppressed in audit_alloc]
 106   1) out of memory in audit_log_start [kmalloc of struct audit_buffer]
 107   2) out of memory in audit_log_move [alloc_skb]
 108   3) suppressed due to audit_rate_limit
 109   4) suppressed due to audit_backlog_limit
 110*/
 111static atomic_t    audit_lost = ATOMIC_INIT(0);
 112
 113/* The netlink socket. */
 114static struct sock *audit_sock;
 115
 116/* Inotify handle. */
 117struct inotify_handle *audit_ih;
 118
 119/* Hash for inode-based rules */
 120struct list_head audit_inode_hash[AUDIT_INODE_BUCKETS];
 121
 122/* The audit_freelist is a list of pre-allocated audit buffers (if more
 123 * than AUDIT_MAXFREE are in use, the audit buffer is freed instead of
 124 * being placed on the freelist). */
 125static DEFINE_SPINLOCK(audit_freelist_lock);
 126static int         audit_freelist_count;
 127static LIST_HEAD(audit_freelist);
 128
 129static struct sk_buff_head audit_skb_queue;
 130static struct task_struct *kauditd_task;
 131static DECLARE_WAIT_QUEUE_HEAD(kauditd_wait);
 132static DECLARE_WAIT_QUEUE_HEAD(audit_backlog_wait);
 133
 134/* Serialize requests from userspace. */
 135static DEFINE_MUTEX(audit_cmd_mutex);
 136
 137/* AUDIT_BUFSIZ is the size of the temporary buffer used for formatting
 138 * audit records.  Since printk uses a 1024 byte buffer, this buffer
 139 * should be at least that large. */
 140#define AUDIT_BUFSIZ 1024
 141
 142/* AUDIT_MAXFREE is the number of empty audit_buffers we keep on the
 143 * audit_freelist.  Doing so eliminates many kmalloc/kfree calls. */
 144#define AUDIT_MAXFREE  (2*NR_CPUS)
 145
 146/* The audit_buffer is used when formatting an audit record.  The caller
 147 * locks briefly to get the record off the freelist or to allocate the
 148 * buffer, and locks briefly to send the buffer to the netlink layer or
 149 * to place it on a transmit queue.  Multiple audit_buffers can be in
 150 * use simultaneously. */
 151struct audit_buffer {
 152        struct list_head     list;
 153        struct sk_buff       *skb;      /* formatted skb ready to send */
 154        struct audit_context *ctx;      /* NULL or associated context */
 155        gfp_t                gfp_mask;
 156};
 157
 158static void audit_set_pid(struct audit_buffer *ab, pid_t pid)
 159{
 160        if (ab) {
 161                struct nlmsghdr *nlh = nlmsg_hdr(ab->skb);
 162                nlh->nlmsg_pid = pid;
 163        }
 164}
 165
 166void audit_panic(const char *message)
 167{
 168        switch (audit_failure)
 169        {
 170        case AUDIT_FAIL_SILENT:
 171                break;
 172        case AUDIT_FAIL_PRINTK:
 173                if (printk_ratelimit())
 174                        printk(KERN_ERR "audit: %s\n", message);
 175                break;
 176        case AUDIT_FAIL_PANIC:
 177                /* test audit_pid since printk is always losey, why bother? */
 178                if (audit_pid)
 179                        panic("audit: %s\n", message);
 180                break;
 181        }
 182}
 183
 184static inline int audit_rate_check(void)
 185{
 186        static unsigned long    last_check = 0;
 187        static int              messages   = 0;
 188        static DEFINE_SPINLOCK(lock);
 189        unsigned long           flags;
 190        unsigned long           now;
 191        unsigned long           elapsed;
 192        int                     retval     = 0;
 193
 194        if (!audit_rate_limit) return 1;
 195
 196        spin_lock_irqsave(&lock, flags);
 197        if (++messages < audit_rate_limit) {
 198                retval = 1;
 199        } else {
 200                now     = jiffies;
 201                elapsed = now - last_check;
 202                if (elapsed > HZ) {
 203                        last_check = now;
 204                        messages   = 0;
 205                        retval     = 1;
 206                }
 207        }
 208        spin_unlock_irqrestore(&lock, flags);
 209
 210        return retval;
 211}
 212
 213/**
 214 * audit_log_lost - conditionally log lost audit message event
 215 * @message: the message stating reason for lost audit message
 216 *
 217 * Emit at least 1 message per second, even if audit_rate_check is
 218 * throttling.
 219 * Always increment the lost messages counter.
 220*/
 221void audit_log_lost(const char *message)
 222{
 223        static unsigned long    last_msg = 0;
 224        static DEFINE_SPINLOCK(lock);
 225        unsigned long           flags;
 226        unsigned long           now;
 227        int                     print;
 228
 229        atomic_inc(&audit_lost);
 230
 231        print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit);
 232
 233        if (!print) {
 234                spin_lock_irqsave(&lock, flags);
 235                now = jiffies;
 236                if (now - last_msg > HZ) {
 237                        print = 1;
 238                        last_msg = now;
 239                }
 240                spin_unlock_irqrestore(&lock, flags);
 241        }
 242
 243        if (print) {
 244                if (printk_ratelimit())
 245                        printk(KERN_WARNING
 246                                "audit: audit_lost=%d audit_rate_limit=%d "
 247                                "audit_backlog_limit=%d\n",
 248                                atomic_read(&audit_lost),
 249                                audit_rate_limit,
 250                                audit_backlog_limit);
 251                audit_panic(message);
 252        }
 253}
 254
 255static int audit_log_config_change(char *function_name, int new, int old,
 256                                   uid_t loginuid, u32 sid, int allow_changes)
 257{
 258        struct audit_buffer *ab;
 259        int rc = 0;
 260
 261        ab = audit_log_start(NULL, GFP_KERNEL, AUDIT_CONFIG_CHANGE);
 262        audit_log_format(ab, "%s=%d old=%d by auid=%u", function_name, new,
 263                         old, loginuid);
 264        if (sid) {
 265                char *ctx = NULL;
 266                u32 len;
 267
 268                rc = selinux_sid_to_string(sid, &ctx, &len);
 269                if (rc) {
 270                        audit_log_format(ab, " sid=%u", sid);
 271                        allow_changes = 0; /* Something weird, deny request */
 272                } else {
 273                        audit_log_format(ab, " subj=%s", ctx);
 274                        kfree(ctx);
 275                }
 276        }
 277        audit_log_format(ab, " res=%d", allow_changes);
 278        audit_log_end(ab);
 279        return rc;
 280}
 281
 282static int audit_do_config_change(char *function_name, int *to_change,
 283                                  int new, uid_t loginuid, u32 sid)
 284{
 285        int allow_changes, rc = 0, old = *to_change;
 286
 287        /* check if we are locked */
 288        if (audit_enabled == AUDIT_LOCKED)
 289                allow_changes = 0;
 290        else
 291                allow_changes = 1;
 292
 293        if (audit_enabled != AUDIT_OFF) {
 294                rc = audit_log_config_change(function_name, new, old,
 295                                             loginuid, sid, allow_changes);
 296                if (rc)
 297                        allow_changes = 0;
 298        }
 299
 300        /* If we are allowed, make the change */
 301        if (allow_changes == 1)
 302                *to_change = new;
 303        /* Not allowed, update reason */
 304        else if (rc == 0)
 305                rc = -EPERM;
 306        return rc;
 307}
 308
 309static int audit_set_rate_limit(int limit, uid_t loginuid, u32 sid)
 310{
 311        return audit_do_config_change("audit_rate_limit", &audit_rate_limit,
 312                                      limit, loginuid, sid);
 313}
 314
 315static int audit_set_backlog_limit(int limit, uid_t loginuid, u32 sid)
 316{
 317        return audit_do_config_change("audit_backlog_limit", &audit_backlog_limit,
 318                                      limit, loginuid, sid);
 319}
 320
 321static int audit_set_enabled(int state, uid_t loginuid, u32 sid)
 322{
 323        int rc;
 324        if (state < AUDIT_OFF || state > AUDIT_LOCKED)
 325                return -EINVAL;
 326
 327        rc =  audit_do_config_change("audit_enabled", &audit_enabled, state,
 328                                     loginuid, sid);
 329
 330        if (!rc)
 331                audit_ever_enabled |= !!state;
 332
 333        return rc;
 334}
 335
 336static int audit_set_failure(int state, uid_t loginuid, u32 sid)
 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                                      loginuid, sid);
 345}
 346
 347static int kauditd_thread(void *dummy)
 348{
 349        struct sk_buff *skb;
 350
 351        set_freezable();
 352        while (!kthread_should_stop()) {
 353                skb = skb_dequeue(&audit_skb_queue);
 354                wake_up(&audit_backlog_wait);
 355                if (skb) {
 356                        if (audit_pid) {
 357                                int err = netlink_unicast(audit_sock, skb, audit_nlk_pid, 0);
 358                                if (err < 0) {
 359                                        BUG_ON(err != -ECONNREFUSED); /* Shoudn't happen */
 360                                        printk(KERN_ERR "audit: *NO* daemon at audit_pid=%d\n", audit_pid);
 361                                        audit_log_lost("auditd dissapeared\n");
 362                                        audit_pid = 0;
 363                                }
 364                        } else {
 365                                if (printk_ratelimit())
 366                                        printk(KERN_NOTICE "%s\n", skb->data +
 367                                                NLMSG_SPACE(0));
 368                                else
 369                                        audit_log_lost("printk limit exceeded\n");
 370                                kfree_skb(skb);
 371                        }
 372                } else {
 373                        DECLARE_WAITQUEUE(wait, current);
 374                        set_current_state(TASK_INTERRUPTIBLE);
 375                        add_wait_queue(&kauditd_wait, &wait);
 376
 377                        if (!skb_queue_len(&audit_skb_queue)) {
 378                                try_to_freeze();
 379                                schedule();
 380                        }
 381
 382                        __set_current_state(TASK_RUNNING);
 383                        remove_wait_queue(&kauditd_wait, &wait);
 384                }
 385        }
 386        return 0;
 387}
 388
 389static int audit_prepare_user_tty(pid_t pid, uid_t loginuid)
 390{
 391        struct task_struct *tsk;
 392        int err;
 393
 394        read_lock(&tasklist_lock);
 395        tsk = find_task_by_pid(pid);
 396        err = -ESRCH;
 397        if (!tsk)
 398                goto out;
 399        err = 0;
 400
 401        spin_lock_irq(&tsk->sighand->siglock);
 402        if (!tsk->signal->audit_tty)
 403                err = -EPERM;
 404        spin_unlock_irq(&tsk->sighand->siglock);
 405        if (err)
 406                goto out;
 407
 408        tty_audit_push_task(tsk, loginuid);
 409out:
 410        read_unlock(&tasklist_lock);
 411        return err;
 412}
 413
 414int audit_send_list(void *_dest)
 415{
 416        struct audit_netlink_list *dest = _dest;
 417        int pid = dest->pid;
 418        struct sk_buff *skb;
 419
 420        /* wait for parent to finish and send an ACK */
 421        mutex_lock(&audit_cmd_mutex);
 422        mutex_unlock(&audit_cmd_mutex);
 423
 424        while ((skb = __skb_dequeue(&dest->q)) != NULL)
 425                netlink_unicast(audit_sock, skb, pid, 0);
 426
 427        kfree(dest);
 428
 429        return 0;
 430}
 431
 432#ifdef CONFIG_AUDIT_TREE
 433static int prune_tree_thread(void *unused)
 434{
 435        mutex_lock(&audit_cmd_mutex);
 436        audit_prune_trees();
 437        mutex_unlock(&audit_cmd_mutex);
 438        return 0;
 439}
 440
 441void audit_schedule_prune(void)
 442{
 443        kthread_run(prune_tree_thread, NULL, "audit_prune_tree");
 444}
 445#endif
 446
 447struct sk_buff *audit_make_reply(int pid, int seq, int type, int done,
 448                                 int multi, void *payload, int size)
 449{
 450        struct sk_buff  *skb;
 451        struct nlmsghdr *nlh;
 452        int             len = NLMSG_SPACE(size);
 453        void            *data;
 454        int             flags = multi ? NLM_F_MULTI : 0;
 455        int             t     = done  ? NLMSG_DONE  : type;
 456
 457        skb = alloc_skb(len, GFP_KERNEL);
 458        if (!skb)
 459                return NULL;
 460
 461        nlh              = NLMSG_PUT(skb, pid, seq, t, size);
 462        nlh->nlmsg_flags = flags;
 463        data             = NLMSG_DATA(nlh);
 464        memcpy(data, payload, size);
 465        return skb;
 466
 467nlmsg_failure:                  /* Used by NLMSG_PUT */
 468        if (skb)
 469                kfree_skb(skb);
 470        return NULL;
 471}
 472
 473/**
 474 * audit_send_reply - send an audit reply message via netlink
 475 * @pid: process id to send reply to
 476 * @seq: sequence number
 477 * @type: audit message type
 478 * @done: done (last) flag
 479 * @multi: multi-part message flag
 480 * @payload: payload data
 481 * @size: payload size
 482 *
 483 * Allocates an skb, builds the netlink message, and sends it to the pid.
 484 * No failure notifications.
 485 */
 486void audit_send_reply(int pid, int seq, int type, int done, int multi,
 487                      void *payload, int size)
 488{
 489        struct sk_buff  *skb;
 490        skb = audit_make_reply(pid, seq, type, done, multi, payload, size);
 491        if (!skb)
 492                return;
 493        /* Ignore failure. It'll only happen if the sender goes away,
 494           because our timeout is set to infinite. */
 495        netlink_unicast(audit_sock, skb, pid, 0);
 496        return;
 497}
 498
 499/*
 500 * Check for appropriate CAP_AUDIT_ capabilities on incoming audit
 501 * control messages.
 502 */
 503static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type)
 504{
 505        int err = 0;
 506
 507        switch (msg_type) {
 508        case AUDIT_GET:
 509        case AUDIT_LIST:
 510        case AUDIT_LIST_RULES:
 511        case AUDIT_SET:
 512        case AUDIT_ADD:
 513        case AUDIT_ADD_RULE:
 514        case AUDIT_DEL:
 515        case AUDIT_DEL_RULE:
 516        case AUDIT_SIGNAL_INFO:
 517        case AUDIT_TTY_GET:
 518        case AUDIT_TTY_SET:
 519        case AUDIT_TRIM:
 520        case AUDIT_MAKE_EQUIV:
 521                if (security_netlink_recv(skb, CAP_AUDIT_CONTROL))
 522                        err = -EPERM;
 523                break;
 524        case AUDIT_USER:
 525        case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG:
 526        case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
 527                if (security_netlink_recv(skb, CAP_AUDIT_WRITE))
 528                        err = -EPERM;
 529                break;
 530        default:  /* bad msg */
 531                err = -EINVAL;
 532        }
 533
 534        return err;
 535}
 536
 537static int audit_log_common_recv_msg(struct audit_buffer **ab, u16 msg_type,
 538                                     u32 pid, u32 uid, uid_t auid, u32 sid)
 539{
 540        int rc = 0;
 541        char *ctx = NULL;
 542        u32 len;
 543
 544        if (!audit_enabled) {
 545                *ab = NULL;
 546                return rc;
 547        }
 548
 549        *ab = audit_log_start(NULL, GFP_KERNEL, msg_type);
 550        audit_log_format(*ab, "user pid=%d uid=%u auid=%u",
 551                         pid, uid, auid);
 552        if (sid) {
 553                rc = selinux_sid_to_string(sid, &ctx, &len);
 554                if (rc)
 555                        audit_log_format(*ab, " ssid=%u", sid);
 556                else
 557                        audit_log_format(*ab, " subj=%s", ctx);
 558                kfree(ctx);
 559        }
 560
 561        return rc;
 562}
 563
 564static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
 565{
 566        u32                     uid, pid, seq, sid;
 567        void                    *data;
 568        struct audit_status     *status_get, status_set;
 569        int                     err;
 570        struct audit_buffer     *ab;
 571        u16                     msg_type = nlh->nlmsg_type;
 572        uid_t                   loginuid; /* loginuid of sender */
 573        struct audit_sig_info   *sig_data;
 574        char                    *ctx = NULL;
 575        u32                     len;
 576
 577        err = audit_netlink_ok(skb, msg_type);
 578        if (err)
 579                return err;
 580
 581        /* As soon as there's any sign of userspace auditd,
 582         * start kauditd to talk to it */
 583        if (!kauditd_task)
 584                kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd");
 585        if (IS_ERR(kauditd_task)) {
 586                err = PTR_ERR(kauditd_task);
 587                kauditd_task = NULL;
 588                return err;
 589        }
 590
 591        pid  = NETLINK_CREDS(skb)->pid;
 592        uid  = NETLINK_CREDS(skb)->uid;
 593        loginuid = NETLINK_CB(skb).loginuid;
 594        sid  = NETLINK_CB(skb).sid;
 595        seq  = nlh->nlmsg_seq;
 596        data = NLMSG_DATA(nlh);
 597
 598        switch (msg_type) {
 599        case AUDIT_GET:
 600                status_set.enabled       = audit_enabled;
 601                status_set.failure       = audit_failure;
 602                status_set.pid           = audit_pid;
 603                status_set.rate_limit    = audit_rate_limit;
 604                status_set.backlog_limit = audit_backlog_limit;
 605                status_set.lost          = atomic_read(&audit_lost);
 606                status_set.backlog       = skb_queue_len(&audit_skb_queue);
 607                audit_send_reply(NETLINK_CB(skb).pid, seq, AUDIT_GET, 0, 0,
 608                                 &status_set, sizeof(status_set));
 609                break;
 610        case AUDIT_SET:
 611                if (nlh->nlmsg_len < sizeof(struct audit_status))
 612                        return -EINVAL;
 613                status_get   = (struct audit_status *)data;
 614                if (status_get->mask & AUDIT_STATUS_ENABLED) {
 615                        err = audit_set_enabled(status_get->enabled,
 616                                                        loginuid, sid);
 617                        if (err < 0) return err;
 618                }
 619                if (status_get->mask & AUDIT_STATUS_FAILURE) {
 620                        err = audit_set_failure(status_get->failure,
 621                                                         loginuid, sid);
 622                        if (err < 0) return err;
 623                }
 624                if (status_get->mask & AUDIT_STATUS_PID) {
 625                        int new_pid = status_get->pid;
 626
 627                        if (audit_enabled != AUDIT_OFF)
 628                                audit_log_config_change("audit_pid", new_pid,
 629                                                        audit_pid, loginuid,
 630                                                        sid, 1);
 631
 632                        audit_pid = new_pid;
 633                        audit_nlk_pid = NETLINK_CB(skb).pid;
 634                }
 635                if (status_get->mask & AUDIT_STATUS_RATE_LIMIT)
 636                        err = audit_set_rate_limit(status_get->rate_limit,
 637                                                         loginuid, sid);
 638                if (status_get->mask & AUDIT_STATUS_BACKLOG_LIMIT)
 639                        err = audit_set_backlog_limit(status_get->backlog_limit,
 640                                                        loginuid, sid);
 641                break;
 642        case AUDIT_USER:
 643        case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG:
 644        case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
 645                if (!audit_enabled && msg_type != AUDIT_USER_AVC)
 646                        return 0;
 647
 648                err = audit_filter_user(&NETLINK_CB(skb), msg_type);
 649                if (err == 1) {
 650                        err = 0;
 651                        if (msg_type == AUDIT_USER_TTY) {
 652                                err = audit_prepare_user_tty(pid, loginuid);
 653                                if (err)
 654                                        break;
 655                        }
 656                        audit_log_common_recv_msg(&ab, msg_type, pid, uid,
 657                                                  loginuid, sid);
 658
 659                        if (msg_type != AUDIT_USER_TTY)
 660                                audit_log_format(ab, " msg='%.1024s'",
 661                                                 (char *)data);
 662                        else {
 663                                int size;
 664
 665                                audit_log_format(ab, " msg=");
 666                                size = nlmsg_len(nlh);
 667                                audit_log_n_untrustedstring(ab, size,
 668                                                            data);
 669                        }
 670                        audit_set_pid(ab, pid);
 671                        audit_log_end(ab);
 672                }
 673                break;
 674        case AUDIT_ADD:
 675        case AUDIT_DEL:
 676                if (nlmsg_len(nlh) < sizeof(struct audit_rule))
 677                        return -EINVAL;
 678                if (audit_enabled == AUDIT_LOCKED) {
 679                        audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE, pid,
 680                                                  uid, loginuid, sid);
 681
 682                        audit_log_format(ab, " audit_enabled=%d res=0",
 683                                         audit_enabled);
 684                        audit_log_end(ab);
 685                        return -EPERM;
 686                }
 687                /* fallthrough */
 688        case AUDIT_LIST:
 689                err = audit_receive_filter(nlh->nlmsg_type, NETLINK_CB(skb).pid,
 690                                           uid, seq, data, nlmsg_len(nlh),
 691                                           loginuid, sid);
 692                break;
 693        case AUDIT_ADD_RULE:
 694        case AUDIT_DEL_RULE:
 695                if (nlmsg_len(nlh) < sizeof(struct audit_rule_data))
 696                        return -EINVAL;
 697                if (audit_enabled == AUDIT_LOCKED) {
 698                        audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE, pid,
 699                                                  uid, loginuid, sid);
 700
 701                        audit_log_format(ab, " audit_enabled=%d res=0",
 702                                         audit_enabled);
 703                        audit_log_end(ab);
 704                        return -EPERM;
 705                }
 706                /* fallthrough */
 707        case AUDIT_LIST_RULES:
 708                err = audit_receive_filter(nlh->nlmsg_type, NETLINK_CB(skb).pid,
 709                                           uid, seq, data, nlmsg_len(nlh),
 710                                           loginuid, sid);
 711                break;
 712        case AUDIT_TRIM:
 713                audit_trim_trees();
 714
 715                audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE, pid,
 716                                          uid, loginuid, sid);
 717
 718                audit_log_format(ab, " op=trim res=1");
 719                audit_log_end(ab);
 720                break;
 721        case AUDIT_MAKE_EQUIV: {
 722                void *bufp = data;
 723                u32 sizes[2];
 724                size_t len = nlmsg_len(nlh);
 725                char *old, *new;
 726
 727                err = -EINVAL;
 728                if (len < 2 * sizeof(u32))
 729                        break;
 730                memcpy(sizes, bufp, 2 * sizeof(u32));
 731                bufp += 2 * sizeof(u32);
 732                len -= 2 * sizeof(u32);
 733                old = audit_unpack_string(&bufp, &len, sizes[0]);
 734                if (IS_ERR(old)) {
 735                        err = PTR_ERR(old);
 736                        break;
 737                }
 738                new = audit_unpack_string(&bufp, &len, sizes[1]);
 739                if (IS_ERR(new)) {
 740                        err = PTR_ERR(new);
 741                        kfree(old);
 742                        break;
 743                }
 744                /* OK, here comes... */
 745                err = audit_tag_tree(old, new);
 746
 747                audit_log_common_recv_msg(&ab, AUDIT_CONFIG_CHANGE, pid,
 748                                          uid, loginuid, sid);
 749
 750                audit_log_format(ab, " op=make_equiv old=");
 751                audit_log_untrustedstring(ab, old);
 752                audit_log_format(ab, " new=");
 753                audit_log_untrustedstring(ab, new);
 754                audit_log_format(ab, " res=%d", !err);
 755                audit_log_end(ab);
 756                kfree(old);
 757                kfree(new);
 758                break;
 759        }
 760        case AUDIT_SIGNAL_INFO:
 761                err = selinux_sid_to_string(audit_sig_sid, &ctx, &len);
 762                if (err)
 763                        return err;
 764                sig_data = kmalloc(sizeof(*sig_data) + len, GFP_KERNEL);
 765                if (!sig_data) {
 766                        kfree(ctx);
 767                        return -ENOMEM;
 768                }
 769                sig_data->uid = audit_sig_uid;
 770                sig_data->pid = audit_sig_pid;
 771                memcpy(sig_data->ctx, ctx, len);
 772                kfree(ctx);
 773                audit_send_reply(NETLINK_CB(skb).pid, seq, AUDIT_SIGNAL_INFO,
 774                                0, 0, sig_data, sizeof(*sig_data) + len);
 775                kfree(sig_data);
 776                break;
 777        case AUDIT_TTY_GET: {
 778                struct audit_tty_status s;
 779                struct task_struct *tsk;
 780
 781                read_lock(&tasklist_lock);
 782                tsk = find_task_by_pid(pid);
 783                if (!tsk)
 784                        err = -ESRCH;
 785                else {
 786                        spin_lock_irq(&tsk->sighand->siglock);
 787                        s.enabled = tsk->signal->audit_tty != 0;
 788                        spin_unlock_irq(&tsk->sighand->siglock);
 789                }
 790                read_unlock(&tasklist_lock);
 791                audit_send_reply(NETLINK_CB(skb).pid, seq, AUDIT_TTY_GET, 0, 0,
 792                                 &s, sizeof(s));
 793                break;
 794        }
 795        case AUDIT_TTY_SET: {
 796                struct audit_tty_status *s;
 797                struct task_struct *tsk;
 798
 799                if (nlh->nlmsg_len < sizeof(struct audit_tty_status))
 800                        return -EINVAL;
 801                s = data;
 802                if (s->enabled != 0 && s->enabled != 1)
 803                        return -EINVAL;
 804                read_lock(&tasklist_lock);
 805                tsk = find_task_by_pid(pid);
 806                if (!tsk)
 807                        err = -ESRCH;
 808                else {
 809                        spin_lock_irq(&tsk->sighand->siglock);
 810                        tsk->signal->audit_tty = s->enabled != 0;
 811                        spin_unlock_irq(&tsk->sighand->siglock);
 812                }
 813                read_unlock(&tasklist_lock);
 814                break;
 815        }
 816        default:
 817                err = -EINVAL;
 818                break;
 819        }
 820
 821        return err < 0 ? err : 0;
 822}
 823
 824/*
 825 * Get message from skb (based on rtnetlink_rcv_skb).  Each message is
 826 * processed by audit_receive_msg.  Malformed skbs with wrong length are
 827 * discarded silently.
 828 */
 829static void audit_receive_skb(struct sk_buff *skb)
 830{
 831        int             err;
 832        struct nlmsghdr *nlh;
 833        u32             rlen;
 834
 835        while (skb->len >= NLMSG_SPACE(0)) {
 836                nlh = nlmsg_hdr(skb);
 837                if (nlh->nlmsg_len < sizeof(*nlh) || skb->len < nlh->nlmsg_len)
 838                        return;
 839                rlen = NLMSG_ALIGN(nlh->nlmsg_len);
 840                if (rlen > skb->len)
 841                        rlen = skb->len;
 842                if ((err = audit_receive_msg(skb, nlh))) {
 843                        netlink_ack(skb, nlh, err);
 844                } else if (nlh->nlmsg_flags & NLM_F_ACK)
 845                        netlink_ack(skb, nlh, 0);
 846                skb_pull(skb, rlen);
 847        }
 848}
 849
 850/* Receive messages from netlink socket. */
 851static void audit_receive(struct sk_buff  *skb)
 852{
 853        mutex_lock(&audit_cmd_mutex);
 854        audit_receive_skb(skb);
 855        mutex_unlock(&audit_cmd_mutex);
 856}
 857
 858#ifdef CONFIG_AUDITSYSCALL
 859static const struct inotify_operations audit_inotify_ops = {
 860        .handle_event   = audit_handle_ievent,
 861        .destroy_watch  = audit_free_parent,
 862};
 863#endif
 864
 865/* Initialize audit support at boot time. */
 866static int __init audit_init(void)
 867{
 868        int i;
 869
 870        printk(KERN_INFO "audit: initializing netlink socket (%s)\n",
 871               audit_default ? "enabled" : "disabled");
 872        audit_sock = netlink_kernel_create(&init_net, NETLINK_AUDIT, 0,
 873                                           audit_receive, NULL, THIS_MODULE);
 874        if (!audit_sock)
 875                audit_panic("cannot initialize netlink socket");
 876        else
 877                audit_sock->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT;
 878
 879        skb_queue_head_init(&audit_skb_queue);
 880        audit_initialized = 1;
 881        audit_enabled = audit_default;
 882        audit_ever_enabled |= !!audit_default;
 883
 884        /* Register the callback with selinux.  This callback will be invoked
 885         * when a new policy is loaded. */
 886        selinux_audit_set_callback(&selinux_audit_rule_update);
 887
 888        audit_log(NULL, GFP_KERNEL, AUDIT_KERNEL, "initialized");
 889
 890#ifdef CONFIG_AUDITSYSCALL
 891        audit_ih = inotify_init(&audit_inotify_ops);
 892        if (IS_ERR(audit_ih))
 893                audit_panic("cannot initialize inotify handle");
 894#endif
 895
 896        for (i = 0; i < AUDIT_INODE_BUCKETS; i++)
 897                INIT_LIST_HEAD(&audit_inode_hash[i]);
 898
 899        return 0;
 900}
 901__initcall(audit_init);
 902
 903/* Process kernel command-line parameter at boot time.  audit=0 or audit=1. */
 904static int __init audit_enable(char *str)
 905{
 906        audit_default = !!simple_strtol(str, NULL, 0);
 907        printk(KERN_INFO "audit: %s%s\n",
 908               audit_default ? "enabled" : "disabled",
 909               audit_initialized ? "" : " (after initialization)");
 910        if (audit_initialized) {
 911                audit_enabled = audit_default;
 912                audit_ever_enabled |= !!audit_default;
 913        }
 914        return 1;
 915}
 916
 917__setup("audit=", audit_enable);
 918
 919static void audit_buffer_free(struct audit_buffer *ab)
 920{
 921        unsigned long flags;
 922
 923        if (!ab)
 924                return;
 925
 926        if (ab->skb)
 927                kfree_skb(ab->skb);
 928
 929        spin_lock_irqsave(&audit_freelist_lock, flags);
 930        if (audit_freelist_count > AUDIT_MAXFREE)
 931                kfree(ab);
 932        else {
 933                audit_freelist_count++;
 934                list_add(&ab->list, &audit_freelist);
 935        }
 936        spin_unlock_irqrestore(&audit_freelist_lock, flags);
 937}
 938
 939static struct audit_buffer * audit_buffer_alloc(struct audit_context *ctx,
 940                                                gfp_t gfp_mask, int type)
 941{
 942        unsigned long flags;
 943        struct audit_buffer *ab = NULL;
 944        struct nlmsghdr *nlh;
 945
 946        spin_lock_irqsave(&audit_freelist_lock, flags);
 947        if (!list_empty(&audit_freelist)) {
 948                ab = list_entry(audit_freelist.next,
 949                                struct audit_buffer, list);
 950                list_del(&ab->list);
 951                --audit_freelist_count;
 952        }
 953        spin_unlock_irqrestore(&audit_freelist_lock, flags);
 954
 955        if (!ab) {
 956                ab = kmalloc(sizeof(*ab), gfp_mask);
 957                if (!ab)
 958                        goto err;
 959        }
 960
 961        ab->skb = alloc_skb(AUDIT_BUFSIZ, gfp_mask);
 962        if (!ab->skb)
 963                goto err;
 964
 965        ab->ctx = ctx;
 966        ab->gfp_mask = gfp_mask;
 967        nlh = (struct nlmsghdr *)skb_put(ab->skb, NLMSG_SPACE(0));
 968        nlh->nlmsg_type = type;
 969        nlh->nlmsg_flags = 0;
 970        nlh->nlmsg_pid = 0;
 971        nlh->nlmsg_seq = 0;
 972        return ab;
 973err:
 974        audit_buffer_free(ab);
 975        return NULL;
 976}
 977
 978/**
 979 * audit_serial - compute a serial number for the audit record
 980 *
 981 * Compute a serial number for the audit record.  Audit records are
 982 * written to user-space as soon as they are generated, so a complete
 983 * audit record may be written in several pieces.  The timestamp of the
 984 * record and this serial number are used by the user-space tools to
 985 * determine which pieces belong to the same audit record.  The
 986 * (timestamp,serial) tuple is unique for each syscall and is live from
 987 * syscall entry to syscall exit.
 988 *
 989 * NOTE: Another possibility is to store the formatted records off the
 990 * audit context (for those records that have a context), and emit them
 991 * all at syscall exit.  However, this could delay the reporting of
 992 * significant errors until syscall exit (or never, if the system
 993 * halts).
 994 */
 995unsigned int audit_serial(void)
 996{
 997        static DEFINE_SPINLOCK(serial_lock);
 998        static unsigned int serial = 0;
 999
1000        unsigned long flags;
1001        unsigned int ret;
1002
1003        spin_lock_irqsave(&serial_lock, flags);
1004        do {
1005                ret = ++serial;
1006        } while (unlikely(!ret));
1007        spin_unlock_irqrestore(&serial_lock, flags);
1008
1009        return ret;
1010}
1011
1012static inline void audit_get_stamp(struct audit_context *ctx,
1013                                   struct timespec *t, unsigned int *serial)
1014{
1015        if (ctx)
1016                auditsc_get_stamp(ctx, t, serial);
1017        else {
1018                *t = CURRENT_TIME;
1019                *serial = audit_serial();
1020        }
1021}
1022
1023/* Obtain an audit buffer.  This routine does locking to obtain the
1024 * audit buffer, but then no locking is required for calls to
1025 * audit_log_*format.  If the tsk is a task that is currently in a
1026 * syscall, then the syscall is marked as auditable and an audit record
1027 * will be written at syscall exit.  If there is no associated task, tsk
1028 * should be NULL. */
1029
1030/**
1031 * audit_log_start - obtain an audit buffer
1032 * @ctx: audit_context (may be NULL)
1033 * @gfp_mask: type of allocation
1034 * @type: audit message type
1035 *
1036 * Returns audit_buffer pointer on success or NULL on error.
1037 *
1038 * Obtain an audit buffer.  This routine does locking to obtain the
1039 * audit buffer, but then no locking is required for calls to
1040 * audit_log_*format.  If the task (ctx) is a task that is currently in a
1041 * syscall, then the syscall is marked as auditable and an audit record
1042 * will be written at syscall exit.  If there is no associated task, then
1043 * task context (ctx) should be NULL.
1044 */
1045struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,
1046                                     int type)
1047{
1048        struct audit_buffer     *ab     = NULL;
1049        struct timespec         t;
1050        unsigned int            uninitialized_var(serial);
1051        int reserve;
1052        unsigned long timeout_start = jiffies;
1053
1054        if (!audit_initialized)
1055                return NULL;
1056
1057        if (unlikely(audit_filter_type(type)))
1058                return NULL;
1059
1060        if (gfp_mask & __GFP_WAIT)
1061                reserve = 0;
1062        else
1063                reserve = 5; /* Allow atomic callers to go up to five
1064                                entries over the normal backlog limit */
1065
1066        while (audit_backlog_limit
1067               && skb_queue_len(&audit_skb_queue) > audit_backlog_limit + reserve) {
1068                if (gfp_mask & __GFP_WAIT && audit_backlog_wait_time
1069                    && time_before(jiffies, timeout_start + audit_backlog_wait_time)) {
1070
1071                        /* Wait for auditd to drain the queue a little */
1072                        DECLARE_WAITQUEUE(wait, current);
1073                        set_current_state(TASK_INTERRUPTIBLE);
1074                        add_wait_queue(&audit_backlog_wait, &wait);
1075
1076                        if (audit_backlog_limit &&
1077                            skb_queue_len(&audit_skb_queue) > audit_backlog_limit)
1078                                schedule_timeout(timeout_start + audit_backlog_wait_time - jiffies);
1079
1080                        __set_current_state(TASK_RUNNING);
1081                        remove_wait_queue(&audit_backlog_wait, &wait);
1082                        continue;
1083                }
1084                if (audit_rate_check() && printk_ratelimit())
1085                        printk(KERN_WARNING
1086                               "audit: audit_backlog=%d > "
1087                               "audit_backlog_limit=%d\n",
1088                               skb_queue_len(&audit_skb_queue),
1089                               audit_backlog_limit);
1090                audit_log_lost("backlog limit exceeded");
1091                audit_backlog_wait_time = audit_backlog_wait_overflow;
1092                wake_up(&audit_backlog_wait);
1093                return NULL;
1094        }
1095
1096        ab = audit_buffer_alloc(ctx, gfp_mask, type);
1097        if (!ab) {
1098                audit_log_lost("out of memory in audit_log_start");
1099                return NULL;
1100        }
1101
1102        audit_get_stamp(ab->ctx, &t, &serial);
1103
1104        audit_log_format(ab, "audit(%lu.%03lu:%u): ",
1105                         t.tv_sec, t.tv_nsec/1000000, serial);
1106        return ab;
1107}
1108
1109/**
1110 * audit_expand - expand skb in the audit buffer
1111 * @ab: audit_buffer
1112 * @extra: space to add at tail of the skb
1113 *
1114 * Returns 0 (no space) on failed expansion, or available space if
1115 * successful.
1116 */
1117static inline int audit_expand(struct audit_buffer *ab, int extra)
1118{
1119        struct sk_buff *skb = ab->skb;
1120        int oldtail = skb_tailroom(skb);
1121        int ret = pskb_expand_head(skb, 0, extra, ab->gfp_mask);
1122        int newtail = skb_tailroom(skb);
1123
1124        if (ret < 0) {
1125                audit_log_lost("out of memory in audit_expand");
1126                return 0;
1127        }
1128
1129        skb->truesize += newtail - oldtail;
1130        return newtail;
1131}
1132
1133/*
1134 * Format an audit message into the audit buffer.  If there isn't enough
1135 * room in the audit buffer, more room will be allocated and vsnprint
1136 * will be called a second time.  Currently, we assume that a printk
1137 * can't format message larger than 1024 bytes, so we don't either.
1138 */
1139static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
1140                              va_list args)
1141{
1142        int len, avail;
1143        struct sk_buff *skb;
1144        va_list args2;
1145
1146        if (!ab)
1147                return;
1148
1149        BUG_ON(!ab->skb);
1150        skb = ab->skb;
1151        avail = skb_tailroom(skb);
1152        if (avail == 0) {
1153                avail = audit_expand(ab, AUDIT_BUFSIZ);
1154                if (!avail)
1155                        goto out;
1156        }
1157        va_copy(args2, args);
1158        len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args);
1159        if (len >= avail) {
1160                /* The printk buffer is 1024 bytes long, so if we get
1161                 * here and AUDIT_BUFSIZ is at least 1024, then we can
1162                 * log everything that printk could have logged. */
1163                avail = audit_expand(ab,
1164                        max_t(unsigned, AUDIT_BUFSIZ, 1+len-avail));
1165                if (!avail)
1166                        goto out;
1167                len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args2);
1168        }
1169        va_end(args2);
1170        if (len > 0)
1171                skb_put(skb, len);
1172out:
1173        return;
1174}
1175
1176/**
1177 * audit_log_format - format a message into the audit buffer.
1178 * @ab: audit_buffer
1179 * @fmt: format string
1180 * @...: optional parameters matching @fmt string
1181 *
1182 * All the work is done in audit_log_vformat.
1183 */
1184void audit_log_format(struct audit_buffer *ab, const char *fmt, ...)
1185{
1186        va_list args;
1187
1188        if (!ab)
1189                return;
1190        va_start(args, fmt);
1191        audit_log_vformat(ab, fmt, args);
1192        va_end(args);
1193}
1194
1195/**
1196 * audit_log_hex - convert a buffer to hex and append it to the audit skb
1197 * @ab: the audit_buffer
1198 * @buf: buffer to convert to hex
1199 * @len: length of @buf to be converted
1200 *
1201 * No return value; failure to expand is silently ignored.
1202 *
1203 * This function will take the passed buf and convert it into a string of
1204 * ascii hex digits. The new string is placed onto the skb.
1205 */
1206void audit_log_hex(struct audit_buffer *ab, const unsigned char *buf,
1207                size_t len)
1208{
1209        int i, avail, new_len;
1210        unsigned char *ptr;
1211        struct sk_buff *skb;
1212        static const unsigned char *hex = "0123456789ABCDEF";
1213
1214        if (!ab)
1215                return;
1216
1217        BUG_ON(!ab->skb);
1218        skb = ab->skb;
1219        avail = skb_tailroom(skb);
1220        new_len = len<<1;
1221        if (new_len >= avail) {
1222                /* Round the buffer request up to the next multiple */
1223                new_len = AUDIT_BUFSIZ*(((new_len-avail)/AUDIT_BUFSIZ) + 1);
1224                avail = audit_expand(ab, new_len);
1225                if (!avail)
1226                        return;
1227        }
1228
1229        ptr = skb_tail_pointer(skb);
1230        for (i=0; i<len; i++) {
1231                *ptr++ = hex[(buf[i] & 0xF0)>>4]; /* Upper nibble */
1232                *ptr++ = hex[buf[i] & 0x0F];      /* Lower nibble */
1233        }
1234        *ptr = 0;
1235        skb_put(skb, len << 1); /* new string is twice the old string */
1236}
1237
1238/*
1239 * Format a string of no more than slen characters into the audit buffer,
1240 * enclosed in quote marks.
1241 */
1242static void audit_log_n_string(struct audit_buffer *ab, size_t slen,
1243                               const char *string)
1244{
1245        int avail, new_len;
1246        unsigned char *ptr;
1247        struct sk_buff *skb;
1248
1249        if (!ab)
1250                return;
1251
1252        BUG_ON(!ab->skb);
1253        skb = ab->skb;
1254        avail = skb_tailroom(skb);
1255        new_len = slen + 3;     /* enclosing quotes + null terminator */
1256        if (new_len > avail) {
1257                avail = audit_expand(ab, new_len);
1258                if (!avail)
1259                        return;
1260        }
1261        ptr = skb_tail_pointer(skb);
1262        *ptr++ = '"';
1263        memcpy(ptr, string, slen);
1264        ptr += slen;
1265        *ptr++ = '"';
1266        *ptr = 0;
1267        skb_put(skb, slen + 2); /* don't include null terminator */
1268}
1269
1270/**
1271 * audit_string_contains_control - does a string need to be logged in hex
1272 * @string: string to be checked
1273 * @len: max length of the string to check
1274 */
1275int audit_string_contains_control(const char *string, size_t len)
1276{
1277        const unsigned char *p;
1278        for (p = string; p < (const unsigned char *)string + len && *p; p++) {
1279                if (*p == '"' || *p < 0x21 || *p > 0x7f)
1280                        return 1;
1281        }
1282        return 0;
1283}
1284
1285/**
1286 * audit_log_n_untrustedstring - log a string that may contain random characters
1287 * @ab: audit_buffer
1288 * @len: length of string (not including trailing null)
1289 * @string: string to be logged
1290 *
1291 * This code will escape a string that is passed to it if the string
1292 * contains a control character, unprintable character, double quote mark,
1293 * or a space. Unescaped strings will start and end with a double quote mark.
1294 * Strings that are escaped are printed in hex (2 digits per char).
1295 *
1296 * The caller specifies the number of characters in the string to log, which may
1297 * or may not be the entire string.
1298 */
1299void audit_log_n_untrustedstring(struct audit_buffer *ab, size_t len,
1300                                 const char *string)
1301{
1302        if (audit_string_contains_control(string, len))
1303                audit_log_hex(ab, string, len);
1304        else
1305                audit_log_n_string(ab, len, string);
1306}
1307
1308/**
1309 * audit_log_untrustedstring - log a string that may contain random characters
1310 * @ab: audit_buffer
1311 * @string: string to be logged
1312 *
1313 * Same as audit_log_n_untrustedstring(), except that strlen is used to
1314 * determine string length.
1315 */
1316void audit_log_untrustedstring(struct audit_buffer *ab, const char *string)
1317{
1318        audit_log_n_untrustedstring(ab, strlen(string), string);
1319}
1320
1321/* This is a helper-function to print the escaped d_path */
1322void audit_log_d_path(struct audit_buffer *ab, const char *prefix,
1323                      struct path *path)
1324{
1325        char *p, *pathname;
1326
1327        if (prefix)
1328                audit_log_format(ab, " %s", prefix);
1329
1330        /* We will allow 11 spaces for ' (deleted)' to be appended */
1331        pathname = kmalloc(PATH_MAX+11, ab->gfp_mask);
1332        if (!pathname) {
1333                audit_log_format(ab, "<no memory>");
1334                return;
1335        }
1336        p = d_path(path, pathname, PATH_MAX+11);
1337        if (IS_ERR(p)) { /* Should never happen since we send PATH_MAX */
1338                /* FIXME: can we save some information here? */
1339                audit_log_format(ab, "<too long>");
1340        } else
1341                audit_log_untrustedstring(ab, p);
1342        kfree(pathname);
1343}
1344
1345/**
1346 * audit_log_end - end one audit record
1347 * @ab: the audit_buffer
1348 *
1349 * The netlink_* functions cannot be called inside an irq context, so
1350 * the audit buffer is placed on a queue and a tasklet is scheduled to
1351 * remove them from the queue outside the irq context.  May be called in
1352 * any context.
1353 */
1354void audit_log_end(struct audit_buffer *ab)
1355{
1356        if (!ab)
1357                return;
1358        if (!audit_rate_check()) {
1359                audit_log_lost("rate limit exceeded");
1360        } else {
1361                struct nlmsghdr *nlh = nlmsg_hdr(ab->skb);
1362                if (audit_pid) {
1363                        nlh->nlmsg_len = ab->skb->len - NLMSG_SPACE(0);
1364                        skb_queue_tail(&audit_skb_queue, ab->skb);
1365                        ab->skb = NULL;
1366                        wake_up_interruptible(&kauditd_wait);
1367                } else if (nlh->nlmsg_type != AUDIT_EOE) {
1368                        if (printk_ratelimit()) {
1369                                printk(KERN_NOTICE "type=%d %s\n",
1370                                        nlh->nlmsg_type,
1371                                        ab->skb->data + NLMSG_SPACE(0));
1372                        } else
1373                                audit_log_lost("printk limit exceeded\n");
1374                }
1375        }
1376        audit_buffer_free(ab);
1377}
1378
1379/**
1380 * audit_log - Log an audit record
1381 * @ctx: audit context
1382 * @gfp_mask: type of allocation
1383 * @type: audit message type
1384 * @fmt: format string to use
1385 * @...: variable parameters matching the format string
1386 *
1387 * This is a convenience function that calls audit_log_start,
1388 * audit_log_vformat, and audit_log_end.  It may be called
1389 * in any context.
1390 */
1391void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type,
1392               const char *fmt, ...)
1393{
1394        struct audit_buffer *ab;
1395        va_list args;
1396
1397        ab = audit_log_start(ctx, gfp_mask, type);
1398        if (ab) {
1399                va_start(args, fmt);
1400                audit_log_vformat(ab, fmt, args);
1401                va_end(args);
1402                audit_log_end(ab);
1403        }
1404}
1405
1406EXPORT_SYMBOL(audit_log_start);
1407EXPORT_SYMBOL(audit_log_end);
1408EXPORT_SYMBOL(audit_log_format);
1409EXPORT_SYMBOL(audit_log);
1410
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.