LCOV - code coverage report
Current view: top level - kernel - audit.c (source / functions) Hit Total Coverage
Test: combined.info Lines: 227 981 23.1 %
Date: 2022-04-01 14:17:54 Functions: 21 66 31.8 %
Branches: 72 560 12.9 %

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

Generated by: LCOV version 1.14