LCOV - code coverage report
Current view: top level - kernel - audit.c (source / functions) Hit Total Coverage
Test: gcov_data_raspi2_real_modules_combined.info Lines: 173 754 22.9 %
Date: 2020-09-30 20:25:40 Functions: 26 69 37.7 %
Branches: 67 492 13.6 %

           Branch data     Line data    Source code
       1                 :            : // SPDX-License-Identifier: GPL-2.0-or-later
       2                 :            : /* audit.c -- Auditing support
       3                 :            :  * Gateway between the kernel (e.g., selinux) and the user-space audit daemon.
       4                 :            :  * System-call specific features have moved to auditsc.c
       5                 :            :  *
       6                 :            :  * Copyright 2003-2007 Red Hat Inc., Durham, North Carolina.
       7                 :            :  * All Rights Reserved.
       8                 :            :  *
       9                 :            :  * Written by Rickard E. (Rik) Faith <faith@redhat.com>
      10                 :            :  *
      11                 :            :  * Goals: 1) Integrate fully with Security Modules.
      12                 :            :  *        2) Minimal run-time overhead:
      13                 :            :  *           a) Minimal when syscall auditing is disabled (audit_enable=0).
      14                 :            :  *           b) Small when syscall auditing is enabled and no audit record
      15                 :            :  *              is generated (defer as much work as possible to record
      16                 :            :  *              generation time):
      17                 :            :  *              i) context is allocated,
      18                 :            :  *              ii) names from getname are stored without a copy, and
      19                 :            :  *              iii) inode information stored from path_lookup.
      20                 :            :  *        3) Ability to disable syscall auditing at boot time (audit=0).
      21                 :            :  *        4) Usable by other parts of the kernel (if audit_log* is called,
      22                 :            :  *           then a syscall record will be generated automatically for the
      23                 :            :  *           current syscall).
      24                 :            :  *        5) Netlink interface to user-space.
      25                 :            :  *        6) Support low-overhead kernel-based filtering to minimize the
      26                 :            :  *           information that must be passed to user-space.
      27                 :            :  *
      28                 :            :  * Audit userspace, documentation, tests, and bug/issue trackers:
      29                 :            :  *      https://github.com/linux-audit
      30                 :            :  */
      31                 :            : 
      32                 :            : #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
      33                 :            : 
      34                 :            : #include <linux/file.h>
      35                 :            : #include <linux/init.h>
      36                 :            : #include <linux/types.h>
      37                 :            : #include <linux/atomic.h>
      38                 :            : #include <linux/mm.h>
      39                 :            : #include <linux/export.h>
      40                 :            : #include <linux/slab.h>
      41                 :            : #include <linux/err.h>
      42                 :            : #include <linux/kthread.h>
      43                 :            : #include <linux/kernel.h>
      44                 :            : #include <linux/syscalls.h>
      45                 :            : #include <linux/spinlock.h>
      46                 :            : #include <linux/rcupdate.h>
      47                 :            : #include <linux/mutex.h>
      48                 :            : #include <linux/gfp.h>
      49                 :            : #include <linux/pid.h>
      50                 :            : 
      51                 :            : #include <linux/audit.h>
      52                 :            : 
      53                 :            : #include <net/sock.h>
      54                 :            : #include <net/netlink.h>
      55                 :            : #include <linux/skbuff.h>
      56                 :            : #ifdef CONFIG_SECURITY
      57                 :            : #include <linux/security.h>
      58                 :            : #endif
      59                 :            : #include <linux/freezer.h>
      60                 :            : #include <linux/pid_namespace.h>
      61                 :            : #include <net/netns/generic.h>
      62                 :            : 
      63                 :            : #include "audit.h"
      64                 :            : 
      65                 :            : /* No auditing will take place until audit_initialized == AUDIT_INITIALIZED.
      66                 :            :  * (Initialization happens after skb_init is called.) */
      67                 :            : #define AUDIT_DISABLED          -1
      68                 :            : #define AUDIT_UNINITIALIZED     0
      69                 :            : #define AUDIT_INITIALIZED       1
      70                 :            : static int      audit_initialized;
      71                 :            : 
      72                 :            : u32             audit_enabled = AUDIT_OFF;
      73                 :            : bool            audit_ever_enabled = !!AUDIT_OFF;
      74                 :            : 
      75                 :            : EXPORT_SYMBOL_GPL(audit_enabled);
      76                 :            : 
      77                 :            : /* Default state when kernel boots without any parameters. */
      78                 :            : static u32      audit_default = AUDIT_OFF;
      79                 :            : 
      80                 :            : /* If auditing cannot proceed, audit_failure selects what happens. */
      81                 :            : static u32      audit_failure = AUDIT_FAIL_PRINTK;
      82                 :            : 
      83                 :            : /* private audit network namespace index */
      84                 :            : static unsigned int audit_net_id;
      85                 :            : 
      86                 :            : /**
      87                 :            :  * struct audit_net - audit private network namespace data
      88                 :            :  * @sk: communication socket
      89                 :            :  */
      90                 :            : struct audit_net {
      91                 :            :         struct sock *sk;
      92                 :            : };
      93                 :            : 
      94                 :            : /**
      95                 :            :  * struct auditd_connection - kernel/auditd connection state
      96                 :            :  * @pid: auditd PID
      97                 :            :  * @portid: netlink portid
      98                 :            :  * @net: the associated network namespace
      99                 :            :  * @rcu: RCU head
     100                 :            :  *
     101                 :            :  * Description:
     102                 :            :  * This struct is RCU protected; you must either hold the RCU lock for reading
     103                 :            :  * or the associated spinlock for writing.
     104                 :            :  */
     105                 :            : static struct auditd_connection {
     106                 :            :         struct pid *pid;
     107                 :            :         u32 portid;
     108                 :            :         struct net *net;
     109                 :            :         struct rcu_head rcu;
     110                 :            : } *auditd_conn = NULL;
     111                 :            : static DEFINE_SPINLOCK(auditd_conn_lock);
     112                 :            : 
     113                 :            : /* If audit_rate_limit is non-zero, limit the rate of sending audit records
     114                 :            :  * to that number per second.  This prevents DoS attacks, but results in
     115                 :            :  * audit records being dropped. */
     116                 :            : static u32      audit_rate_limit;
     117                 :            : 
     118                 :            : /* Number of outstanding audit_buffers allowed.
     119                 :            :  * When set to zero, this means unlimited. */
     120                 :            : static u32      audit_backlog_limit = 64;
     121                 :            : #define AUDIT_BACKLOG_WAIT_TIME (60 * HZ)
     122                 :            : static u32      audit_backlog_wait_time = AUDIT_BACKLOG_WAIT_TIME;
     123                 :            : 
     124                 :            : /* The identity of the user shutting down the audit system. */
     125                 :            : kuid_t          audit_sig_uid = INVALID_UID;
     126                 :            : pid_t           audit_sig_pid = -1;
     127                 :            : u32             audit_sig_sid = 0;
     128                 :            : 
     129                 :            : /* Records can be lost in several ways:
     130                 :            :    0) [suppressed in audit_alloc]
     131                 :            :    1) out of memory in audit_log_start [kmalloc of struct audit_buffer]
     132                 :            :    2) out of memory in audit_log_move [alloc_skb]
     133                 :            :    3) suppressed due to audit_rate_limit
     134                 :            :    4) suppressed due to audit_backlog_limit
     135                 :            : */
     136                 :            : static atomic_t audit_lost = ATOMIC_INIT(0);
     137                 :            : 
     138                 :            : /* Hash for inode-based rules */
     139                 :            : struct list_head audit_inode_hash[AUDIT_INODE_BUCKETS];
     140                 :            : 
     141                 :            : static struct kmem_cache *audit_buffer_cache;
     142                 :            : 
     143                 :            : /* queue msgs to send via kauditd_task */
     144                 :            : static struct sk_buff_head audit_queue;
     145                 :            : /* queue msgs due to temporary unicast send problems */
     146                 :            : static struct sk_buff_head audit_retry_queue;
     147                 :            : /* queue msgs waiting for new auditd connection */
     148                 :            : static struct sk_buff_head audit_hold_queue;
     149                 :            : 
     150                 :            : /* queue servicing thread */
     151                 :            : static struct task_struct *kauditd_task;
     152                 :            : static DECLARE_WAIT_QUEUE_HEAD(kauditd_wait);
     153                 :            : 
     154                 :            : /* waitqueue for callers who are blocked on the audit backlog */
     155                 :            : static DECLARE_WAIT_QUEUE_HEAD(audit_backlog_wait);
     156                 :            : 
     157                 :            : static struct audit_features af = {.vers = AUDIT_FEATURE_VERSION,
     158                 :            :                                    .mask = -1,
     159                 :            :                                    .features = 0,
     160                 :            :                                    .lock = 0,};
     161                 :            : 
     162                 :            : static char *audit_feature_names[2] = {
     163                 :            :         "only_unset_loginuid",
     164                 :            :         "loginuid_immutable",
     165                 :            : };
     166                 :            : 
     167                 :            : /**
     168                 :            :  * struct audit_ctl_mutex - serialize requests from userspace
     169                 :            :  * @lock: the mutex used for locking
     170                 :            :  * @owner: the task which owns the lock
     171                 :            :  *
     172                 :            :  * Description:
     173                 :            :  * This is the lock struct used to ensure we only process userspace requests
     174                 :            :  * in an orderly fashion.  We can't simply use a mutex/lock here because we
     175                 :            :  * need to track lock ownership so we don't end up blocking the lock owner in
     176                 :            :  * audit_log_start() or similar.
     177                 :            :  */
     178                 :            : static struct audit_ctl_mutex {
     179                 :            :         struct mutex lock;
     180                 :            :         void *owner;
     181                 :            : } audit_cmd_mutex;
     182                 :            : 
     183                 :            : /* AUDIT_BUFSIZ is the size of the temporary buffer used for formatting
     184                 :            :  * audit records.  Since printk uses a 1024 byte buffer, this buffer
     185                 :            :  * should be at least that large. */
     186                 :            : #define AUDIT_BUFSIZ 1024
     187                 :            : 
     188                 :            : /* The audit_buffer is used when formatting an audit record.  The caller
     189                 :            :  * locks briefly to get the record off the freelist or to allocate the
     190                 :            :  * buffer, and locks briefly to send the buffer to the netlink layer or
     191                 :            :  * to place it on a transmit queue.  Multiple audit_buffers can be in
     192                 :            :  * use simultaneously. */
     193                 :            : struct audit_buffer {
     194                 :            :         struct sk_buff       *skb;      /* formatted skb ready to send */
     195                 :            :         struct audit_context *ctx;      /* NULL or associated context */
     196                 :            :         gfp_t                gfp_mask;
     197                 :            : };
     198                 :            : 
     199                 :            : struct audit_reply {
     200                 :            :         __u32 portid;
     201                 :            :         struct net *net;
     202                 :            :         struct sk_buff *skb;
     203                 :            : };
     204                 :            : 
     205                 :            : /**
     206                 :            :  * auditd_test_task - Check to see if a given task is an audit daemon
     207                 :            :  * @task: the task to check
     208                 :            :  *
     209                 :            :  * Description:
     210                 :            :  * Return 1 if the task is a registered audit daemon, 0 otherwise.
     211                 :            :  */
     212                 :      27080 : int auditd_test_task(struct task_struct *task)
     213                 :            : {
     214                 :            :         int rc;
     215                 :            :         struct auditd_connection *ac;
     216                 :            : 
     217                 :            :         rcu_read_lock();
     218                 :      27080 :         ac = rcu_dereference(auditd_conn);
     219   [ -  +  #  # ]:      27080 :         rc = (ac && ac->pid == task_tgid(task) ? 1 : 0);
     220                 :            :         rcu_read_unlock();
     221                 :            : 
     222                 :      27080 :         return rc;
     223                 :            : }
     224                 :            : 
     225                 :            : /**
     226                 :            :  * audit_ctl_lock - Take the audit control lock
     227                 :            :  */
     228                 :          0 : void audit_ctl_lock(void)
     229                 :            : {
     230                 :      14532 :         mutex_lock(&audit_cmd_mutex.lock);
     231                 :      14532 :         audit_cmd_mutex.owner = current;
     232                 :          0 : }
     233                 :            : 
     234                 :            : /**
     235                 :            :  * audit_ctl_unlock - Drop the audit control lock
     236                 :            :  */
     237                 :          0 : void audit_ctl_unlock(void)
     238                 :            : {
     239                 :      14532 :         audit_cmd_mutex.owner = NULL;
     240                 :      14532 :         mutex_unlock(&audit_cmd_mutex.lock);
     241                 :          0 : }
     242                 :            : 
     243                 :            : /**
     244                 :            :  * audit_ctl_owner_current - Test to see if the current task owns the lock
     245                 :            :  *
     246                 :            :  * Description:
     247                 :            :  * Return true if the current task owns the audit control lock, false if it
     248                 :            :  * doesn't own the lock.
     249                 :            :  */
     250                 :            : static bool audit_ctl_owner_current(void)
     251                 :            : {
     252                 :        207 :         return (current == audit_cmd_mutex.owner);
     253                 :            : }
     254                 :            : 
     255                 :            : /**
     256                 :            :  * auditd_pid_vnr - Return the auditd PID relative to the namespace
     257                 :            :  *
     258                 :            :  * Description:
     259                 :            :  * Returns the PID in relation to the namespace, 0 on failure.
     260                 :            :  */
     261                 :          0 : static pid_t auditd_pid_vnr(void)
     262                 :            : {
     263                 :            :         pid_t pid;
     264                 :            :         const struct auditd_connection *ac;
     265                 :            : 
     266                 :            :         rcu_read_lock();
     267                 :          0 :         ac = rcu_dereference(auditd_conn);
     268   [ #  #  #  # ]:          0 :         if (!ac || !ac->pid)
     269                 :            :                 pid = 0;
     270                 :            :         else
     271                 :          0 :                 pid = pid_vnr(ac->pid);
     272                 :            :         rcu_read_unlock();
     273                 :            : 
     274                 :          0 :         return pid;
     275                 :            : }
     276                 :            : 
     277                 :            : /**
     278                 :            :  * audit_get_sk - Return the audit socket for the given network namespace
     279                 :            :  * @net: the destination network namespace
     280                 :            :  *
     281                 :            :  * Description:
     282                 :            :  * Returns the sock pointer if valid, NULL otherwise.  The caller must ensure
     283                 :            :  * that a reference is held for the network namespace while the sock is in use.
     284                 :            :  */
     285                 :            : static struct sock *audit_get_sk(const struct net *net)
     286                 :            : {
     287                 :            :         struct audit_net *aunet;
     288                 :            : 
     289   [ #  #  #  #  :        207 :         if (!net)
          #  #  +  -  #  
                      # ]
     290                 :            :                 return NULL;
     291                 :            : 
     292                 :        207 :         aunet = net_generic(net, audit_net_id);
     293                 :        207 :         return aunet->sk;
     294                 :            : }
     295                 :            : 
     296                 :          0 : void audit_panic(const char *message)
     297                 :            : {
     298      [ #  #  # ]:          0 :         switch (audit_failure) {
     299                 :            :         case AUDIT_FAIL_SILENT:
     300                 :            :                 break;
     301                 :            :         case AUDIT_FAIL_PRINTK:
     302         [ #  # ]:          0 :                 if (printk_ratelimit())
     303                 :          0 :                         pr_err("%s\n", message);
     304                 :            :                 break;
     305                 :            :         case AUDIT_FAIL_PANIC:
     306                 :          0 :                 panic("audit: %s\n", message);
     307                 :            :                 break;
     308                 :            :         }
     309                 :          0 : }
     310                 :            : 
     311                 :        207 : static inline int audit_rate_check(void)
     312                 :            : {
     313                 :            :         static unsigned long    last_check = 0;
     314                 :            :         static int              messages   = 0;
     315                 :            :         static DEFINE_SPINLOCK(lock);
     316                 :            :         unsigned long           flags;
     317                 :            :         unsigned long           now;
     318                 :            :         unsigned long           elapsed;
     319                 :            :         int                     retval     = 0;
     320                 :            : 
     321         [ -  + ]:        207 :         if (!audit_rate_limit) return 1;
     322                 :            : 
     323                 :          0 :         spin_lock_irqsave(&lock, flags);
     324         [ #  # ]:          0 :         if (++messages < audit_rate_limit) {
     325                 :            :                 retval = 1;
     326                 :            :         } else {
     327                 :          0 :                 now     = jiffies;
     328                 :          0 :                 elapsed = now - last_check;
     329         [ #  # ]:          0 :                 if (elapsed > HZ) {
     330                 :          0 :                         last_check = now;
     331                 :          0 :                         messages   = 0;
     332                 :            :                         retval     = 1;
     333                 :            :                 }
     334                 :            :         }
     335                 :            :         spin_unlock_irqrestore(&lock, flags);
     336                 :            : 
     337                 :          0 :         return retval;
     338                 :            : }
     339                 :            : 
     340                 :            : /**
     341                 :            :  * audit_log_lost - conditionally log lost audit message event
     342                 :            :  * @message: the message stating reason for lost audit message
     343                 :            :  *
     344                 :            :  * Emit at least 1 message per second, even if audit_rate_check is
     345                 :            :  * throttling.
     346                 :            :  * Always increment the lost messages counter.
     347                 :            : */
     348                 :          0 : void audit_log_lost(const char *message)
     349                 :            : {
     350                 :            :         static unsigned long    last_msg = 0;
     351                 :            :         static DEFINE_SPINLOCK(lock);
     352                 :            :         unsigned long           flags;
     353                 :            :         unsigned long           now;
     354                 :            :         int                     print;
     355                 :            : 
     356                 :            :         atomic_inc(&audit_lost);
     357                 :            : 
     358   [ #  #  #  # ]:          0 :         print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit);
     359                 :            : 
     360         [ #  # ]:          0 :         if (!print) {
     361                 :          0 :                 spin_lock_irqsave(&lock, flags);
     362                 :          0 :                 now = jiffies;
     363         [ #  # ]:          0 :                 if (now - last_msg > HZ) {
     364                 :            :                         print = 1;
     365                 :          0 :                         last_msg = now;
     366                 :            :                 }
     367                 :            :                 spin_unlock_irqrestore(&lock, flags);
     368                 :            :         }
     369                 :            : 
     370         [ #  # ]:          0 :         if (print) {
     371         [ #  # ]:          0 :                 if (printk_ratelimit())
     372                 :          0 :                         pr_warn("audit_lost=%u audit_rate_limit=%u audit_backlog_limit=%u\n",
     373                 :            :                                 atomic_read(&audit_lost),
     374                 :            :                                 audit_rate_limit,
     375                 :            :                                 audit_backlog_limit);
     376                 :          0 :                 audit_panic(message);
     377                 :            :         }
     378                 :          0 : }
     379                 :            : 
     380                 :          0 : static int audit_log_config_change(char *function_name, u32 new, u32 old,
     381                 :            :                                    int allow_changes)
     382                 :            : {
     383                 :            :         struct audit_buffer *ab;
     384                 :            :         int rc = 0;
     385                 :            : 
     386                 :          0 :         ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_CONFIG_CHANGE);
     387         [ #  # ]:          0 :         if (unlikely(!ab))
     388                 :            :                 return rc;
     389                 :          0 :         audit_log_format(ab, "op=set %s=%u old=%u ", function_name, new, old);
     390                 :          0 :         audit_log_session_info(ab);
     391                 :          0 :         rc = audit_log_task_context(ab);
     392         [ #  # ]:          0 :         if (rc)
     393                 :            :                 allow_changes = 0; /* Something weird, deny request */
     394                 :          0 :         audit_log_format(ab, " res=%d", allow_changes);
     395                 :          0 :         audit_log_end(ab);
     396                 :          0 :         return rc;
     397                 :            : }
     398                 :            : 
     399                 :          0 : static int audit_do_config_change(char *function_name, u32 *to_change, u32 new)
     400                 :            : {
     401                 :            :         int allow_changes, rc = 0;
     402                 :          0 :         u32 old = *to_change;
     403                 :            : 
     404                 :            :         /* check if we are locked */
     405         [ #  # ]:          0 :         if (audit_enabled == AUDIT_LOCKED)
     406                 :            :                 allow_changes = 0;
     407                 :            :         else
     408                 :            :                 allow_changes = 1;
     409                 :            : 
     410         [ #  # ]:          0 :         if (audit_enabled != AUDIT_OFF) {
     411                 :          0 :                 rc = audit_log_config_change(function_name, new, old, allow_changes);
     412         [ #  # ]:          0 :                 if (rc)
     413                 :            :                         allow_changes = 0;
     414                 :            :         }
     415                 :            : 
     416                 :            :         /* If we are allowed, make the change */
     417         [ #  # ]:          0 :         if (allow_changes == 1)
     418                 :          0 :                 *to_change = new;
     419                 :            :         /* Not allowed, update reason */
     420         [ #  # ]:          0 :         else if (rc == 0)
     421                 :            :                 rc = -EPERM;
     422                 :          0 :         return rc;
     423                 :            : }
     424                 :            : 
     425                 :            : static int audit_set_rate_limit(u32 limit)
     426                 :            : {
     427                 :          0 :         return audit_do_config_change("audit_rate_limit", &audit_rate_limit, limit);
     428                 :            : }
     429                 :            : 
     430                 :            : static int audit_set_backlog_limit(u32 limit)
     431                 :            : {
     432                 :          0 :         return audit_do_config_change("audit_backlog_limit", &audit_backlog_limit, limit);
     433                 :            : }
     434                 :            : 
     435                 :            : static int audit_set_backlog_wait_time(u32 timeout)
     436                 :            : {
     437                 :          0 :         return audit_do_config_change("audit_backlog_wait_time",
     438                 :            :                                       &audit_backlog_wait_time, timeout);
     439                 :            : }
     440                 :            : 
     441                 :          0 : static int audit_set_enabled(u32 state)
     442                 :            : {
     443                 :            :         int rc;
     444         [ #  # ]:          0 :         if (state > AUDIT_LOCKED)
     445                 :            :                 return -EINVAL;
     446                 :            : 
     447                 :          0 :         rc =  audit_do_config_change("audit_enabled", &audit_enabled, state);
     448         [ #  # ]:          0 :         if (!rc)
     449                 :          0 :                 audit_ever_enabled |= !!state;
     450                 :            : 
     451                 :          0 :         return rc;
     452                 :            : }
     453                 :            : 
     454                 :            : static int audit_set_failure(u32 state)
     455                 :            : {
     456         [ #  # ]:          0 :         if (state != AUDIT_FAIL_SILENT
     457                 :            :             && state != AUDIT_FAIL_PRINTK
     458                 :            :             && state != AUDIT_FAIL_PANIC)
     459                 :            :                 return -EINVAL;
     460                 :            : 
     461                 :          0 :         return audit_do_config_change("audit_failure", &audit_failure, state);
     462                 :            : }
     463                 :            : 
     464                 :            : /**
     465                 :            :  * auditd_conn_free - RCU helper to release an auditd connection struct
     466                 :            :  * @rcu: RCU head
     467                 :            :  *
     468                 :            :  * Description:
     469                 :            :  * Drop any references inside the auditd connection tracking struct and free
     470                 :            :  * the memory.
     471                 :            :  */
     472                 :          0 : static void auditd_conn_free(struct rcu_head *rcu)
     473                 :            : {
     474                 :            :         struct auditd_connection *ac;
     475                 :            : 
     476                 :          0 :         ac = container_of(rcu, struct auditd_connection, rcu);
     477                 :          0 :         put_pid(ac->pid);
     478                 :          0 :         put_net(ac->net);
     479                 :          0 :         kfree(ac);
     480                 :          0 : }
     481                 :            : 
     482                 :            : /**
     483                 :            :  * auditd_set - Set/Reset the auditd connection state
     484                 :            :  * @pid: auditd PID
     485                 :            :  * @portid: auditd netlink portid
     486                 :            :  * @net: auditd network namespace pointer
     487                 :            :  *
     488                 :            :  * Description:
     489                 :            :  * This function will obtain and drop network namespace references as
     490                 :            :  * necessary.  Returns zero on success, negative values on failure.
     491                 :            :  */
     492                 :          0 : static int auditd_set(struct pid *pid, u32 portid, struct net *net)
     493                 :            : {
     494                 :            :         unsigned long flags;
     495                 :            :         struct auditd_connection *ac_old, *ac_new;
     496                 :            : 
     497         [ #  # ]:          0 :         if (!pid || !net)
     498                 :            :                 return -EINVAL;
     499                 :            : 
     500                 :          0 :         ac_new = kzalloc(sizeof(*ac_new), GFP_KERNEL);
     501         [ #  # ]:          0 :         if (!ac_new)
     502                 :            :                 return -ENOMEM;
     503                 :          0 :         ac_new->pid = get_pid(pid);
     504                 :          0 :         ac_new->portid = portid;
     505                 :          0 :         ac_new->net = get_net(net);
     506                 :            : 
     507                 :          0 :         spin_lock_irqsave(&auditd_conn_lock, flags);
     508                 :          0 :         ac_old = rcu_dereference_protected(auditd_conn,
     509                 :            :                                            lockdep_is_held(&auditd_conn_lock));
     510                 :          0 :         rcu_assign_pointer(auditd_conn, ac_new);
     511                 :            :         spin_unlock_irqrestore(&auditd_conn_lock, flags);
     512                 :            : 
     513         [ #  # ]:          0 :         if (ac_old)
     514                 :          0 :                 call_rcu(&ac_old->rcu, auditd_conn_free);
     515                 :            : 
     516                 :            :         return 0;
     517                 :            : }
     518                 :            : 
     519                 :            : /**
     520                 :            :  * kauditd_print_skb - Print the audit record to the ring buffer
     521                 :            :  * @skb: audit record
     522                 :            :  *
     523                 :            :  * Whatever the reason, this packet may not make it to the auditd connection
     524                 :            :  * so write it via printk so the information isn't completely lost.
     525                 :            :  */
     526                 :        207 : static void kauditd_printk_skb(struct sk_buff *skb)
     527                 :            : {
     528                 :            :         struct nlmsghdr *nlh = nlmsg_hdr(skb);
     529                 :            :         char *data = nlmsg_data(nlh);
     530                 :            : 
     531   [ +  -  +  - ]:        207 :         if (nlh->nlmsg_type != AUDIT_EOE && printk_ratelimit())
     532                 :        207 :                 pr_notice("type=%d %s\n", nlh->nlmsg_type, data);
     533                 :        207 : }
     534                 :            : 
     535                 :            : /**
     536                 :            :  * kauditd_rehold_skb - Handle a audit record send failure in the hold queue
     537                 :            :  * @skb: audit record
     538                 :            :  *
     539                 :            :  * Description:
     540                 :            :  * This should only be used by the kauditd_thread when it fails to flush the
     541                 :            :  * hold queue.
     542                 :            :  */
     543                 :          0 : static void kauditd_rehold_skb(struct sk_buff *skb)
     544                 :            : {
     545                 :            :         /* put the record back in the queue at the same place */
     546                 :          0 :         skb_queue_head(&audit_hold_queue, skb);
     547                 :          0 : }
     548                 :            : 
     549                 :            : /**
     550                 :            :  * kauditd_hold_skb - Queue an audit record, waiting for auditd
     551                 :            :  * @skb: audit record
     552                 :            :  *
     553                 :            :  * Description:
     554                 :            :  * Queue the audit record, waiting for an instance of auditd.  When this
     555                 :            :  * function is called we haven't given up yet on sending the record, but things
     556                 :            :  * are not looking good.  The first thing we want to do is try to write the
     557                 :            :  * record via printk and then see if we want to try and hold on to the record
     558                 :            :  * and queue it, if we have room.  If we want to hold on to the record, but we
     559                 :            :  * don't have room, record a record lost message.
     560                 :            :  */
     561                 :        207 : static void kauditd_hold_skb(struct sk_buff *skb)
     562                 :            : {
     563                 :            :         /* at this point it is uncertain if we will ever send this to auditd so
     564                 :            :          * try to send the message via printk before we go any further */
     565                 :        207 :         kauditd_printk_skb(skb);
     566                 :            : 
     567                 :            :         /* can we just silently drop the message? */
     568         [ +  - ]:        207 :         if (!audit_default) {
     569                 :        207 :                 kfree_skb(skb);
     570                 :        207 :                 return;
     571                 :            :         }
     572                 :            : 
     573                 :            :         /* if we have room, queue the message */
     574   [ #  #  #  # ]:          0 :         if (!audit_backlog_limit ||
     575                 :            :             skb_queue_len(&audit_hold_queue) < audit_backlog_limit) {
     576                 :          0 :                 skb_queue_tail(&audit_hold_queue, skb);
     577                 :          0 :                 return;
     578                 :            :         }
     579                 :            : 
     580                 :            :         /* we have no other options - drop the message */
     581                 :          0 :         audit_log_lost("kauditd hold queue overflow");
     582                 :          0 :         kfree_skb(skb);
     583                 :            : }
     584                 :            : 
     585                 :            : /**
     586                 :            :  * kauditd_retry_skb - Queue an audit record, attempt to send again to auditd
     587                 :            :  * @skb: audit record
     588                 :            :  *
     589                 :            :  * Description:
     590                 :            :  * Not as serious as kauditd_hold_skb() as we still have a connected auditd,
     591                 :            :  * but for some reason we are having problems sending it audit records so
     592                 :            :  * queue the given record and attempt to resend.
     593                 :            :  */
     594                 :          0 : static void kauditd_retry_skb(struct sk_buff *skb)
     595                 :            : {
     596                 :            :         /* NOTE: because records should only live in the retry queue for a
     597                 :            :          * short period of time, before either being sent or moved to the hold
     598                 :            :          * queue, we don't currently enforce a limit on this queue */
     599                 :          0 :         skb_queue_tail(&audit_retry_queue, skb);
     600                 :          0 : }
     601                 :            : 
     602                 :            : /**
     603                 :            :  * auditd_reset - Disconnect the auditd connection
     604                 :            :  * @ac: auditd connection state
     605                 :            :  *
     606                 :            :  * Description:
     607                 :            :  * Break the auditd/kauditd connection and move all the queued records into the
     608                 :            :  * hold queue in case auditd reconnects.  It is important to note that the @ac
     609                 :            :  * pointer should never be dereferenced inside this function as it may be NULL
     610                 :            :  * or invalid, you can only compare the memory address!  If @ac is NULL then
     611                 :            :  * the connection will always be reset.
     612                 :            :  */
     613                 :          0 : static void auditd_reset(const struct auditd_connection *ac)
     614                 :            : {
     615                 :            :         unsigned long flags;
     616                 :            :         struct sk_buff *skb;
     617                 :            :         struct auditd_connection *ac_old;
     618                 :            : 
     619                 :            :         /* if it isn't already broken, break the connection */
     620                 :          0 :         spin_lock_irqsave(&auditd_conn_lock, flags);
     621                 :          0 :         ac_old = rcu_dereference_protected(auditd_conn,
     622                 :            :                                            lockdep_is_held(&auditd_conn_lock));
     623         [ #  # ]:          0 :         if (ac && ac != ac_old) {
     624                 :            :                 /* someone already registered a new auditd connection */
     625                 :            :                 spin_unlock_irqrestore(&auditd_conn_lock, flags);
     626                 :          0 :                 return;
     627                 :            :         }
     628                 :            :         rcu_assign_pointer(auditd_conn, NULL);
     629                 :            :         spin_unlock_irqrestore(&auditd_conn_lock, flags);
     630                 :            : 
     631         [ #  # ]:          0 :         if (ac_old)
     632                 :          0 :                 call_rcu(&ac_old->rcu, auditd_conn_free);
     633                 :            : 
     634                 :            :         /* flush the retry queue to the hold queue, but don't touch the main
     635                 :            :          * queue since we need to process that normally for multicast */
     636         [ #  # ]:          0 :         while ((skb = skb_dequeue(&audit_retry_queue)))
     637                 :          0 :                 kauditd_hold_skb(skb);
     638                 :            : }
     639                 :            : 
     640                 :            : /**
     641                 :            :  * auditd_send_unicast_skb - Send a record via unicast to auditd
     642                 :            :  * @skb: audit record
     643                 :            :  *
     644                 :            :  * Description:
     645                 :            :  * Send a skb to the audit daemon, returns positive/zero values on success and
     646                 :            :  * negative values on failure; in all cases the skb will be consumed by this
     647                 :            :  * function.  If the send results in -ECONNREFUSED the connection with auditd
     648                 :            :  * will be reset.  This function may sleep so callers should not hold any locks
     649                 :            :  * where this would cause a problem.
     650                 :            :  */
     651                 :          0 : static int auditd_send_unicast_skb(struct sk_buff *skb)
     652                 :            : {
     653                 :            :         int rc;
     654                 :            :         u32 portid;
     655                 :            :         struct net *net;
     656                 :            :         struct sock *sk;
     657                 :            :         struct auditd_connection *ac;
     658                 :            : 
     659                 :            :         /* NOTE: we can't call netlink_unicast while in the RCU section so
     660                 :            :          *       take a reference to the network namespace and grab local
     661                 :            :          *       copies of the namespace, the sock, and the portid; the
     662                 :            :          *       namespace and sock aren't going to go away while we hold a
     663                 :            :          *       reference and if the portid does become invalid after the RCU
     664                 :            :          *       section netlink_unicast() should safely return an error */
     665                 :            : 
     666                 :            :         rcu_read_lock();
     667                 :          0 :         ac = rcu_dereference(auditd_conn);
     668         [ #  # ]:          0 :         if (!ac) {
     669                 :            :                 rcu_read_unlock();
     670                 :          0 :                 kfree_skb(skb);
     671                 :            :                 rc = -ECONNREFUSED;
     672                 :          0 :                 goto err;
     673                 :            :         }
     674                 :          0 :         net = get_net(ac->net);
     675                 :            :         sk = audit_get_sk(net);
     676                 :          0 :         portid = ac->portid;
     677                 :            :         rcu_read_unlock();
     678                 :            : 
     679                 :          0 :         rc = netlink_unicast(sk, skb, portid, 0);
     680                 :          0 :         put_net(net);
     681         [ #  # ]:          0 :         if (rc < 0)
     682                 :            :                 goto err;
     683                 :            : 
     684                 :            :         return rc;
     685                 :            : 
     686                 :            : err:
     687         [ #  # ]:          0 :         if (ac && rc == -ECONNREFUSED)
     688                 :          0 :                 auditd_reset(ac);
     689                 :          0 :         return rc;
     690                 :            : }
     691                 :            : 
     692                 :            : /**
     693                 :            :  * kauditd_send_queue - Helper for kauditd_thread to flush skb queues
     694                 :            :  * @sk: the sending sock
     695                 :            :  * @portid: the netlink destination
     696                 :            :  * @queue: the skb queue to process
     697                 :            :  * @retry_limit: limit on number of netlink unicast failures
     698                 :            :  * @skb_hook: per-skb hook for additional processing
     699                 :            :  * @err_hook: hook called if the skb fails the netlink unicast send
     700                 :            :  *
     701                 :            :  * Description:
     702                 :            :  * Run through the given queue and attempt to send the audit records to auditd,
     703                 :            :  * returns zero on success, negative values on failure.  It is up to the caller
     704                 :            :  * to ensure that the @sk is valid for the duration of this function.
     705                 :            :  *
     706                 :            :  */
     707                 :        343 : static int kauditd_send_queue(struct sock *sk, u32 portid,
     708                 :            :                               struct sk_buff_head *queue,
     709                 :            :                               unsigned int retry_limit,
     710                 :            :                               void (*skb_hook)(struct sk_buff *skb),
     711                 :            :                               void (*err_hook)(struct sk_buff *skb))
     712                 :            : {
     713                 :            :         int rc = 0;
     714                 :            :         struct sk_buff *skb;
     715                 :            :         static unsigned int failed = 0;
     716                 :            : 
     717                 :            :         /* NOTE: kauditd_thread takes care of all our locking, we just use
     718                 :            :          *       the netlink info passed to us (e.g. sk and portid) */
     719                 :            : 
     720         [ +  + ]:        893 :         while ((skb = skb_dequeue(queue))) {
     721                 :            :                 /* call the skb_hook for each skb we touch */
     722         [ +  - ]:        207 :                 if (skb_hook)
     723                 :        207 :                         (*skb_hook)(skb);
     724                 :            : 
     725                 :            :                 /* can we send to anyone via unicast? */
     726         [ +  - ]:        207 :                 if (!sk) {
     727         [ +  - ]:        207 :                         if (err_hook)
     728                 :        207 :                                 (*err_hook)(skb);
     729                 :        207 :                         continue;
     730                 :            :                 }
     731                 :            : 
     732                 :            :                 /* grab an extra skb reference in case of error */
     733                 :            :                 skb_get(skb);
     734                 :          0 :                 rc = netlink_unicast(sk, skb, portid, 0);
     735         [ #  # ]:          0 :                 if (rc < 0) {
     736                 :            :                         /* fatal failure for our queue flush attempt? */
     737         [ #  # ]:          0 :                         if (++failed >= retry_limit ||
     738         [ #  # ]:          0 :                             rc == -ECONNREFUSED || rc == -EPERM) {
     739                 :            :                                 /* yes - error processing for the queue */
     740                 :            :                                 sk = NULL;
     741         [ #  # ]:          0 :                                 if (err_hook)
     742                 :          0 :                                         (*err_hook)(skb);
     743         [ #  # ]:          0 :                                 if (!skb_hook)
     744                 :            :                                         goto out;
     745                 :            :                                 /* keep processing with the skb_hook */
     746                 :          0 :                                 continue;
     747                 :            :                         } else
     748                 :            :                                 /* no - requeue to preserve ordering */
     749                 :          0 :                                 skb_queue_head(queue, skb);
     750                 :            :                 } else {
     751                 :            :                         /* it worked - drop the extra reference and continue */
     752                 :          0 :                         consume_skb(skb);
     753                 :          0 :                         failed = 0;
     754                 :            :                 }
     755                 :            :         }
     756                 :            : 
     757                 :            : out:
     758                 :        343 :         return (rc >= 0 ? 0 : rc);
     759                 :            : }
     760                 :            : 
     761                 :            : /*
     762                 :            :  * kauditd_send_multicast_skb - Send a record to any multicast listeners
     763                 :            :  * @skb: audit record
     764                 :            :  *
     765                 :            :  * Description:
     766                 :            :  * Write a multicast message to anyone listening in the initial network
     767                 :            :  * namespace.  This function doesn't consume an skb as might be expected since
     768                 :            :  * it has to copy it anyways.
     769                 :            :  */
     770                 :        207 : static void kauditd_send_multicast_skb(struct sk_buff *skb)
     771                 :            : {
     772                 :            :         struct sk_buff *copy;
     773                 :            :         struct sock *sock = audit_get_sk(&init_net);
     774                 :            :         struct nlmsghdr *nlh;
     775                 :            : 
     776                 :            :         /* NOTE: we are not taking an additional reference for init_net since
     777                 :            :          *       we don't have to worry about it going away */
     778                 :            : 
     779         [ -  + ]:        207 :         if (!netlink_has_listeners(sock, AUDIT_NLGRP_READLOG))
     780                 :            :                 return;
     781                 :            : 
     782                 :            :         /*
     783                 :            :          * The seemingly wasteful skb_copy() rather than bumping the refcount
     784                 :            :          * using skb_get() is necessary because non-standard mods are made to
     785                 :            :          * the skb by the original kaudit unicast socket send routine.  The
     786                 :            :          * existing auditd daemon assumes this breakage.  Fixing this would
     787                 :            :          * require co-ordinating a change in the established protocol between
     788                 :            :          * the kaudit kernel subsystem and the auditd userspace code.  There is
     789                 :            :          * no reason for new multicast clients to continue with this
     790                 :            :          * non-compliance.
     791                 :            :          */
     792                 :          0 :         copy = skb_copy(skb, GFP_KERNEL);
     793         [ #  # ]:          0 :         if (!copy)
     794                 :            :                 return;
     795                 :            :         nlh = nlmsg_hdr(copy);
     796                 :          0 :         nlh->nlmsg_len = skb->len;
     797                 :            : 
     798                 :            :         nlmsg_multicast(sock, copy, 0, AUDIT_NLGRP_READLOG, GFP_KERNEL);
     799                 :            : }
     800                 :            : 
     801                 :            : /**
     802                 :            :  * kauditd_thread - Worker thread to send audit records to userspace
     803                 :            :  * @dummy: unused
     804                 :            :  */
     805                 :        207 : static int kauditd_thread(void *dummy)
     806                 :            : {
     807                 :            :         int rc;
     808                 :            :         u32 portid = 0;
     809                 :            :         struct net *net = NULL;
     810                 :            :         struct sock *sk = NULL;
     811                 :            :         struct auditd_connection *ac;
     812                 :            : 
     813                 :            : #define UNICAST_RETRIES 5
     814                 :            : 
     815                 :        207 :         set_freezable();
     816         [ +  - ]:        550 :         while (!kthread_should_stop()) {
     817                 :            :                 /* NOTE: see the lock comments in auditd_send_unicast_skb() */
     818                 :            :                 rcu_read_lock();
     819                 :        343 :                 ac = rcu_dereference(auditd_conn);
     820         [ +  - ]:        343 :                 if (!ac) {
     821                 :            :                         rcu_read_unlock();
     822                 :            :                         goto main_queue;
     823                 :            :                 }
     824                 :          0 :                 net = get_net(ac->net);
     825                 :            :                 sk = audit_get_sk(net);
     826                 :          0 :                 portid = ac->portid;
     827                 :            :                 rcu_read_unlock();
     828                 :            : 
     829                 :            :                 /* attempt to flush the hold queue */
     830                 :          0 :                 rc = kauditd_send_queue(sk, portid,
     831                 :            :                                         &audit_hold_queue, UNICAST_RETRIES,
     832                 :            :                                         NULL, kauditd_rehold_skb);
     833         [ #  # ]:          0 :                 if (ac && rc < 0) {
     834                 :            :                         sk = NULL;
     835                 :          0 :                         auditd_reset(ac);
     836                 :          0 :                         goto main_queue;
     837                 :            :                 }
     838                 :            : 
     839                 :            :                 /* attempt to flush the retry queue */
     840                 :          0 :                 rc = kauditd_send_queue(sk, portid,
     841                 :            :                                         &audit_retry_queue, UNICAST_RETRIES,
     842                 :            :                                         NULL, kauditd_hold_skb);
     843         [ #  # ]:          0 :                 if (ac && rc < 0) {
     844                 :            :                         sk = NULL;
     845                 :          0 :                         auditd_reset(ac);
     846                 :          0 :                         goto main_queue;
     847                 :            :                 }
     848                 :            : 
     849                 :            : main_queue:
     850                 :            :                 /* process the main queue - do the multicast send and attempt
     851                 :            :                  * unicast, dump failed record sends to the retry queue; if
     852                 :            :                  * sk == NULL due to previous failures we will just do the
     853                 :            :                  * multicast send and move the record to the hold queue */
     854         [ +  - ]:        343 :                 rc = kauditd_send_queue(sk, portid, &audit_queue, 1,
     855                 :            :                                         kauditd_send_multicast_skb,
     856                 :            :                                         (sk ?
     857                 :            :                                          kauditd_retry_skb : kauditd_hold_skb));
     858         [ -  + ]:        343 :                 if (ac && rc < 0)
     859                 :          0 :                         auditd_reset(ac);
     860                 :            :                 sk = NULL;
     861                 :            : 
     862                 :            :                 /* drop our netns reference, no auditd sends past this line */
     863         [ -  + ]:        343 :                 if (net) {
     864                 :          0 :                         put_net(net);
     865                 :            :                         net = NULL;
     866                 :            :                 }
     867                 :            : 
     868                 :            :                 /* we have processed all the queues so wake everyone */
     869                 :        343 :                 wake_up(&audit_backlog_wait);
     870                 :            : 
     871                 :            :                 /* NOTE: we want to wake up if there is anything on the queue,
     872                 :            :                  *       regardless of if an auditd is connected, as we need to
     873                 :            :                  *       do the multicast send and rotate records from the
     874                 :            :                  *       main queue to the retry/hold queues */
     875   [ +  -  +  +  :       1165 :                 wait_event_freezable(kauditd_wait,
                   +  - ]
     876                 :            :                                      (skb_queue_len(&audit_queue) ? 1 : 0));
     877                 :            :         }
     878                 :            : 
     879                 :          0 :         return 0;
     880                 :            : }
     881                 :            : 
     882                 :          0 : int audit_send_list_thread(void *_dest)
     883                 :            : {
     884                 :            :         struct audit_netlink_list *dest = _dest;
     885                 :            :         struct sk_buff *skb;
     886                 :          0 :         struct sock *sk = audit_get_sk(dest->net);
     887                 :            : 
     888                 :            :         /* wait for parent to finish and send an ACK */
     889                 :            :         audit_ctl_lock();
     890                 :            :         audit_ctl_unlock();
     891                 :            : 
     892         [ #  # ]:          0 :         while ((skb = __skb_dequeue(&dest->q)) != NULL)
     893                 :          0 :                 netlink_unicast(sk, skb, dest->portid, 0);
     894                 :            : 
     895                 :          0 :         put_net(dest->net);
     896                 :          0 :         kfree(dest);
     897                 :            : 
     898                 :          0 :         return 0;
     899                 :            : }
     900                 :            : 
     901                 :          0 : struct sk_buff *audit_make_reply(int seq, int type, int done,
     902                 :            :                                  int multi, const void *payload, int size)
     903                 :            : {
     904                 :            :         struct sk_buff  *skb;
     905                 :            :         struct nlmsghdr *nlh;
     906                 :            :         void            *data;
     907         [ #  # ]:          0 :         int             flags = multi ? NLM_F_MULTI : 0;
     908         [ #  # ]:          0 :         int             t     = done  ? NLMSG_DONE  : type;
     909                 :            : 
     910                 :            :         skb = nlmsg_new(size, GFP_KERNEL);
     911         [ #  # ]:          0 :         if (!skb)
     912                 :            :                 return NULL;
     913                 :            : 
     914                 :          0 :         nlh     = nlmsg_put(skb, 0, seq, t, size, flags);
     915         [ #  # ]:          0 :         if (!nlh)
     916                 :            :                 goto out_kfree_skb;
     917                 :            :         data = nlmsg_data(nlh);
     918                 :          0 :         memcpy(data, payload, size);
     919                 :          0 :         return skb;
     920                 :            : 
     921                 :            : out_kfree_skb:
     922                 :          0 :         kfree_skb(skb);
     923                 :          0 :         return NULL;
     924                 :            : }
     925                 :            : 
     926                 :          0 : static void audit_free_reply(struct audit_reply *reply)
     927                 :            : {
     928         [ #  # ]:          0 :         if (!reply)
     929                 :          0 :                 return;
     930                 :            : 
     931         [ #  # ]:          0 :         if (reply->skb)
     932                 :          0 :                 kfree_skb(reply->skb);
     933         [ #  # ]:          0 :         if (reply->net)
     934                 :          0 :                 put_net(reply->net);
     935                 :          0 :         kfree(reply);
     936                 :            : }
     937                 :            : 
     938                 :          0 : static int audit_send_reply_thread(void *arg)
     939                 :            : {
     940                 :            :         struct audit_reply *reply = (struct audit_reply *)arg;
     941                 :            : 
     942                 :            :         audit_ctl_lock();
     943                 :            :         audit_ctl_unlock();
     944                 :            : 
     945                 :            :         /* Ignore failure. It'll only happen if the sender goes away,
     946                 :            :            because our timeout is set to infinite. */
     947                 :          0 :         netlink_unicast(audit_get_sk(reply->net), reply->skb, reply->portid, 0);
     948                 :          0 :         reply->skb = NULL;
     949                 :          0 :         audit_free_reply(reply);
     950                 :          0 :         return 0;
     951                 :            : }
     952                 :            : 
     953                 :            : /**
     954                 :            :  * audit_send_reply - send an audit reply message via netlink
     955                 :            :  * @request_skb: skb of request we are replying to (used to target the reply)
     956                 :            :  * @seq: sequence number
     957                 :            :  * @type: audit message type
     958                 :            :  * @done: done (last) flag
     959                 :            :  * @multi: multi-part message flag
     960                 :            :  * @payload: payload data
     961                 :            :  * @size: payload size
     962                 :            :  *
     963                 :            :  * Allocates a skb, builds the netlink message, and sends it to the port id.
     964                 :            :  */
     965                 :          0 : static void audit_send_reply(struct sk_buff *request_skb, int seq, int type, int done,
     966                 :            :                              int multi, const void *payload, int size)
     967                 :            : {
     968                 :            :         struct task_struct *tsk;
     969                 :            :         struct audit_reply *reply;
     970                 :            : 
     971                 :          0 :         reply = kzalloc(sizeof(*reply), GFP_KERNEL);
     972         [ #  # ]:          0 :         if (!reply)
     973                 :            :                 return;
     974                 :            : 
     975                 :          0 :         reply->skb = audit_make_reply(seq, type, done, multi, payload, size);
     976         [ #  # ]:          0 :         if (!reply->skb)
     977                 :            :                 goto err;
     978                 :          0 :         reply->net = get_net(sock_net(NETLINK_CB(request_skb).sk));
     979                 :          0 :         reply->portid = NETLINK_CB(request_skb).portid;
     980                 :            : 
     981         [ #  # ]:          0 :         tsk = kthread_run(audit_send_reply_thread, reply, "audit_send_reply");
     982         [ #  # ]:          0 :         if (IS_ERR(tsk))
     983                 :            :                 goto err;
     984                 :            : 
     985                 :            :         return;
     986                 :            : 
     987                 :            : err:
     988                 :          0 :         audit_free_reply(reply);
     989                 :            : }
     990                 :            : 
     991                 :            : /*
     992                 :            :  * Check for appropriate CAP_AUDIT_ capabilities on incoming audit
     993                 :            :  * control messages.
     994                 :            :  */
     995                 :      14532 : static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type)
     996                 :            : {
     997                 :            :         int err = 0;
     998                 :            : 
     999                 :            :         /* Only support initial user namespace for now. */
    1000                 :            :         /*
    1001                 :            :          * We return ECONNREFUSED because it tricks userspace into thinking
    1002                 :            :          * that audit was not configured into the kernel.  Lots of users
    1003                 :            :          * configure their PAM stack (because that's what the distro does)
    1004                 :            :          * to reject login if unable to send messages to audit.  If we return
    1005                 :            :          * ECONNREFUSED the PAM stack thinks the kernel does not have audit
    1006                 :            :          * configured in and will let login proceed.  If we return EPERM
    1007                 :            :          * userspace will reject all logins.  This should be removed when we
    1008                 :            :          * support non init namespaces!!
    1009                 :            :          */
    1010         [ +  - ]:      14532 :         if (current_user_ns() != &init_user_ns)
    1011                 :            :                 return -ECONNREFUSED;
    1012                 :            : 
    1013   [ -  +  -  - ]:      14532 :         switch (msg_type) {
    1014                 :            :         case AUDIT_LIST:
    1015                 :            :         case AUDIT_ADD:
    1016                 :            :         case AUDIT_DEL:
    1017                 :            :                 return -EOPNOTSUPP;
    1018                 :            :         case AUDIT_GET:
    1019                 :            :         case AUDIT_SET:
    1020                 :            :         case AUDIT_GET_FEATURE:
    1021                 :            :         case AUDIT_SET_FEATURE:
    1022                 :            :         case AUDIT_LIST_RULES:
    1023                 :            :         case AUDIT_ADD_RULE:
    1024                 :            :         case AUDIT_DEL_RULE:
    1025                 :            :         case AUDIT_SIGNAL_INFO:
    1026                 :            :         case AUDIT_TTY_GET:
    1027                 :            :         case AUDIT_TTY_SET:
    1028                 :            :         case AUDIT_TRIM:
    1029                 :            :         case AUDIT_MAKE_EQUIV:
    1030                 :            :                 /* Only support auditd and auditctl in initial pid namespace
    1031                 :            :                  * for now. */
    1032         [ #  # ]:          0 :                 if (task_active_pid_ns(current) != &init_pid_ns)
    1033                 :            :                         return -EPERM;
    1034                 :            : 
    1035         [ #  # ]:          0 :                 if (!netlink_capable(skb, CAP_AUDIT_CONTROL))
    1036                 :            :                         err = -EPERM;
    1037                 :            :                 break;
    1038                 :            :         case AUDIT_USER:
    1039                 :            :         case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG:
    1040                 :            :         case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
    1041         [ -  + ]:      14532 :                 if (!netlink_capable(skb, CAP_AUDIT_WRITE))
    1042                 :            :                         err = -EPERM;
    1043                 :            :                 break;
    1044                 :            :         default:  /* bad msg */
    1045                 :            :                 err = -EINVAL;
    1046                 :            :         }
    1047                 :            : 
    1048                 :      14532 :         return err;
    1049                 :            : }
    1050                 :            : 
    1051                 :          0 : static void audit_log_common_recv_msg(struct audit_context *context,
    1052                 :            :                                         struct audit_buffer **ab, u16 msg_type)
    1053                 :            : {
    1054                 :          0 :         uid_t uid = from_kuid(&init_user_ns, current_uid());
    1055                 :          0 :         pid_t pid = task_tgid_nr(current);
    1056                 :            : 
    1057   [ #  #  #  # ]:          0 :         if (!audit_enabled && msg_type != AUDIT_USER_AVC) {
    1058                 :          0 :                 *ab = NULL;
    1059                 :          0 :                 return;
    1060                 :            :         }
    1061                 :            : 
    1062                 :          0 :         *ab = audit_log_start(context, GFP_KERNEL, msg_type);
    1063         [ #  # ]:          0 :         if (unlikely(!*ab))
    1064                 :            :                 return;
    1065                 :          0 :         audit_log_format(*ab, "pid=%d uid=%u ", pid, uid);
    1066                 :          0 :         audit_log_session_info(*ab);
    1067                 :          0 :         audit_log_task_context(*ab);
    1068                 :            : }
    1069                 :            : 
    1070                 :            : static inline void audit_log_user_recv_msg(struct audit_buffer **ab,
    1071                 :            :                                            u16 msg_type)
    1072                 :            : {
    1073                 :          0 :         audit_log_common_recv_msg(NULL, ab, msg_type);
    1074                 :            : }
    1075                 :            : 
    1076                 :          0 : int is_audit_feature_set(int i)
    1077                 :            : {
    1078                 :          0 :         return af.features & AUDIT_FEATURE_TO_MASK(i);
    1079                 :            : }
    1080                 :            : 
    1081                 :            : 
    1082                 :          0 : static int audit_get_feature(struct sk_buff *skb)
    1083                 :            : {
    1084                 :            :         u32 seq;
    1085                 :            : 
    1086                 :          0 :         seq = nlmsg_hdr(skb)->nlmsg_seq;
    1087                 :            : 
    1088                 :          0 :         audit_send_reply(skb, seq, AUDIT_GET_FEATURE, 0, 0, &af, sizeof(af));
    1089                 :            : 
    1090                 :          0 :         return 0;
    1091                 :            : }
    1092                 :            : 
    1093                 :          0 : static void audit_log_feature_change(int which, u32 old_feature, u32 new_feature,
    1094                 :            :                                      u32 old_lock, u32 new_lock, int res)
    1095                 :            : {
    1096                 :            :         struct audit_buffer *ab;
    1097                 :            : 
    1098         [ #  # ]:          0 :         if (audit_enabled == AUDIT_OFF)
    1099                 :            :                 return;
    1100                 :            : 
    1101                 :          0 :         ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_FEATURE_CHANGE);
    1102         [ #  # ]:          0 :         if (!ab)
    1103                 :            :                 return;
    1104                 :          0 :         audit_log_task_info(ab);
    1105                 :          0 :         audit_log_format(ab, " feature=%s old=%u new=%u old_lock=%u new_lock=%u res=%d",
    1106                 :            :                          audit_feature_names[which], !!old_feature, !!new_feature,
    1107                 :            :                          !!old_lock, !!new_lock, res);
    1108                 :          0 :         audit_log_end(ab);
    1109                 :            : }
    1110                 :            : 
    1111                 :          0 : static int audit_set_feature(struct audit_features *uaf)
    1112                 :            : {
    1113                 :            :         int i;
    1114                 :            : 
    1115                 :            :         BUILD_BUG_ON(AUDIT_LAST_FEATURE + 1 > ARRAY_SIZE(audit_feature_names));
    1116                 :            : 
    1117                 :            :         /* if there is ever a version 2 we should handle that here */
    1118                 :            : 
    1119         [ #  # ]:          0 :         for (i = 0; i <= AUDIT_LAST_FEATURE; i++) {
    1120                 :          0 :                 u32 feature = AUDIT_FEATURE_TO_MASK(i);
    1121                 :            :                 u32 old_feature, new_feature, old_lock, new_lock;
    1122                 :            : 
    1123                 :            :                 /* if we are not changing this feature, move along */
    1124         [ #  # ]:          0 :                 if (!(feature & uaf->mask))
    1125                 :          0 :                         continue;
    1126                 :            : 
    1127                 :          0 :                 old_feature = af.features & feature;
    1128                 :          0 :                 new_feature = uaf->features & feature;
    1129                 :          0 :                 new_lock = (uaf->lock | af.lock) & feature;
    1130                 :          0 :                 old_lock = af.lock & feature;
    1131                 :            : 
    1132                 :            :                 /* are we changing a locked feature? */
    1133         [ #  # ]:          0 :                 if (old_lock && (new_feature != old_feature)) {
    1134                 :          0 :                         audit_log_feature_change(i, old_feature, new_feature,
    1135                 :            :                                                  old_lock, new_lock, 0);
    1136                 :          0 :                         return -EPERM;
    1137                 :            :                 }
    1138                 :            :         }
    1139                 :            :         /* nothing invalid, do the changes */
    1140         [ #  # ]:          0 :         for (i = 0; i <= AUDIT_LAST_FEATURE; i++) {
    1141                 :          0 :                 u32 feature = AUDIT_FEATURE_TO_MASK(i);
    1142                 :            :                 u32 old_feature, new_feature, old_lock, new_lock;
    1143                 :            : 
    1144                 :            :                 /* if we are not changing this feature, move along */
    1145         [ #  # ]:          0 :                 if (!(feature & uaf->mask))
    1146                 :          0 :                         continue;
    1147                 :            : 
    1148                 :          0 :                 old_feature = af.features & feature;
    1149                 :          0 :                 new_feature = uaf->features & feature;
    1150                 :          0 :                 old_lock = af.lock & feature;
    1151                 :          0 :                 new_lock = (uaf->lock | af.lock) & feature;
    1152                 :            : 
    1153         [ #  # ]:          0 :                 if (new_feature != old_feature)
    1154                 :          0 :                         audit_log_feature_change(i, old_feature, new_feature,
    1155                 :            :                                                  old_lock, new_lock, 1);
    1156                 :            : 
    1157         [ #  # ]:          0 :                 if (new_feature)
    1158                 :          0 :                         af.features |= feature;
    1159                 :            :                 else
    1160                 :          0 :                         af.features &= ~feature;
    1161                 :          0 :                 af.lock |= new_lock;
    1162                 :            :         }
    1163                 :            : 
    1164                 :            :         return 0;
    1165                 :            : }
    1166                 :            : 
    1167                 :          0 : static int audit_replace(struct pid *pid)
    1168                 :            : {
    1169                 :            :         pid_t pvnr;
    1170                 :            :         struct sk_buff *skb;
    1171                 :            : 
    1172                 :          0 :         pvnr = pid_vnr(pid);
    1173                 :          0 :         skb = audit_make_reply(0, AUDIT_REPLACE, 0, 0, &pvnr, sizeof(pvnr));
    1174         [ #  # ]:          0 :         if (!skb)
    1175                 :            :                 return -ENOMEM;
    1176                 :          0 :         return auditd_send_unicast_skb(skb);
    1177                 :            : }
    1178                 :            : 
    1179                 :      14532 : static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
    1180                 :            : {
    1181                 :            :         u32                     seq;
    1182                 :            :         void                    *data;
    1183                 :            :         int                     data_len;
    1184                 :            :         int                     err;
    1185                 :            :         struct audit_buffer     *ab;
    1186                 :      14532 :         u16                     msg_type = nlh->nlmsg_type;
    1187                 :            :         struct audit_sig_info   *sig_data;
    1188                 :      14532 :         char                    *ctx = NULL;
    1189                 :            :         u32                     len;
    1190                 :            : 
    1191                 :      14532 :         err = audit_netlink_ok(skb, msg_type);
    1192         [ +  - ]:      14532 :         if (err)
    1193                 :            :                 return err;
    1194                 :            : 
    1195                 :      14532 :         seq  = nlh->nlmsg_seq;
    1196                 :            :         data = nlmsg_data(nlh);
    1197                 :            :         data_len = nlmsg_len(nlh);
    1198                 :            : 
    1199   [ -  -  -  -  :      14532 :         switch (msg_type) {
          +  -  -  -  -  
             -  -  -  - ]
    1200                 :            :         case AUDIT_GET: {
    1201                 :            :                 struct audit_status     s;
    1202                 :          0 :                 memset(&s, 0, sizeof(s));
    1203                 :          0 :                 s.enabled               = audit_enabled;
    1204                 :          0 :                 s.failure               = audit_failure;
    1205                 :            :                 /* NOTE: use pid_vnr() so the PID is relative to the current
    1206                 :            :                  *       namespace */
    1207                 :          0 :                 s.pid                   = auditd_pid_vnr();
    1208                 :          0 :                 s.rate_limit            = audit_rate_limit;
    1209                 :          0 :                 s.backlog_limit         = audit_backlog_limit;
    1210                 :          0 :                 s.lost                  = atomic_read(&audit_lost);
    1211                 :          0 :                 s.backlog               = skb_queue_len(&audit_queue);
    1212                 :          0 :                 s.feature_bitmap        = AUDIT_FEATURE_BITMAP_ALL;
    1213                 :          0 :                 s.backlog_wait_time     = audit_backlog_wait_time;
    1214                 :          0 :                 audit_send_reply(skb, seq, AUDIT_GET, 0, 0, &s, sizeof(s));
    1215                 :            :                 break;
    1216                 :            :         }
    1217                 :            :         case AUDIT_SET: {
    1218                 :            :                 struct audit_status     s;
    1219                 :          0 :                 memset(&s, 0, sizeof(s));
    1220                 :            :                 /* guard against past and future API changes */
    1221                 :          0 :                 memcpy(&s, data, min_t(size_t, sizeof(s), data_len));
    1222         [ #  # ]:          0 :                 if (s.mask & AUDIT_STATUS_ENABLED) {
    1223                 :          0 :                         err = audit_set_enabled(s.enabled);
    1224         [ #  # ]:          0 :                         if (err < 0)
    1225                 :          0 :                                 return err;
    1226                 :            :                 }
    1227         [ #  # ]:          0 :                 if (s.mask & AUDIT_STATUS_FAILURE) {
    1228                 :          0 :                         err = audit_set_failure(s.failure);
    1229         [ #  # ]:          0 :                         if (err < 0)
    1230                 :            :                                 return err;
    1231                 :            :                 }
    1232         [ #  # ]:          0 :                 if (s.mask & AUDIT_STATUS_PID) {
    1233                 :            :                         /* NOTE: we are using the vnr PID functions below
    1234                 :            :                          *       because the s.pid value is relative to the
    1235                 :            :                          *       namespace of the caller; at present this
    1236                 :            :                          *       doesn't matter much since you can really only
    1237                 :            :                          *       run auditd from the initial pid namespace, but
    1238                 :            :                          *       something to keep in mind if this changes */
    1239                 :          0 :                         pid_t new_pid = s.pid;
    1240                 :            :                         pid_t auditd_pid;
    1241                 :          0 :                         struct pid *req_pid = task_tgid(current);
    1242                 :            : 
    1243                 :            :                         /* Sanity check - PID values must match. Setting
    1244                 :            :                          * pid to 0 is how auditd ends auditing. */
    1245   [ #  #  #  # ]:          0 :                         if (new_pid && (new_pid != pid_vnr(req_pid)))
    1246                 :            :                                 return -EINVAL;
    1247                 :            : 
    1248                 :            :                         /* test the auditd connection */
    1249                 :          0 :                         audit_replace(req_pid);
    1250                 :            : 
    1251                 :          0 :                         auditd_pid = auditd_pid_vnr();
    1252         [ #  # ]:          0 :                         if (auditd_pid) {
    1253                 :            :                                 /* replacing a healthy auditd is not allowed */
    1254         [ #  # ]:          0 :                                 if (new_pid) {
    1255                 :          0 :                                         audit_log_config_change("audit_pid",
    1256                 :            :                                                         new_pid, auditd_pid, 0);
    1257                 :          0 :                                         return -EEXIST;
    1258                 :            :                                 }
    1259                 :            :                                 /* only current auditd can unregister itself */
    1260         [ #  # ]:          0 :                                 if (pid_vnr(req_pid) != auditd_pid) {
    1261                 :          0 :                                         audit_log_config_change("audit_pid",
    1262                 :            :                                                         new_pid, auditd_pid, 0);
    1263                 :          0 :                                         return -EACCES;
    1264                 :            :                                 }
    1265                 :            :                         }
    1266                 :            : 
    1267         [ #  # ]:          0 :                         if (new_pid) {
    1268                 :            :                                 /* register a new auditd connection */
    1269                 :          0 :                                 err = auditd_set(req_pid,
    1270                 :            :                                                  NETLINK_CB(skb).portid,
    1271                 :          0 :                                                  sock_net(NETLINK_CB(skb).sk));
    1272         [ #  # ]:          0 :                                 if (audit_enabled != AUDIT_OFF)
    1273                 :          0 :                                         audit_log_config_change("audit_pid",
    1274                 :            :                                                                 new_pid,
    1275                 :            :                                                                 auditd_pid,
    1276                 :            :                                                                 err ? 0 : 1);
    1277         [ #  # ]:          0 :                                 if (err)
    1278                 :            :                                         return err;
    1279                 :            : 
    1280                 :            :                                 /* try to process any backlog */
    1281                 :          0 :                                 wake_up_interruptible(&kauditd_wait);
    1282                 :            :                         } else {
    1283         [ #  # ]:          0 :                                 if (audit_enabled != AUDIT_OFF)
    1284                 :          0 :                                         audit_log_config_change("audit_pid",
    1285                 :            :                                                                 new_pid,
    1286                 :            :                                                                 auditd_pid, 1);
    1287                 :            : 
    1288                 :            :                                 /* unregister the auditd connection */
    1289                 :          0 :                                 auditd_reset(NULL);
    1290                 :            :                         }
    1291                 :            :                 }
    1292         [ #  # ]:          0 :                 if (s.mask & AUDIT_STATUS_RATE_LIMIT) {
    1293                 :          0 :                         err = audit_set_rate_limit(s.rate_limit);
    1294         [ #  # ]:          0 :                         if (err < 0)
    1295                 :            :                                 return err;
    1296                 :            :                 }
    1297         [ #  # ]:          0 :                 if (s.mask & AUDIT_STATUS_BACKLOG_LIMIT) {
    1298                 :          0 :                         err = audit_set_backlog_limit(s.backlog_limit);
    1299         [ #  # ]:          0 :                         if (err < 0)
    1300                 :            :                                 return err;
    1301                 :            :                 }
    1302         [ #  # ]:          0 :                 if (s.mask & AUDIT_STATUS_BACKLOG_WAIT_TIME) {
    1303         [ #  # ]:          0 :                         if (sizeof(s) > (size_t)nlh->nlmsg_len)
    1304                 :            :                                 return -EINVAL;
    1305         [ #  # ]:          0 :                         if (s.backlog_wait_time > 10*AUDIT_BACKLOG_WAIT_TIME)
    1306                 :            :                                 return -EINVAL;
    1307                 :            :                         err = audit_set_backlog_wait_time(s.backlog_wait_time);
    1308         [ #  # ]:          0 :                         if (err < 0)
    1309                 :            :                                 return err;
    1310                 :            :                 }
    1311         [ #  # ]:          0 :                 if (s.mask == AUDIT_STATUS_LOST) {
    1312                 :          0 :                         u32 lost = atomic_xchg(&audit_lost, 0);
    1313                 :            : 
    1314                 :          0 :                         audit_log_config_change("lost", 0, lost, 1);
    1315                 :          0 :                         return lost;
    1316                 :            :                 }
    1317                 :          0 :                 break;
    1318                 :            :         }
    1319                 :            :         case AUDIT_GET_FEATURE:
    1320                 :          0 :                 err = audit_get_feature(skb);
    1321         [ #  # ]:          0 :                 if (err)
    1322                 :            :                         return err;
    1323                 :            :                 break;
    1324                 :            :         case AUDIT_SET_FEATURE:
    1325         [ #  # ]:          0 :                 if (data_len < sizeof(struct audit_features))
    1326                 :            :                         return -EINVAL;
    1327                 :          0 :                 err = audit_set_feature(data);
    1328         [ #  # ]:          0 :                 if (err)
    1329                 :            :                         return err;
    1330                 :            :                 break;
    1331                 :            :         case AUDIT_USER:
    1332                 :            :         case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG:
    1333                 :            :         case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
    1334   [ +  -  -  + ]:      14532 :                 if (!audit_enabled && msg_type != AUDIT_USER_AVC)
    1335                 :            :                         return 0;
    1336                 :            :                 /* exit early if there isn't at least one character to print */
    1337         [ #  # ]:          0 :                 if (data_len < 2)
    1338                 :            :                         return -EINVAL;
    1339                 :            : 
    1340                 :          0 :                 err = audit_filter(msg_type, AUDIT_FILTER_USER);
    1341         [ #  # ]:          0 :                 if (err == 1) { /* match or error */
    1342                 :            :                         char *str = data;
    1343                 :            : 
    1344                 :            :                         err = 0;
    1345         [ #  # ]:          0 :                         if (msg_type == AUDIT_USER_TTY) {
    1346                 :          0 :                                 err = tty_audit_push();
    1347         [ #  # ]:          0 :                                 if (err)
    1348                 :            :                                         break;
    1349                 :            :                         }
    1350                 :            :                         audit_log_user_recv_msg(&ab, msg_type);
    1351         [ #  # ]:          0 :                         if (msg_type != AUDIT_USER_TTY) {
    1352                 :            :                                 /* ensure NULL termination */
    1353                 :          0 :                                 str[data_len - 1] = '\0';
    1354                 :          0 :                                 audit_log_format(ab, " msg='%.*s'",
    1355                 :            :                                                  AUDIT_MESSAGE_TEXT_MAX,
    1356                 :            :                                                  str);
    1357                 :            :                         } else {
    1358                 :          0 :                                 audit_log_format(ab, " data=");
    1359   [ #  #  #  # ]:          0 :                                 if (data_len > 0 && str[data_len - 1] == '\0')
    1360                 :          0 :                                         data_len--;
    1361                 :          0 :                                 audit_log_n_untrustedstring(ab, str, data_len);
    1362                 :            :                         }
    1363                 :          0 :                         audit_log_end(ab);
    1364                 :            :                 }
    1365                 :            :                 break;
    1366                 :            :         case AUDIT_ADD_RULE:
    1367                 :            :         case AUDIT_DEL_RULE:
    1368         [ #  # ]:          0 :                 if (data_len < sizeof(struct audit_rule_data))
    1369                 :            :                         return -EINVAL;
    1370         [ #  # ]:          0 :                 if (audit_enabled == AUDIT_LOCKED) {
    1371                 :          0 :                         audit_log_common_recv_msg(audit_context(), &ab,
    1372                 :            :                                                   AUDIT_CONFIG_CHANGE);
    1373         [ #  # ]:          0 :                         audit_log_format(ab, " op=%s audit_enabled=%d res=0",
    1374                 :            :                                          msg_type == AUDIT_ADD_RULE ?
    1375                 :            :                                                 "add_rule" : "remove_rule",
    1376                 :            :                                          audit_enabled);
    1377                 :          0 :                         audit_log_end(ab);
    1378                 :          0 :                         return -EPERM;
    1379                 :            :                 }
    1380                 :          0 :                 err = audit_rule_change(msg_type, seq, data, data_len);
    1381                 :          0 :                 break;
    1382                 :            :         case AUDIT_LIST_RULES:
    1383                 :          0 :                 err = audit_list_rules_send(skb, seq);
    1384                 :          0 :                 break;
    1385                 :            :         case AUDIT_TRIM:
    1386                 :          0 :                 audit_trim_trees();
    1387                 :          0 :                 audit_log_common_recv_msg(audit_context(), &ab,
    1388                 :            :                                           AUDIT_CONFIG_CHANGE);
    1389                 :          0 :                 audit_log_format(ab, " op=trim res=1");
    1390                 :          0 :                 audit_log_end(ab);
    1391                 :          0 :                 break;
    1392                 :            :         case AUDIT_MAKE_EQUIV: {
    1393                 :          0 :                 void *bufp = data;
    1394                 :            :                 u32 sizes[2];
    1395                 :          0 :                 size_t msglen = data_len;
    1396                 :            :                 char *old, *new;
    1397                 :            : 
    1398                 :            :                 err = -EINVAL;
    1399         [ #  # ]:          0 :                 if (msglen < 2 * sizeof(u32))
    1400                 :            :                         break;
    1401                 :          0 :                 memcpy(sizes, bufp, 2 * sizeof(u32));
    1402                 :          0 :                 bufp += 2 * sizeof(u32);
    1403                 :          0 :                 msglen -= 2 * sizeof(u32);
    1404                 :          0 :                 old = audit_unpack_string(&bufp, &msglen, sizes[0]);
    1405         [ #  # ]:          0 :                 if (IS_ERR(old)) {
    1406                 :            :                         err = PTR_ERR(old);
    1407                 :          0 :                         break;
    1408                 :            :                 }
    1409                 :          0 :                 new = audit_unpack_string(&bufp, &msglen, sizes[1]);
    1410         [ #  # ]:          0 :                 if (IS_ERR(new)) {
    1411                 :            :                         err = PTR_ERR(new);
    1412                 :          0 :                         kfree(old);
    1413                 :          0 :                         break;
    1414                 :            :                 }
    1415                 :            :                 /* OK, here comes... */
    1416                 :          0 :                 err = audit_tag_tree(old, new);
    1417                 :            : 
    1418                 :          0 :                 audit_log_common_recv_msg(audit_context(), &ab,
    1419                 :            :                                           AUDIT_CONFIG_CHANGE);
    1420                 :          0 :                 audit_log_format(ab, " op=make_equiv old=");
    1421                 :          0 :                 audit_log_untrustedstring(ab, old);
    1422                 :          0 :                 audit_log_format(ab, " new=");
    1423                 :          0 :                 audit_log_untrustedstring(ab, new);
    1424                 :          0 :                 audit_log_format(ab, " res=%d", !err);
    1425                 :          0 :                 audit_log_end(ab);
    1426                 :          0 :                 kfree(old);
    1427                 :          0 :                 kfree(new);
    1428                 :          0 :                 break;
    1429                 :            :         }
    1430                 :            :         case AUDIT_SIGNAL_INFO:
    1431                 :          0 :                 len = 0;
    1432         [ #  # ]:          0 :                 if (audit_sig_sid) {
    1433                 :          0 :                         err = security_secid_to_secctx(audit_sig_sid, &ctx, &len);
    1434         [ #  # ]:          0 :                         if (err)
    1435                 :            :                                 return err;
    1436                 :            :                 }
    1437                 :          0 :                 sig_data = kmalloc(sizeof(*sig_data) + len, GFP_KERNEL);
    1438         [ #  # ]:          0 :                 if (!sig_data) {
    1439         [ #  # ]:          0 :                         if (audit_sig_sid)
    1440                 :          0 :                                 security_release_secctx(ctx, len);
    1441                 :            :                         return -ENOMEM;
    1442                 :            :                 }
    1443                 :          0 :                 sig_data->uid = from_kuid(&init_user_ns, audit_sig_uid);
    1444                 :          0 :                 sig_data->pid = audit_sig_pid;
    1445         [ #  # ]:          0 :                 if (audit_sig_sid) {
    1446                 :          0 :                         memcpy(sig_data->ctx, ctx, len);
    1447                 :          0 :                         security_release_secctx(ctx, len);
    1448                 :            :                 }
    1449                 :          0 :                 audit_send_reply(skb, seq, AUDIT_SIGNAL_INFO, 0, 0,
    1450                 :          0 :                                  sig_data, sizeof(*sig_data) + len);
    1451                 :          0 :                 kfree(sig_data);
    1452                 :          0 :                 break;
    1453                 :            :         case AUDIT_TTY_GET: {
    1454                 :            :                 struct audit_tty_status s;
    1455                 :            :                 unsigned int t;
    1456                 :            : 
    1457                 :          0 :                 t = READ_ONCE(current->signal->audit_tty);
    1458                 :          0 :                 s.enabled = t & AUDIT_TTY_ENABLE;
    1459                 :          0 :                 s.log_passwd = !!(t & AUDIT_TTY_LOG_PASSWD);
    1460                 :            : 
    1461                 :          0 :                 audit_send_reply(skb, seq, AUDIT_TTY_GET, 0, 0, &s, sizeof(s));
    1462                 :            :                 break;
    1463                 :            :         }
    1464                 :            :         case AUDIT_TTY_SET: {
    1465                 :            :                 struct audit_tty_status s, old;
    1466                 :            :                 struct audit_buffer     *ab;
    1467                 :            :                 unsigned int t;
    1468                 :            : 
    1469                 :          0 :                 memset(&s, 0, sizeof(s));
    1470                 :            :                 /* guard against past and future API changes */
    1471                 :          0 :                 memcpy(&s, data, min_t(size_t, sizeof(s), data_len));
    1472                 :            :                 /* check if new data is valid */
    1473   [ #  #  #  # ]:          0 :                 if ((s.enabled != 0 && s.enabled != 1) ||
    1474                 :          0 :                     (s.log_passwd != 0 && s.log_passwd != 1))
    1475                 :            :                         err = -EINVAL;
    1476                 :            : 
    1477         [ #  # ]:          0 :                 if (err)
    1478                 :          0 :                         t = READ_ONCE(current->signal->audit_tty);
    1479                 :            :                 else {
    1480                 :          0 :                         t = s.enabled | (-s.log_passwd & AUDIT_TTY_LOG_PASSWD);
    1481                 :          0 :                         t = xchg(&current->signal->audit_tty, t);
    1482                 :            :                 }
    1483                 :          0 :                 old.enabled = t & AUDIT_TTY_ENABLE;
    1484                 :          0 :                 old.log_passwd = !!(t & AUDIT_TTY_LOG_PASSWD);
    1485                 :            : 
    1486                 :          0 :                 audit_log_common_recv_msg(audit_context(), &ab,
    1487                 :            :                                           AUDIT_CONFIG_CHANGE);
    1488                 :          0 :                 audit_log_format(ab, " op=tty_set old-enabled=%d new-enabled=%d"
    1489                 :            :                                  " old-log_passwd=%d new-log_passwd=%d res=%d",
    1490                 :            :                                  old.enabled, s.enabled, old.log_passwd,
    1491                 :            :                                  s.log_passwd, !err);
    1492                 :          0 :                 audit_log_end(ab);
    1493                 :            :                 break;
    1494                 :            :         }
    1495                 :            :         default:
    1496                 :            :                 err = -EINVAL;
    1497                 :            :                 break;
    1498                 :            :         }
    1499                 :            : 
    1500                 :          0 :         return err < 0 ? err : 0;
    1501                 :            : }
    1502                 :            : 
    1503                 :            : /**
    1504                 :            :  * audit_receive - receive messages from a netlink control socket
    1505                 :            :  * @skb: the message buffer
    1506                 :            :  *
    1507                 :            :  * Parse the provided skb and deal with any messages that may be present,
    1508                 :            :  * malformed skbs are discarded.
    1509                 :            :  */
    1510                 :      14532 : static void audit_receive(struct sk_buff  *skb)
    1511                 :            : {
    1512                 :            :         struct nlmsghdr *nlh;
    1513                 :            :         /*
    1514                 :            :          * len MUST be signed for nlmsg_next to be able to dec it below 0
    1515                 :            :          * if the nlmsg_len was not aligned
    1516                 :            :          */
    1517                 :            :         int len;
    1518                 :            :         int err;
    1519                 :            : 
    1520                 :            :         nlh = nlmsg_hdr(skb);
    1521                 :      14532 :         len = skb->len;
    1522                 :            : 
    1523                 :            :         audit_ctl_lock();
    1524         [ +  + ]:      29064 :         while (nlmsg_ok(nlh, len)) {
    1525                 :      14532 :                 err = audit_receive_msg(skb, nlh);
    1526                 :            :                 /* if err or if this message says it wants a response */
    1527   [ +  -  +  - ]:      14532 :                 if (err || (nlh->nlmsg_flags & NLM_F_ACK))
    1528                 :      14532 :                         netlink_ack(skb, nlh, err, NULL);
    1529                 :            : 
    1530                 :            :                 nlh = nlmsg_next(nlh, &len);
    1531                 :            :         }
    1532                 :            :         audit_ctl_unlock();
    1533                 :      14532 : }
    1534                 :            : 
    1535                 :            : /* Run custom bind function on netlink socket group connect or bind requests. */
    1536                 :        207 : static int audit_bind(struct net *net, int group)
    1537                 :            : {
    1538         [ +  - ]:        207 :         if (!capable(CAP_AUDIT_READ))
    1539                 :            :                 return -EPERM;
    1540                 :            : 
    1541                 :        207 :         return 0;
    1542                 :            : }
    1543                 :            : 
    1544                 :        207 : static int __net_init audit_net_init(struct net *net)
    1545                 :            : {
    1546                 :        207 :         struct netlink_kernel_cfg cfg = {
    1547                 :            :                 .input  = audit_receive,
    1548                 :            :                 .bind   = audit_bind,
    1549                 :            :                 .flags  = NL_CFG_F_NONROOT_RECV,
    1550                 :            :                 .groups = AUDIT_NLGRP_MAX,
    1551                 :            :         };
    1552                 :            : 
    1553                 :        207 :         struct audit_net *aunet = net_generic(net, audit_net_id);
    1554                 :            : 
    1555                 :        207 :         aunet->sk = netlink_kernel_create(net, NETLINK_AUDIT, &cfg);
    1556         [ -  + ]:        207 :         if (aunet->sk == NULL) {
    1557                 :          0 :                 audit_panic("cannot initialize netlink socket in namespace");
    1558                 :          0 :                 return -ENOMEM;
    1559                 :            :         }
    1560                 :        207 :         aunet->sk->sk_sndtimeo = MAX_SCHEDULE_TIMEOUT;
    1561                 :            : 
    1562                 :        207 :         return 0;
    1563                 :            : }
    1564                 :            : 
    1565                 :          0 : static void __net_exit audit_net_exit(struct net *net)
    1566                 :            : {
    1567                 :          0 :         struct audit_net *aunet = net_generic(net, audit_net_id);
    1568                 :            : 
    1569                 :            :         /* NOTE: you would think that we would want to check the auditd
    1570                 :            :          * connection and potentially reset it here if it lives in this
    1571                 :            :          * namespace, but since the auditd connection tracking struct holds a
    1572                 :            :          * reference to this namespace (see auditd_set()) we are only ever
    1573                 :            :          * going to get here after that connection has been released */
    1574                 :            : 
    1575                 :          0 :         netlink_kernel_release(aunet->sk);
    1576                 :          0 : }
    1577                 :            : 
    1578                 :            : static struct pernet_operations audit_net_ops __net_initdata = {
    1579                 :            :         .init = audit_net_init,
    1580                 :            :         .exit = audit_net_exit,
    1581                 :            :         .id = &audit_net_id,
    1582                 :            :         .size = sizeof(struct audit_net),
    1583                 :            : };
    1584                 :            : 
    1585                 :            : /* Initialize audit support at boot time. */
    1586                 :        207 : static int __init audit_init(void)
    1587                 :            : {
    1588                 :            :         int i;
    1589                 :            : 
    1590         [ +  - ]:        207 :         if (audit_initialized == AUDIT_DISABLED)
    1591                 :            :                 return 0;
    1592                 :            : 
    1593                 :        207 :         audit_buffer_cache = kmem_cache_create("audit_buffer",
    1594                 :            :                                                sizeof(struct audit_buffer),
    1595                 :            :                                                0, SLAB_PANIC, NULL);
    1596                 :            : 
    1597                 :            :         skb_queue_head_init(&audit_queue);
    1598                 :            :         skb_queue_head_init(&audit_retry_queue);
    1599                 :            :         skb_queue_head_init(&audit_hold_queue);
    1600                 :            : 
    1601         [ +  + ]:       6831 :         for (i = 0; i < AUDIT_INODE_BUCKETS; i++)
    1602                 :       6624 :                 INIT_LIST_HEAD(&audit_inode_hash[i]);
    1603                 :            : 
    1604                 :        207 :         mutex_init(&audit_cmd_mutex.lock);
    1605                 :        207 :         audit_cmd_mutex.owner = NULL;
    1606                 :            : 
    1607         [ +  - ]:        207 :         pr_info("initializing netlink subsys (%s)\n",
    1608                 :            :                 audit_default ? "enabled" : "disabled");
    1609                 :        207 :         register_pernet_subsys(&audit_net_ops);
    1610                 :            : 
    1611                 :        207 :         audit_initialized = AUDIT_INITIALIZED;
    1612                 :            : 
    1613         [ +  - ]:        414 :         kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd");
    1614         [ -  + ]:        207 :         if (IS_ERR(kauditd_task)) {
    1615                 :            :                 int err = PTR_ERR(kauditd_task);
    1616                 :          0 :                 panic("audit: failed to start the kauditd thread (%d)\n", err);
    1617                 :            :         }
    1618                 :            : 
    1619                 :        207 :         audit_log(NULL, GFP_KERNEL, AUDIT_KERNEL,
    1620                 :            :                 "state=initialized audit_enabled=%u res=1",
    1621                 :            :                  audit_enabled);
    1622                 :            : 
    1623                 :        207 :         return 0;
    1624                 :            : }
    1625                 :            : postcore_initcall(audit_init);
    1626                 :            : 
    1627                 :            : /*
    1628                 :            :  * Process kernel command-line parameter at boot time.
    1629                 :            :  * audit={0|off} or audit={1|on}.
    1630                 :            :  */
    1631                 :          0 : static int __init audit_enable(char *str)
    1632                 :            : {
    1633   [ #  #  #  # ]:          0 :         if (!strcasecmp(str, "off") || !strcmp(str, "0"))
    1634                 :          0 :                 audit_default = AUDIT_OFF;
    1635   [ #  #  #  # ]:          0 :         else if (!strcasecmp(str, "on") || !strcmp(str, "1"))
    1636                 :          0 :                 audit_default = AUDIT_ON;
    1637                 :            :         else {
    1638                 :          0 :                 pr_err("audit: invalid 'audit' parameter value (%s)\n", str);
    1639                 :          0 :                 audit_default = AUDIT_ON;
    1640                 :            :         }
    1641                 :            : 
    1642         [ #  # ]:          0 :         if (audit_default == AUDIT_OFF)
    1643                 :          0 :                 audit_initialized = AUDIT_DISABLED;
    1644         [ #  # ]:          0 :         if (audit_set_enabled(audit_default))
    1645                 :          0 :                 pr_err("audit: error setting audit state (%d)\n",
    1646                 :            :                        audit_default);
    1647                 :            : 
    1648         [ #  # ]:          0 :         pr_info("%s\n", audit_default ?
    1649                 :            :                 "enabled (after initialization)" : "disabled (until reboot)");
    1650                 :            : 
    1651                 :          0 :         return 1;
    1652                 :            : }
    1653                 :            : __setup("audit=", audit_enable);
    1654                 :            : 
    1655                 :            : /* Process kernel command-line parameter at boot time.
    1656                 :            :  * audit_backlog_limit=<n> */
    1657                 :          0 : static int __init audit_backlog_limit_set(char *str)
    1658                 :            : {
    1659                 :            :         u32 audit_backlog_limit_arg;
    1660                 :            : 
    1661                 :          0 :         pr_info("audit_backlog_limit: ");
    1662         [ #  # ]:          0 :         if (kstrtouint(str, 0, &audit_backlog_limit_arg)) {
    1663                 :          0 :                 pr_cont("using default of %u, unable to parse %s\n",
    1664                 :            :                         audit_backlog_limit, str);
    1665                 :          0 :                 return 1;
    1666                 :            :         }
    1667                 :            : 
    1668                 :          0 :         audit_backlog_limit = audit_backlog_limit_arg;
    1669                 :          0 :         pr_cont("%d\n", audit_backlog_limit);
    1670                 :            : 
    1671                 :          0 :         return 1;
    1672                 :            : }
    1673                 :            : __setup("audit_backlog_limit=", audit_backlog_limit_set);
    1674                 :            : 
    1675                 :        207 : static void audit_buffer_free(struct audit_buffer *ab)
    1676                 :            : {
    1677         [ +  - ]:        207 :         if (!ab)
    1678                 :        207 :                 return;
    1679                 :            : 
    1680                 :        207 :         kfree_skb(ab->skb);
    1681                 :        207 :         kmem_cache_free(audit_buffer_cache, ab);
    1682                 :            : }
    1683                 :            : 
    1684                 :        207 : static struct audit_buffer *audit_buffer_alloc(struct audit_context *ctx,
    1685                 :            :                                                gfp_t gfp_mask, int type)
    1686                 :            : {
    1687                 :            :         struct audit_buffer *ab;
    1688                 :            : 
    1689                 :        207 :         ab = kmem_cache_alloc(audit_buffer_cache, gfp_mask);
    1690         [ +  - ]:        207 :         if (!ab)
    1691                 :            :                 return NULL;
    1692                 :            : 
    1693                 :        207 :         ab->skb = nlmsg_new(AUDIT_BUFSIZ, gfp_mask);
    1694         [ +  - ]:        207 :         if (!ab->skb)
    1695                 :            :                 goto err;
    1696         [ +  - ]:        207 :         if (!nlmsg_put(ab->skb, 0, 0, type, 0, 0))
    1697                 :            :                 goto err;
    1698                 :            : 
    1699                 :        207 :         ab->ctx = ctx;
    1700                 :        207 :         ab->gfp_mask = gfp_mask;
    1701                 :            : 
    1702                 :        207 :         return ab;
    1703                 :            : 
    1704                 :            : err:
    1705                 :          0 :         audit_buffer_free(ab);
    1706                 :          0 :         return NULL;
    1707                 :            : }
    1708                 :            : 
    1709                 :            : /**
    1710                 :            :  * audit_serial - compute a serial number for the audit record
    1711                 :            :  *
    1712                 :            :  * Compute a serial number for the audit record.  Audit records are
    1713                 :            :  * written to user-space as soon as they are generated, so a complete
    1714                 :            :  * audit record may be written in several pieces.  The timestamp of the
    1715                 :            :  * record and this serial number are used by the user-space tools to
    1716                 :            :  * determine which pieces belong to the same audit record.  The
    1717                 :            :  * (timestamp,serial) tuple is unique for each syscall and is live from
    1718                 :            :  * syscall entry to syscall exit.
    1719                 :            :  *
    1720                 :            :  * NOTE: Another possibility is to store the formatted records off the
    1721                 :            :  * audit context (for those records that have a context), and emit them
    1722                 :            :  * all at syscall exit.  However, this could delay the reporting of
    1723                 :            :  * significant errors until syscall exit (or never, if the system
    1724                 :            :  * halts).
    1725                 :            :  */
    1726                 :        207 : unsigned int audit_serial(void)
    1727                 :            : {
    1728                 :            :         static atomic_t serial = ATOMIC_INIT(0);
    1729                 :            : 
    1730                 :        207 :         return atomic_add_return(1, &serial);
    1731                 :            : }
    1732                 :            : 
    1733                 :        207 : static inline void audit_get_stamp(struct audit_context *ctx,
    1734                 :            :                                    struct timespec64 *t, unsigned int *serial)
    1735                 :            : {
    1736   [ -  +  #  # ]:        207 :         if (!ctx || !auditsc_get_stamp(ctx, t, serial)) {
    1737                 :        207 :                 ktime_get_coarse_real_ts64(t);
    1738                 :        207 :                 *serial = audit_serial();
    1739                 :            :         }
    1740                 :        207 : }
    1741                 :            : 
    1742                 :            : /**
    1743                 :            :  * audit_log_start - obtain an audit buffer
    1744                 :            :  * @ctx: audit_context (may be NULL)
    1745                 :            :  * @gfp_mask: type of allocation
    1746                 :            :  * @type: audit message type
    1747                 :            :  *
    1748                 :            :  * Returns audit_buffer pointer on success or NULL on error.
    1749                 :            :  *
    1750                 :            :  * Obtain an audit buffer.  This routine does locking to obtain the
    1751                 :            :  * audit buffer, but then no locking is required for calls to
    1752                 :            :  * audit_log_*format.  If the task (ctx) is a task that is currently in a
    1753                 :            :  * syscall, then the syscall is marked as auditable and an audit record
    1754                 :            :  * will be written at syscall exit.  If there is no associated task, then
    1755                 :            :  * task context (ctx) should be NULL.
    1756                 :            :  */
    1757                 :        207 : struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,
    1758                 :            :                                      int type)
    1759                 :            : {
    1760                 :            :         struct audit_buffer *ab;
    1761                 :            :         struct timespec64 t;
    1762                 :            :         unsigned int uninitialized_var(serial);
    1763                 :            : 
    1764         [ +  - ]:        207 :         if (audit_initialized != AUDIT_INITIALIZED)
    1765                 :            :                 return NULL;
    1766                 :            : 
    1767         [ +  - ]:        207 :         if (unlikely(!audit_filter(type, AUDIT_FILTER_EXCLUDE)))
    1768                 :            :                 return NULL;
    1769                 :            : 
    1770                 :            :         /* NOTE: don't ever fail/sleep on these two conditions:
    1771                 :            :          * 1. auditd generated record - since we need auditd to drain the
    1772                 :            :          *    queue; also, when we are checking for auditd, compare PIDs using
    1773                 :            :          *    task_tgid_vnr() since auditd_pid is set in audit_receive_msg()
    1774                 :            :          *    using a PID anchored in the caller's namespace
    1775                 :            :          * 2. generator holding the audit_cmd_mutex - we don't want to block
    1776                 :            :          *    while holding the mutex */
    1777   [ +  -  +  - ]:        414 :         if (!(auditd_test_task(current) || audit_ctl_owner_current())) {
    1778                 :        207 :                 long stime = audit_backlog_wait_time;
    1779                 :            : 
    1780   [ +  -  -  + ]:        621 :                 while (audit_backlog_limit &&
    1781                 :            :                        (skb_queue_len(&audit_queue) > audit_backlog_limit)) {
    1782                 :            :                         /* wake kauditd to try and flush the queue */
    1783                 :          0 :                         wake_up_interruptible(&kauditd_wait);
    1784                 :            : 
    1785                 :            :                         /* sleep if we are allowed and we haven't exhausted our
    1786                 :            :                          * backlog wait limit */
    1787   [ #  #  #  # ]:          0 :                         if (gfpflags_allow_blocking(gfp_mask) && (stime > 0)) {
    1788                 :          0 :                                 DECLARE_WAITQUEUE(wait, current);
    1789                 :            : 
    1790                 :          0 :                                 add_wait_queue_exclusive(&audit_backlog_wait,
    1791                 :            :                                                          &wait);
    1792                 :          0 :                                 set_current_state(TASK_UNINTERRUPTIBLE);
    1793                 :          0 :                                 stime = schedule_timeout(stime);
    1794                 :          0 :                                 remove_wait_queue(&audit_backlog_wait, &wait);
    1795                 :            :                         } else {
    1796   [ #  #  #  # ]:          0 :                                 if (audit_rate_check() && printk_ratelimit())
    1797                 :          0 :                                         pr_warn("audit_backlog=%d > audit_backlog_limit=%d\n",
    1798                 :            :                                                 skb_queue_len(&audit_queue),
    1799                 :            :                                                 audit_backlog_limit);
    1800                 :          0 :                                 audit_log_lost("backlog limit exceeded");
    1801                 :          0 :                                 return NULL;
    1802                 :            :                         }
    1803                 :            :                 }
    1804                 :            :         }
    1805                 :            : 
    1806                 :        207 :         ab = audit_buffer_alloc(ctx, gfp_mask, type);
    1807         [ -  + ]:        207 :         if (!ab) {
    1808                 :          0 :                 audit_log_lost("out of memory in audit_log_start");
    1809                 :          0 :                 return NULL;
    1810                 :            :         }
    1811                 :            : 
    1812                 :        207 :         audit_get_stamp(ab->ctx, &t, &serial);
    1813                 :        414 :         audit_log_format(ab, "audit(%llu.%03lu:%u): ",
    1814                 :        414 :                          (unsigned long long)t.tv_sec, t.tv_nsec/1000000, serial);
    1815                 :            : 
    1816                 :        207 :         return ab;
    1817                 :            : }
    1818                 :            : 
    1819                 :            : /**
    1820                 :            :  * audit_expand - expand skb in the audit buffer
    1821                 :            :  * @ab: audit_buffer
    1822                 :            :  * @extra: space to add at tail of the skb
    1823                 :            :  *
    1824                 :            :  * Returns 0 (no space) on failed expansion, or available space if
    1825                 :            :  * successful.
    1826                 :            :  */
    1827                 :          0 : static inline int audit_expand(struct audit_buffer *ab, int extra)
    1828                 :            : {
    1829                 :          0 :         struct sk_buff *skb = ab->skb;
    1830                 :            :         int oldtail = skb_tailroom(skb);
    1831                 :          0 :         int ret = pskb_expand_head(skb, 0, extra, ab->gfp_mask);
    1832                 :            :         int newtail = skb_tailroom(skb);
    1833                 :            : 
    1834         [ #  # ]:          0 :         if (ret < 0) {
    1835                 :          0 :                 audit_log_lost("out of memory in audit_expand");
    1836                 :          0 :                 return 0;
    1837                 :            :         }
    1838                 :            : 
    1839                 :          0 :         skb->truesize += newtail - oldtail;
    1840                 :          0 :         return newtail;
    1841                 :            : }
    1842                 :            : 
    1843                 :            : /*
    1844                 :            :  * Format an audit message into the audit buffer.  If there isn't enough
    1845                 :            :  * room in the audit buffer, more room will be allocated and vsnprint
    1846                 :            :  * will be called a second time.  Currently, we assume that a printk
    1847                 :            :  * can't format message larger than 1024 bytes, so we don't either.
    1848                 :            :  */
    1849                 :        414 : static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
    1850                 :            :                               va_list args)
    1851                 :            : {
    1852                 :            :         int len, avail;
    1853                 :            :         struct sk_buff *skb;
    1854                 :            :         va_list args2;
    1855                 :            : 
    1856         [ +  - ]:        414 :         if (!ab)
    1857                 :            :                 return;
    1858                 :            : 
    1859         [ -  + ]:        414 :         BUG_ON(!ab->skb);
    1860                 :            :         skb = ab->skb;
    1861                 :            :         avail = skb_tailroom(skb);
    1862         [ -  + ]:        414 :         if (avail == 0) {
    1863                 :          0 :                 avail = audit_expand(ab, AUDIT_BUFSIZ);
    1864         [ #  # ]:          0 :                 if (!avail)
    1865                 :            :                         goto out;
    1866                 :            :         }
    1867                 :        414 :         va_copy(args2, args);
    1868                 :        414 :         len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args);
    1869         [ -  + ]:        414 :         if (len >= avail) {
    1870                 :            :                 /* The printk buffer is 1024 bytes long, so if we get
    1871                 :            :                  * here and AUDIT_BUFSIZ is at least 1024, then we can
    1872                 :            :                  * log everything that printk could have logged. */
    1873                 :          0 :                 avail = audit_expand(ab,
    1874                 :          0 :                         max_t(unsigned, AUDIT_BUFSIZ, 1+len-avail));
    1875         [ #  # ]:          0 :                 if (!avail)
    1876                 :            :                         goto out_va_end;
    1877                 :          0 :                 len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args2);
    1878                 :            :         }
    1879         [ +  - ]:        414 :         if (len > 0)
    1880                 :        414 :                 skb_put(skb, len);
    1881                 :            : out_va_end:
    1882                 :        414 :         va_end(args2);
    1883                 :            : out:
    1884                 :            :         return;
    1885                 :            : }
    1886                 :            : 
    1887                 :            : /**
    1888                 :            :  * audit_log_format - format a message into the audit buffer.
    1889                 :            :  * @ab: audit_buffer
    1890                 :            :  * @fmt: format string
    1891                 :            :  * @...: optional parameters matching @fmt string
    1892                 :            :  *
    1893                 :            :  * All the work is done in audit_log_vformat.
    1894                 :            :  */
    1895                 :        207 : void audit_log_format(struct audit_buffer *ab, const char *fmt, ...)
    1896                 :            : {
    1897                 :            :         va_list args;
    1898                 :            : 
    1899         [ +  - ]:        207 :         if (!ab)
    1900                 :          0 :                 return;
    1901                 :        207 :         va_start(args, fmt);
    1902                 :        207 :         audit_log_vformat(ab, fmt, args);
    1903                 :        207 :         va_end(args);
    1904                 :            : }
    1905                 :            : 
    1906                 :            : /**
    1907                 :            :  * audit_log_n_hex - convert a buffer to hex and append it to the audit skb
    1908                 :            :  * @ab: the audit_buffer
    1909                 :            :  * @buf: buffer to convert to hex
    1910                 :            :  * @len: length of @buf to be converted
    1911                 :            :  *
    1912                 :            :  * No return value; failure to expand is silently ignored.
    1913                 :            :  *
    1914                 :            :  * This function will take the passed buf and convert it into a string of
    1915                 :            :  * ascii hex digits. The new string is placed onto the skb.
    1916                 :            :  */
    1917                 :          0 : void audit_log_n_hex(struct audit_buffer *ab, const unsigned char *buf,
    1918                 :            :                 size_t len)
    1919                 :            : {
    1920                 :            :         int i, avail, new_len;
    1921                 :            :         unsigned char *ptr;
    1922                 :            :         struct sk_buff *skb;
    1923                 :            : 
    1924         [ #  # ]:          0 :         if (!ab)
    1925                 :            :                 return;
    1926                 :            : 
    1927         [ #  # ]:          0 :         BUG_ON(!ab->skb);
    1928                 :            :         skb = ab->skb;
    1929                 :            :         avail = skb_tailroom(skb);
    1930                 :          0 :         new_len = len<<1;
    1931         [ #  # ]:          0 :         if (new_len >= avail) {
    1932                 :            :                 /* Round the buffer request up to the next multiple */
    1933                 :          0 :                 new_len = AUDIT_BUFSIZ*(((new_len-avail)/AUDIT_BUFSIZ) + 1);
    1934                 :          0 :                 avail = audit_expand(ab, new_len);
    1935         [ #  # ]:          0 :                 if (!avail)
    1936                 :            :                         return;
    1937                 :            :         }
    1938                 :            : 
    1939                 :            :         ptr = skb_tail_pointer(skb);
    1940         [ #  # ]:          0 :         for (i = 0; i < len; i++)
    1941                 :          0 :                 ptr = hex_byte_pack_upper(ptr, buf[i]);
    1942                 :          0 :         *ptr = 0;
    1943                 :          0 :         skb_put(skb, len << 1); /* new string is twice the old string */
    1944                 :            : }
    1945                 :            : 
    1946                 :            : /*
    1947                 :            :  * Format a string of no more than slen characters into the audit buffer,
    1948                 :            :  * enclosed in quote marks.
    1949                 :            :  */
    1950                 :          0 : void audit_log_n_string(struct audit_buffer *ab, const char *string,
    1951                 :            :                         size_t slen)
    1952                 :            : {
    1953                 :            :         int avail, new_len;
    1954                 :            :         unsigned char *ptr;
    1955                 :            :         struct sk_buff *skb;
    1956                 :            : 
    1957         [ #  # ]:          0 :         if (!ab)
    1958                 :            :                 return;
    1959                 :            : 
    1960         [ #  # ]:          0 :         BUG_ON(!ab->skb);
    1961                 :            :         skb = ab->skb;
    1962                 :            :         avail = skb_tailroom(skb);
    1963                 :          0 :         new_len = slen + 3;     /* enclosing quotes + null terminator */
    1964         [ #  # ]:          0 :         if (new_len > avail) {
    1965                 :          0 :                 avail = audit_expand(ab, new_len);
    1966         [ #  # ]:          0 :                 if (!avail)
    1967                 :            :                         return;
    1968                 :            :         }
    1969                 :            :         ptr = skb_tail_pointer(skb);
    1970                 :          0 :         *ptr++ = '"';
    1971                 :          0 :         memcpy(ptr, string, slen);
    1972                 :          0 :         ptr += slen;
    1973                 :          0 :         *ptr++ = '"';
    1974                 :          0 :         *ptr = 0;
    1975                 :          0 :         skb_put(skb, slen + 2); /* don't include null terminator */
    1976                 :            : }
    1977                 :            : 
    1978                 :            : /**
    1979                 :            :  * audit_string_contains_control - does a string need to be logged in hex
    1980                 :            :  * @string: string to be checked
    1981                 :            :  * @len: max length of the string to check
    1982                 :            :  */
    1983                 :          0 : bool audit_string_contains_control(const char *string, size_t len)
    1984                 :            : {
    1985                 :            :         const unsigned char *p;
    1986   [ #  #  #  # ]:          0 :         for (p = string; p < (const unsigned char *)string + len; p++) {
    1987   [ #  #  #  #  :          0 :                 if (*p == '"' || *p < 0x21 || *p > 0x7e)
             #  #  #  # ]
    1988                 :            :                         return true;
    1989                 :            :         }
    1990                 :            :         return false;
    1991                 :            : }
    1992                 :            : 
    1993                 :            : /**
    1994                 :            :  * audit_log_n_untrustedstring - log a string that may contain random characters
    1995                 :            :  * @ab: audit_buffer
    1996                 :            :  * @len: length of string (not including trailing null)
    1997                 :            :  * @string: string to be logged
    1998                 :            :  *
    1999                 :            :  * This code will escape a string that is passed to it if the string
    2000                 :            :  * contains a control character, unprintable character, double quote mark,
    2001                 :            :  * or a space. Unescaped strings will start and end with a double quote mark.
    2002                 :            :  * Strings that are escaped are printed in hex (2 digits per char).
    2003                 :            :  *
    2004                 :            :  * The caller specifies the number of characters in the string to log, which may
    2005                 :            :  * or may not be the entire string.
    2006                 :            :  */
    2007                 :          0 : void audit_log_n_untrustedstring(struct audit_buffer *ab, const char *string,
    2008                 :            :                                  size_t len)
    2009                 :            : {
    2010         [ #  # ]:          0 :         if (audit_string_contains_control(string, len))
    2011                 :          0 :                 audit_log_n_hex(ab, string, len);
    2012                 :            :         else
    2013                 :          0 :                 audit_log_n_string(ab, string, len);
    2014                 :          0 : }
    2015                 :            : 
    2016                 :            : /**
    2017                 :            :  * audit_log_untrustedstring - log a string that may contain random characters
    2018                 :            :  * @ab: audit_buffer
    2019                 :            :  * @string: string to be logged
    2020                 :            :  *
    2021                 :            :  * Same as audit_log_n_untrustedstring(), except that strlen is used to
    2022                 :            :  * determine string length.
    2023                 :            :  */
    2024                 :          0 : void audit_log_untrustedstring(struct audit_buffer *ab, const char *string)
    2025                 :            : {
    2026                 :          0 :         audit_log_n_untrustedstring(ab, string, strlen(string));
    2027                 :          0 : }
    2028                 :            : 
    2029                 :            : /* This is a helper-function to print the escaped d_path */
    2030                 :          0 : void audit_log_d_path(struct audit_buffer *ab, const char *prefix,
    2031                 :            :                       const struct path *path)
    2032                 :            : {
    2033                 :            :         char *p, *pathname;
    2034                 :            : 
    2035         [ #  # ]:          0 :         if (prefix)
    2036                 :          0 :                 audit_log_format(ab, "%s", prefix);
    2037                 :            : 
    2038                 :            :         /* We will allow 11 spaces for ' (deleted)' to be appended */
    2039                 :          0 :         pathname = kmalloc(PATH_MAX+11, ab->gfp_mask);
    2040         [ #  # ]:          0 :         if (!pathname) {
    2041                 :          0 :                 audit_log_string(ab, "<no_memory>");
    2042                 :          0 :                 return;
    2043                 :            :         }
    2044                 :          0 :         p = d_path(path, pathname, PATH_MAX+11);
    2045         [ #  # ]:          0 :         if (IS_ERR(p)) { /* Should never happen since we send PATH_MAX */
    2046                 :            :                 /* FIXME: can we save some information here? */
    2047                 :          0 :                 audit_log_string(ab, "<too_long>");
    2048                 :            :         } else
    2049                 :          0 :                 audit_log_untrustedstring(ab, p);
    2050                 :          0 :         kfree(pathname);
    2051                 :            : }
    2052                 :            : 
    2053                 :          0 : void audit_log_session_info(struct audit_buffer *ab)
    2054                 :            : {
    2055                 :          0 :         unsigned int sessionid = audit_get_sessionid(current);
    2056                 :          0 :         uid_t auid = from_kuid(&init_user_ns, audit_get_loginuid(current));
    2057                 :            : 
    2058                 :          0 :         audit_log_format(ab, "auid=%u ses=%u", auid, sessionid);
    2059                 :          0 : }
    2060                 :            : 
    2061                 :          0 : void audit_log_key(struct audit_buffer *ab, char *key)
    2062                 :            : {
    2063                 :          0 :         audit_log_format(ab, " key=");
    2064         [ #  # ]:          0 :         if (key)
    2065                 :          0 :                 audit_log_untrustedstring(ab, key);
    2066                 :            :         else
    2067                 :          0 :                 audit_log_format(ab, "(null)");
    2068                 :          0 : }
    2069                 :            : 
    2070                 :          0 : int audit_log_task_context(struct audit_buffer *ab)
    2071                 :            : {
    2072                 :          0 :         char *ctx = NULL;
    2073                 :            :         unsigned len;
    2074                 :            :         int error;
    2075                 :            :         u32 sid;
    2076                 :            : 
    2077                 :          0 :         security_task_getsecid(current, &sid);
    2078         [ #  # ]:          0 :         if (!sid)
    2079                 :            :                 return 0;
    2080                 :            : 
    2081                 :          0 :         error = security_secid_to_secctx(sid, &ctx, &len);
    2082         [ #  # ]:          0 :         if (error) {
    2083         [ #  # ]:          0 :                 if (error != -EINVAL)
    2084                 :            :                         goto error_path;
    2085                 :            :                 return 0;
    2086                 :            :         }
    2087                 :            : 
    2088                 :          0 :         audit_log_format(ab, " subj=%s", ctx);
    2089                 :          0 :         security_release_secctx(ctx, len);
    2090                 :          0 :         return 0;
    2091                 :            : 
    2092                 :            : error_path:
    2093                 :          0 :         audit_panic("error in audit_log_task_context");
    2094                 :          0 :         return error;
    2095                 :            : }
    2096                 :            : EXPORT_SYMBOL(audit_log_task_context);
    2097                 :            : 
    2098                 :          0 : void audit_log_d_path_exe(struct audit_buffer *ab,
    2099                 :            :                           struct mm_struct *mm)
    2100                 :            : {
    2101                 :            :         struct file *exe_file;
    2102                 :            : 
    2103         [ #  # ]:          0 :         if (!mm)
    2104                 :            :                 goto out_null;
    2105                 :            : 
    2106                 :          0 :         exe_file = get_mm_exe_file(mm);
    2107         [ #  # ]:          0 :         if (!exe_file)
    2108                 :            :                 goto out_null;
    2109                 :            : 
    2110                 :          0 :         audit_log_d_path(ab, " exe=", &exe_file->f_path);
    2111                 :          0 :         fput(exe_file);
    2112                 :          0 :         return;
    2113                 :            : out_null:
    2114                 :          0 :         audit_log_format(ab, " exe=(null)");
    2115                 :            : }
    2116                 :            : 
    2117                 :          0 : struct tty_struct *audit_get_tty(void)
    2118                 :            : {
    2119                 :            :         struct tty_struct *tty = NULL;
    2120                 :            :         unsigned long flags;
    2121                 :            : 
    2122                 :          0 :         spin_lock_irqsave(&current->sighand->siglock, flags);
    2123         [ #  # ]:          0 :         if (current->signal)
    2124                 :          0 :                 tty = tty_kref_get(current->signal->tty);
    2125                 :          0 :         spin_unlock_irqrestore(&current->sighand->siglock, flags);
    2126                 :          0 :         return tty;
    2127                 :            : }
    2128                 :            : 
    2129                 :          0 : void audit_put_tty(struct tty_struct *tty)
    2130                 :            : {
    2131                 :          0 :         tty_kref_put(tty);
    2132                 :          0 : }
    2133                 :            : 
    2134                 :          0 : void audit_log_task_info(struct audit_buffer *ab)
    2135                 :            : {
    2136                 :            :         const struct cred *cred;
    2137                 :            :         char comm[sizeof(current->comm)];
    2138                 :            :         struct tty_struct *tty;
    2139                 :            : 
    2140         [ #  # ]:          0 :         if (!ab)
    2141                 :          0 :                 return;
    2142                 :            : 
    2143                 :          0 :         cred = current_cred();
    2144                 :          0 :         tty = audit_get_tty();
    2145         [ #  # ]:          0 :         audit_log_format(ab,
    2146                 :            :                          " ppid=%d pid=%d auid=%u uid=%u gid=%u"
    2147                 :            :                          " euid=%u suid=%u fsuid=%u"
    2148                 :            :                          " egid=%u sgid=%u fsgid=%u tty=%s ses=%u",
    2149                 :          0 :                          task_ppid_nr(current),
    2150                 :            :                          task_tgid_nr(current),
    2151                 :            :                          from_kuid(&init_user_ns, audit_get_loginuid(current)),
    2152                 :            :                          from_kuid(&init_user_ns, cred->uid),
    2153                 :            :                          from_kgid(&init_user_ns, cred->gid),
    2154                 :            :                          from_kuid(&init_user_ns, cred->euid),
    2155                 :            :                          from_kuid(&init_user_ns, cred->suid),
    2156                 :            :                          from_kuid(&init_user_ns, cred->fsuid),
    2157                 :            :                          from_kgid(&init_user_ns, cred->egid),
    2158                 :            :                          from_kgid(&init_user_ns, cred->sgid),
    2159                 :            :                          from_kgid(&init_user_ns, cred->fsgid),
    2160                 :            :                          tty ? tty_name(tty) : "(none)",
    2161                 :            :                          audit_get_sessionid(current));
    2162                 :            :         audit_put_tty(tty);
    2163                 :          0 :         audit_log_format(ab, " comm=");
    2164                 :          0 :         audit_log_untrustedstring(ab, get_task_comm(comm, current));
    2165                 :          0 :         audit_log_d_path_exe(ab, current->mm);
    2166                 :          0 :         audit_log_task_context(ab);
    2167                 :            : }
    2168                 :            : EXPORT_SYMBOL(audit_log_task_info);
    2169                 :            : 
    2170                 :            : /**
    2171                 :            :  * audit_log_link_denied - report a link restriction denial
    2172                 :            :  * @operation: specific link operation
    2173                 :            :  */
    2174                 :          0 : void audit_log_link_denied(const char *operation)
    2175                 :            : {
    2176                 :            :         struct audit_buffer *ab;
    2177                 :            : 
    2178   [ #  #  #  # ]:          0 :         if (!audit_enabled || audit_dummy_context())
    2179                 :            :                 return;
    2180                 :            : 
    2181                 :            :         /* Generate AUDIT_ANOM_LINK with subject, operation, outcome. */
    2182                 :          0 :         ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_ANOM_LINK);
    2183         [ #  # ]:          0 :         if (!ab)
    2184                 :            :                 return;
    2185                 :          0 :         audit_log_format(ab, "op=%s", operation);
    2186                 :          0 :         audit_log_task_info(ab);
    2187                 :          0 :         audit_log_format(ab, " res=0");
    2188                 :          0 :         audit_log_end(ab);
    2189                 :            : }
    2190                 :            : 
    2191                 :            : /* global counter which is incremented every time something logs in */
    2192                 :            : static atomic_t session_id = ATOMIC_INIT(0);
    2193                 :            : 
    2194                 :        834 : static int audit_set_loginuid_perm(kuid_t loginuid)
    2195                 :            : {
    2196                 :            :         /* if we are unset, we don't need privs */
    2197         [ -  + ]:       1668 :         if (!audit_loginuid_set(current))
    2198                 :            :                 return 0;
    2199                 :            :         /* if AUDIT_FEATURE_LOGINUID_IMMUTABLE means never ever allow a change*/
    2200         [ #  # ]:          0 :         if (is_audit_feature_set(AUDIT_FEATURE_LOGINUID_IMMUTABLE))
    2201                 :            :                 return -EPERM;
    2202                 :            :         /* it is set, you need permission */
    2203         [ #  # ]:          0 :         if (!capable(CAP_AUDIT_CONTROL))
    2204                 :            :                 return -EPERM;
    2205                 :            :         /* reject if this is not an unset and we don't allow that */
    2206         [ #  # ]:          0 :         if (is_audit_feature_set(AUDIT_FEATURE_ONLY_UNSET_LOGINUID)
    2207         [ #  # ]:          0 :                                  && uid_valid(loginuid))
    2208                 :            :                 return -EPERM;
    2209                 :            :         return 0;
    2210                 :            : }
    2211                 :            : 
    2212                 :        834 : static void audit_log_set_loginuid(kuid_t koldloginuid, kuid_t kloginuid,
    2213                 :            :                                    unsigned int oldsessionid,
    2214                 :            :                                    unsigned int sessionid, int rc)
    2215                 :            : {
    2216                 :            :         struct audit_buffer *ab;
    2217                 :            :         uid_t uid, oldloginuid, loginuid;
    2218                 :            :         struct tty_struct *tty;
    2219                 :            : 
    2220         [ -  + ]:        834 :         if (!audit_enabled)
    2221                 :            :                 return;
    2222                 :            : 
    2223                 :          0 :         ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_LOGIN);
    2224         [ #  # ]:          0 :         if (!ab)
    2225                 :            :                 return;
    2226                 :            : 
    2227                 :          0 :         uid = from_kuid(&init_user_ns, task_uid(current));
    2228                 :          0 :         oldloginuid = from_kuid(&init_user_ns, koldloginuid);
    2229                 :          0 :         loginuid = from_kuid(&init_user_ns, kloginuid),
    2230                 :          0 :         tty = audit_get_tty();
    2231                 :            : 
    2232                 :          0 :         audit_log_format(ab, "pid=%d uid=%u", task_tgid_nr(current), uid);
    2233                 :          0 :         audit_log_task_context(ab);
    2234         [ #  # ]:          0 :         audit_log_format(ab, " old-auid=%u auid=%u tty=%s old-ses=%u ses=%u res=%d",
    2235                 :            :                          oldloginuid, loginuid, tty ? tty_name(tty) : "(none)",
    2236                 :            :                          oldsessionid, sessionid, !rc);
    2237                 :            :         audit_put_tty(tty);
    2238                 :          0 :         audit_log_end(ab);
    2239                 :            : }
    2240                 :            : 
    2241                 :            : /**
    2242                 :            :  * audit_set_loginuid - set current task's loginuid
    2243                 :            :  * @loginuid: loginuid value
    2244                 :            :  *
    2245                 :            :  * Returns 0.
    2246                 :            :  *
    2247                 :            :  * Called (set) from fs/proc/base.c::proc_loginuid_write().
    2248                 :            :  */
    2249                 :        834 : int audit_set_loginuid(kuid_t loginuid)
    2250                 :            : {
    2251                 :            :         unsigned int oldsessionid, sessionid = AUDIT_SID_UNSET;
    2252                 :            :         kuid_t oldloginuid;
    2253                 :            :         int rc;
    2254                 :            : 
    2255                 :        834 :         oldloginuid = audit_get_loginuid(current);
    2256                 :            :         oldsessionid = audit_get_sessionid(current);
    2257                 :            : 
    2258                 :        834 :         rc = audit_set_loginuid_perm(loginuid);
    2259         [ +  - ]:        834 :         if (rc)
    2260                 :            :                 goto out;
    2261                 :            : 
    2262                 :            :         /* are we setting or clearing? */
    2263         [ +  - ]:        834 :         if (uid_valid(loginuid)) {
    2264                 :        834 :                 sessionid = (unsigned int)atomic_inc_return(&session_id);
    2265         [ -  + ]:        834 :                 if (unlikely(sessionid == AUDIT_SID_UNSET))
    2266                 :          0 :                         sessionid = (unsigned int)atomic_inc_return(&session_id);
    2267                 :            :         }
    2268                 :            : 
    2269                 :        834 :         current->sessionid = sessionid;
    2270                 :        834 :         current->loginuid = loginuid;
    2271                 :            : out:
    2272                 :        834 :         audit_log_set_loginuid(oldloginuid, loginuid, oldsessionid, sessionid, rc);
    2273                 :        834 :         return rc;
    2274                 :            : }
    2275                 :            : 
    2276                 :            : /**
    2277                 :            :  * audit_signal_info - record signal info for shutting down audit subsystem
    2278                 :            :  * @sig: signal value
    2279                 :            :  * @t: task being signaled
    2280                 :            :  *
    2281                 :            :  * If the audit subsystem is being terminated, record the task (pid)
    2282                 :            :  * and uid that is doing that.
    2283                 :            :  */
    2284                 :      26873 : int audit_signal_info(int sig, struct task_struct *t)
    2285                 :            : {
    2286                 :      26873 :         kuid_t uid = current_uid(), auid;
    2287                 :            : 
    2288   [ -  +  #  # ]:      26873 :         if (auditd_test_task(t) &&
    2289                 :          0 :             (sig == SIGTERM || sig == SIGHUP ||
    2290         [ #  # ]:          0 :              sig == SIGUSR1 || sig == SIGUSR2)) {
    2291                 :          0 :                 audit_sig_pid = task_tgid_nr(current);
    2292                 :            :                 auid = audit_get_loginuid(current);
    2293         [ #  # ]:          0 :                 if (uid_valid(auid))
    2294                 :          0 :                         audit_sig_uid = auid;
    2295                 :            :                 else
    2296                 :          0 :                         audit_sig_uid = uid;
    2297                 :          0 :                 security_task_getsecid(current, &audit_sig_sid);
    2298                 :            :         }
    2299                 :            : 
    2300                 :      26873 :         return audit_signal_info_syscall(t);
    2301                 :            : }
    2302                 :            : 
    2303                 :            : /**
    2304                 :            :  * audit_log_end - end one audit record
    2305                 :            :  * @ab: the audit_buffer
    2306                 :            :  *
    2307                 :            :  * We can not do a netlink send inside an irq context because it blocks (last
    2308                 :            :  * arg, flags, is not set to MSG_DONTWAIT), so the audit buffer is placed on a
    2309                 :            :  * queue and a tasklet is scheduled to remove them from the queue outside the
    2310                 :            :  * irq context.  May be called in any context.
    2311                 :            :  */
    2312                 :        207 : void audit_log_end(struct audit_buffer *ab)
    2313                 :            : {
    2314                 :            :         struct sk_buff *skb;
    2315                 :            :         struct nlmsghdr *nlh;
    2316                 :            : 
    2317         [ +  - ]:        207 :         if (!ab)
    2318                 :        207 :                 return;
    2319                 :            : 
    2320         [ +  - ]:        207 :         if (audit_rate_check()) {
    2321                 :        207 :                 skb = ab->skb;
    2322                 :        207 :                 ab->skb = NULL;
    2323                 :            : 
    2324                 :            :                 /* setup the netlink header, see the comments in
    2325                 :            :                  * kauditd_send_multicast_skb() for length quirks */
    2326                 :            :                 nlh = nlmsg_hdr(skb);
    2327                 :        207 :                 nlh->nlmsg_len = skb->len - NLMSG_HDRLEN;
    2328                 :            : 
    2329                 :            :                 /* queue the netlink packet and poke the kauditd thread */
    2330                 :        207 :                 skb_queue_tail(&audit_queue, skb);
    2331                 :        207 :                 wake_up_interruptible(&kauditd_wait);
    2332                 :            :         } else
    2333                 :          0 :                 audit_log_lost("rate limit exceeded");
    2334                 :            : 
    2335                 :        207 :         audit_buffer_free(ab);
    2336                 :            : }
    2337                 :            : 
    2338                 :            : /**
    2339                 :            :  * audit_log - Log an audit record
    2340                 :            :  * @ctx: audit context
    2341                 :            :  * @gfp_mask: type of allocation
    2342                 :            :  * @type: audit message type
    2343                 :            :  * @fmt: format string to use
    2344                 :            :  * @...: variable parameters matching the format string
    2345                 :            :  *
    2346                 :            :  * This is a convenience function that calls audit_log_start,
    2347                 :            :  * audit_log_vformat, and audit_log_end.  It may be called
    2348                 :            :  * in any context.
    2349                 :            :  */
    2350                 :        207 : void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type,
    2351                 :            :                const char *fmt, ...)
    2352                 :            : {
    2353                 :            :         struct audit_buffer *ab;
    2354                 :            :         va_list args;
    2355                 :            : 
    2356                 :        207 :         ab = audit_log_start(ctx, gfp_mask, type);
    2357         [ +  - ]:        207 :         if (ab) {
    2358                 :        207 :                 va_start(args, fmt);
    2359                 :        207 :                 audit_log_vformat(ab, fmt, args);
    2360                 :        207 :                 va_end(args);
    2361                 :        207 :                 audit_log_end(ab);
    2362                 :            :         }
    2363                 :        207 : }
    2364                 :            : 
    2365                 :            : EXPORT_SYMBOL(audit_log_start);
    2366                 :            : EXPORT_SYMBOL(audit_log_end);
    2367                 :            : EXPORT_SYMBOL(audit_log_format);
    2368                 :            : EXPORT_SYMBOL(audit_log);

Generated by: LCOV version 1.14