0001
0002
0003
0004
0005
0006
0007
0008
0009
0010
0011
0012
0013
0014
0015
0016
0017
0018
0019
0020
0021
0022
0023
0024
0025
0026
0027
0028
0029
0030
0031
0032 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
0033
0034 #include <linux/file.h>
0035 #include <linux/init.h>
0036 #include <linux/types.h>
0037 #include <linux/atomic.h>
0038 #include <linux/mm.h>
0039 #include <linux/export.h>
0040 #include <linux/slab.h>
0041 #include <linux/err.h>
0042 #include <linux/kthread.h>
0043 #include <linux/kernel.h>
0044 #include <linux/syscalls.h>
0045 #include <linux/spinlock.h>
0046 #include <linux/rcupdate.h>
0047 #include <linux/mutex.h>
0048 #include <linux/gfp.h>
0049 #include <linux/pid.h>
0050
0051 #include <linux/audit.h>
0052
0053 #include <net/sock.h>
0054 #include <net/netlink.h>
0055 #include <linux/skbuff.h>
0056 #ifdef CONFIG_SECURITY
0057 #include <linux/security.h>
0058 #endif
0059 #include <linux/freezer.h>
0060 #include <linux/pid_namespace.h>
0061 #include <net/netns/generic.h>
0062
0063 #include "audit.h"
0064
0065
0066
0067 #define AUDIT_DISABLED -1
0068 #define AUDIT_UNINITIALIZED 0
0069 #define AUDIT_INITIALIZED 1
0070 static int audit_initialized = AUDIT_UNINITIALIZED;
0071
0072 u32 audit_enabled = AUDIT_OFF;
0073 bool audit_ever_enabled = !!AUDIT_OFF;
0074
0075 EXPORT_SYMBOL_GPL(audit_enabled);
0076
0077
0078 static u32 audit_default = AUDIT_OFF;
0079
0080
0081 static u32 audit_failure = AUDIT_FAIL_PRINTK;
0082
0083
0084 static unsigned int audit_net_id;
0085
0086
0087
0088
0089
0090 struct audit_net {
0091 struct sock *sk;
0092 };
0093
0094
0095
0096
0097
0098
0099
0100
0101
0102
0103
0104
0105 struct auditd_connection {
0106 struct pid *pid;
0107 u32 portid;
0108 struct net *net;
0109 struct rcu_head rcu;
0110 };
0111 static struct auditd_connection __rcu *auditd_conn;
0112 static DEFINE_SPINLOCK(auditd_conn_lock);
0113
0114
0115
0116
0117 static u32 audit_rate_limit;
0118
0119
0120
0121 static u32 audit_backlog_limit = 64;
0122 #define AUDIT_BACKLOG_WAIT_TIME (60 * HZ)
0123 static u32 audit_backlog_wait_time = AUDIT_BACKLOG_WAIT_TIME;
0124
0125
0126 static kuid_t audit_sig_uid = INVALID_UID;
0127 static pid_t audit_sig_pid = -1;
0128 static u32 audit_sig_sid;
0129
0130
0131
0132
0133
0134
0135
0136
0137 static atomic_t audit_lost = ATOMIC_INIT(0);
0138
0139
0140
0141
0142 static atomic_t audit_backlog_wait_time_actual = ATOMIC_INIT(0);
0143
0144
0145 struct list_head audit_inode_hash[AUDIT_INODE_BUCKETS];
0146
0147 static struct kmem_cache *audit_buffer_cache;
0148
0149
0150 static struct sk_buff_head audit_queue;
0151
0152 static struct sk_buff_head audit_retry_queue;
0153
0154 static struct sk_buff_head audit_hold_queue;
0155
0156
0157 static struct task_struct *kauditd_task;
0158 static DECLARE_WAIT_QUEUE_HEAD(kauditd_wait);
0159
0160
0161 static DECLARE_WAIT_QUEUE_HEAD(audit_backlog_wait);
0162
0163 static struct audit_features af = {.vers = AUDIT_FEATURE_VERSION,
0164 .mask = -1,
0165 .features = 0,
0166 .lock = 0,};
0167
0168 static char *audit_feature_names[2] = {
0169 "only_unset_loginuid",
0170 "loginuid_immutable",
0171 };
0172
0173
0174
0175
0176
0177
0178
0179
0180
0181
0182
0183
0184 static struct audit_ctl_mutex {
0185 struct mutex lock;
0186 void *owner;
0187 } audit_cmd_mutex;
0188
0189
0190
0191
0192 #define AUDIT_BUFSIZ 1024
0193
0194
0195
0196
0197
0198
0199 struct audit_buffer {
0200 struct sk_buff *skb;
0201 struct audit_context *ctx;
0202 gfp_t gfp_mask;
0203 };
0204
0205 struct audit_reply {
0206 __u32 portid;
0207 struct net *net;
0208 struct sk_buff *skb;
0209 };
0210
0211
0212
0213
0214
0215
0216
0217
0218 int auditd_test_task(struct task_struct *task)
0219 {
0220 int rc;
0221 struct auditd_connection *ac;
0222
0223 rcu_read_lock();
0224 ac = rcu_dereference(auditd_conn);
0225 rc = (ac && ac->pid == task_tgid(task) ? 1 : 0);
0226 rcu_read_unlock();
0227
0228 return rc;
0229 }
0230
0231
0232
0233
0234 void audit_ctl_lock(void)
0235 {
0236 mutex_lock(&audit_cmd_mutex.lock);
0237 audit_cmd_mutex.owner = current;
0238 }
0239
0240
0241
0242
0243 void audit_ctl_unlock(void)
0244 {
0245 audit_cmd_mutex.owner = NULL;
0246 mutex_unlock(&audit_cmd_mutex.lock);
0247 }
0248
0249
0250
0251
0252
0253
0254
0255
0256 static bool audit_ctl_owner_current(void)
0257 {
0258 return (current == audit_cmd_mutex.owner);
0259 }
0260
0261
0262
0263
0264
0265
0266
0267 static pid_t auditd_pid_vnr(void)
0268 {
0269 pid_t pid;
0270 const struct auditd_connection *ac;
0271
0272 rcu_read_lock();
0273 ac = rcu_dereference(auditd_conn);
0274 if (!ac || !ac->pid)
0275 pid = 0;
0276 else
0277 pid = pid_vnr(ac->pid);
0278 rcu_read_unlock();
0279
0280 return pid;
0281 }
0282
0283
0284
0285
0286
0287
0288
0289
0290
0291 static struct sock *audit_get_sk(const struct net *net)
0292 {
0293 struct audit_net *aunet;
0294
0295 if (!net)
0296 return NULL;
0297
0298 aunet = net_generic(net, audit_net_id);
0299 return aunet->sk;
0300 }
0301
0302 void audit_panic(const char *message)
0303 {
0304 switch (audit_failure) {
0305 case AUDIT_FAIL_SILENT:
0306 break;
0307 case AUDIT_FAIL_PRINTK:
0308 if (printk_ratelimit())
0309 pr_err("%s\n", message);
0310 break;
0311 case AUDIT_FAIL_PANIC:
0312 panic("audit: %s\n", message);
0313 break;
0314 }
0315 }
0316
0317 static inline int audit_rate_check(void)
0318 {
0319 static unsigned long last_check = 0;
0320 static int messages = 0;
0321 static DEFINE_SPINLOCK(lock);
0322 unsigned long flags;
0323 unsigned long now;
0324 unsigned long elapsed;
0325 int retval = 0;
0326
0327 if (!audit_rate_limit) return 1;
0328
0329 spin_lock_irqsave(&lock, flags);
0330 if (++messages < audit_rate_limit) {
0331 retval = 1;
0332 } else {
0333 now = jiffies;
0334 elapsed = now - last_check;
0335 if (elapsed > HZ) {
0336 last_check = now;
0337 messages = 0;
0338 retval = 1;
0339 }
0340 }
0341 spin_unlock_irqrestore(&lock, flags);
0342
0343 return retval;
0344 }
0345
0346
0347
0348
0349
0350
0351
0352
0353
0354 void audit_log_lost(const char *message)
0355 {
0356 static unsigned long last_msg = 0;
0357 static DEFINE_SPINLOCK(lock);
0358 unsigned long flags;
0359 unsigned long now;
0360 int print;
0361
0362 atomic_inc(&audit_lost);
0363
0364 print = (audit_failure == AUDIT_FAIL_PANIC || !audit_rate_limit);
0365
0366 if (!print) {
0367 spin_lock_irqsave(&lock, flags);
0368 now = jiffies;
0369 if (now - last_msg > HZ) {
0370 print = 1;
0371 last_msg = now;
0372 }
0373 spin_unlock_irqrestore(&lock, flags);
0374 }
0375
0376 if (print) {
0377 if (printk_ratelimit())
0378 pr_warn("audit_lost=%u audit_rate_limit=%u audit_backlog_limit=%u\n",
0379 atomic_read(&audit_lost),
0380 audit_rate_limit,
0381 audit_backlog_limit);
0382 audit_panic(message);
0383 }
0384 }
0385
0386 static int audit_log_config_change(char *function_name, u32 new, u32 old,
0387 int allow_changes)
0388 {
0389 struct audit_buffer *ab;
0390 int rc = 0;
0391
0392 ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_CONFIG_CHANGE);
0393 if (unlikely(!ab))
0394 return rc;
0395 audit_log_format(ab, "op=set %s=%u old=%u ", function_name, new, old);
0396 audit_log_session_info(ab);
0397 rc = audit_log_task_context(ab);
0398 if (rc)
0399 allow_changes = 0;
0400 audit_log_format(ab, " res=%d", allow_changes);
0401 audit_log_end(ab);
0402 return rc;
0403 }
0404
0405 static int audit_do_config_change(char *function_name, u32 *to_change, u32 new)
0406 {
0407 int allow_changes, rc = 0;
0408 u32 old = *to_change;
0409
0410
0411 if (audit_enabled == AUDIT_LOCKED)
0412 allow_changes = 0;
0413 else
0414 allow_changes = 1;
0415
0416 if (audit_enabled != AUDIT_OFF) {
0417 rc = audit_log_config_change(function_name, new, old, allow_changes);
0418 if (rc)
0419 allow_changes = 0;
0420 }
0421
0422
0423 if (allow_changes == 1)
0424 *to_change = new;
0425
0426 else if (rc == 0)
0427 rc = -EPERM;
0428 return rc;
0429 }
0430
0431 static int audit_set_rate_limit(u32 limit)
0432 {
0433 return audit_do_config_change("audit_rate_limit", &audit_rate_limit, limit);
0434 }
0435
0436 static int audit_set_backlog_limit(u32 limit)
0437 {
0438 return audit_do_config_change("audit_backlog_limit", &audit_backlog_limit, limit);
0439 }
0440
0441 static int audit_set_backlog_wait_time(u32 timeout)
0442 {
0443 return audit_do_config_change("audit_backlog_wait_time",
0444 &audit_backlog_wait_time, timeout);
0445 }
0446
0447 static int audit_set_enabled(u32 state)
0448 {
0449 int rc;
0450 if (state > AUDIT_LOCKED)
0451 return -EINVAL;
0452
0453 rc = audit_do_config_change("audit_enabled", &audit_enabled, state);
0454 if (!rc)
0455 audit_ever_enabled |= !!state;
0456
0457 return rc;
0458 }
0459
0460 static int audit_set_failure(u32 state)
0461 {
0462 if (state != AUDIT_FAIL_SILENT
0463 && state != AUDIT_FAIL_PRINTK
0464 && state != AUDIT_FAIL_PANIC)
0465 return -EINVAL;
0466
0467 return audit_do_config_change("audit_failure", &audit_failure, state);
0468 }
0469
0470
0471
0472
0473
0474
0475
0476
0477
0478 static void auditd_conn_free(struct rcu_head *rcu)
0479 {
0480 struct auditd_connection *ac;
0481
0482 ac = container_of(rcu, struct auditd_connection, rcu);
0483 put_pid(ac->pid);
0484 put_net(ac->net);
0485 kfree(ac);
0486 }
0487
0488
0489
0490
0491
0492
0493
0494
0495
0496
0497
0498 static int auditd_set(struct pid *pid, u32 portid, struct net *net)
0499 {
0500 unsigned long flags;
0501 struct auditd_connection *ac_old, *ac_new;
0502
0503 if (!pid || !net)
0504 return -EINVAL;
0505
0506 ac_new = kzalloc(sizeof(*ac_new), GFP_KERNEL);
0507 if (!ac_new)
0508 return -ENOMEM;
0509 ac_new->pid = get_pid(pid);
0510 ac_new->portid = portid;
0511 ac_new->net = get_net(net);
0512
0513 spin_lock_irqsave(&auditd_conn_lock, flags);
0514 ac_old = rcu_dereference_protected(auditd_conn,
0515 lockdep_is_held(&auditd_conn_lock));
0516 rcu_assign_pointer(auditd_conn, ac_new);
0517 spin_unlock_irqrestore(&auditd_conn_lock, flags);
0518
0519 if (ac_old)
0520 call_rcu(&ac_old->rcu, auditd_conn_free);
0521
0522 return 0;
0523 }
0524
0525
0526
0527
0528
0529
0530
0531
0532 static void kauditd_printk_skb(struct sk_buff *skb)
0533 {
0534 struct nlmsghdr *nlh = nlmsg_hdr(skb);
0535 char *data = nlmsg_data(nlh);
0536
0537 if (nlh->nlmsg_type != AUDIT_EOE && printk_ratelimit())
0538 pr_notice("type=%d %s\n", nlh->nlmsg_type, data);
0539 }
0540
0541
0542
0543
0544
0545
0546
0547
0548
0549
0550 static void kauditd_rehold_skb(struct sk_buff *skb, __always_unused int error)
0551 {
0552
0553 skb_queue_tail(&audit_hold_queue, skb);
0554 }
0555
0556
0557
0558
0559
0560
0561
0562
0563
0564
0565
0566
0567
0568
0569 static void kauditd_hold_skb(struct sk_buff *skb, int error)
0570 {
0571
0572
0573 kauditd_printk_skb(skb);
0574
0575
0576 if (!audit_default)
0577 goto drop;
0578
0579
0580
0581
0582
0583 if (error == -EAGAIN) {
0584 if (!audit_backlog_limit ||
0585 skb_queue_len(&audit_retry_queue) < audit_backlog_limit) {
0586 skb_queue_tail(&audit_retry_queue, skb);
0587 return;
0588 }
0589 audit_log_lost("kauditd retry queue overflow");
0590 goto drop;
0591 }
0592
0593
0594 if (!audit_backlog_limit ||
0595 skb_queue_len(&audit_hold_queue) < audit_backlog_limit) {
0596 skb_queue_tail(&audit_hold_queue, skb);
0597 return;
0598 }
0599
0600
0601 audit_log_lost("kauditd hold queue overflow");
0602 drop:
0603 kfree_skb(skb);
0604 }
0605
0606
0607
0608
0609
0610
0611
0612
0613
0614
0615
0616 static void kauditd_retry_skb(struct sk_buff *skb, __always_unused int error)
0617 {
0618 if (!audit_backlog_limit ||
0619 skb_queue_len(&audit_retry_queue) < audit_backlog_limit) {
0620 skb_queue_tail(&audit_retry_queue, skb);
0621 return;
0622 }
0623
0624
0625 kauditd_printk_skb(skb);
0626 audit_log_lost("kauditd retry queue overflow");
0627 kfree_skb(skb);
0628 }
0629
0630
0631
0632
0633
0634
0635
0636
0637
0638
0639
0640
0641 static void auditd_reset(const struct auditd_connection *ac)
0642 {
0643 unsigned long flags;
0644 struct sk_buff *skb;
0645 struct auditd_connection *ac_old;
0646
0647
0648 spin_lock_irqsave(&auditd_conn_lock, flags);
0649 ac_old = rcu_dereference_protected(auditd_conn,
0650 lockdep_is_held(&auditd_conn_lock));
0651 if (ac && ac != ac_old) {
0652
0653 spin_unlock_irqrestore(&auditd_conn_lock, flags);
0654 return;
0655 }
0656 rcu_assign_pointer(auditd_conn, NULL);
0657 spin_unlock_irqrestore(&auditd_conn_lock, flags);
0658
0659 if (ac_old)
0660 call_rcu(&ac_old->rcu, auditd_conn_free);
0661
0662
0663
0664 while ((skb = skb_dequeue(&audit_retry_queue)))
0665 kauditd_hold_skb(skb, -ECONNREFUSED);
0666 }
0667
0668
0669
0670
0671
0672
0673
0674
0675
0676
0677
0678
0679 static int auditd_send_unicast_skb(struct sk_buff *skb)
0680 {
0681 int rc;
0682 u32 portid;
0683 struct net *net;
0684 struct sock *sk;
0685 struct auditd_connection *ac;
0686
0687
0688
0689
0690
0691
0692
0693
0694 rcu_read_lock();
0695 ac = rcu_dereference(auditd_conn);
0696 if (!ac) {
0697 rcu_read_unlock();
0698 kfree_skb(skb);
0699 rc = -ECONNREFUSED;
0700 goto err;
0701 }
0702 net = get_net(ac->net);
0703 sk = audit_get_sk(net);
0704 portid = ac->portid;
0705 rcu_read_unlock();
0706
0707 rc = netlink_unicast(sk, skb, portid, 0);
0708 put_net(net);
0709 if (rc < 0)
0710 goto err;
0711
0712 return rc;
0713
0714 err:
0715 if (ac && rc == -ECONNREFUSED)
0716 auditd_reset(ac);
0717 return rc;
0718 }
0719
0720
0721
0722
0723
0724
0725
0726
0727
0728
0729
0730
0731
0732
0733
0734
0735 static int kauditd_send_queue(struct sock *sk, u32 portid,
0736 struct sk_buff_head *queue,
0737 unsigned int retry_limit,
0738 void (*skb_hook)(struct sk_buff *skb),
0739 void (*err_hook)(struct sk_buff *skb, int error))
0740 {
0741 int rc = 0;
0742 struct sk_buff *skb = NULL;
0743 struct sk_buff *skb_tail;
0744 unsigned int failed = 0;
0745
0746
0747
0748
0749 skb_tail = skb_peek_tail(queue);
0750 while ((skb != skb_tail) && (skb = skb_dequeue(queue))) {
0751
0752 if (skb_hook)
0753 (*skb_hook)(skb);
0754
0755
0756 if (!sk) {
0757 if (err_hook)
0758 (*err_hook)(skb, -ECONNREFUSED);
0759 continue;
0760 }
0761
0762 retry:
0763
0764 skb_get(skb);
0765 rc = netlink_unicast(sk, skb, portid, 0);
0766 if (rc < 0) {
0767
0768 if (++failed >= retry_limit ||
0769 rc == -ECONNREFUSED || rc == -EPERM) {
0770 sk = NULL;
0771 if (err_hook)
0772 (*err_hook)(skb, rc);
0773 if (rc == -EAGAIN)
0774 rc = 0;
0775
0776 continue;
0777 } else
0778 goto retry;
0779 } else {
0780
0781 consume_skb(skb);
0782 failed = 0;
0783 }
0784 }
0785
0786 return (rc >= 0 ? 0 : rc);
0787 }
0788
0789
0790
0791
0792
0793
0794
0795
0796
0797
0798 static void kauditd_send_multicast_skb(struct sk_buff *skb)
0799 {
0800 struct sk_buff *copy;
0801 struct sock *sock = audit_get_sk(&init_net);
0802 struct nlmsghdr *nlh;
0803
0804
0805
0806
0807 if (!netlink_has_listeners(sock, AUDIT_NLGRP_READLOG))
0808 return;
0809
0810
0811
0812
0813
0814
0815
0816
0817
0818
0819
0820 copy = skb_copy(skb, GFP_KERNEL);
0821 if (!copy)
0822 return;
0823 nlh = nlmsg_hdr(copy);
0824 nlh->nlmsg_len = skb->len;
0825
0826 nlmsg_multicast(sock, copy, 0, AUDIT_NLGRP_READLOG, GFP_KERNEL);
0827 }
0828
0829
0830
0831
0832
0833 static int kauditd_thread(void *dummy)
0834 {
0835 int rc;
0836 u32 portid = 0;
0837 struct net *net = NULL;
0838 struct sock *sk = NULL;
0839 struct auditd_connection *ac;
0840
0841 #define UNICAST_RETRIES 5
0842
0843 set_freezable();
0844 while (!kthread_should_stop()) {
0845
0846 rcu_read_lock();
0847 ac = rcu_dereference(auditd_conn);
0848 if (!ac) {
0849 rcu_read_unlock();
0850 goto main_queue;
0851 }
0852 net = get_net(ac->net);
0853 sk = audit_get_sk(net);
0854 portid = ac->portid;
0855 rcu_read_unlock();
0856
0857
0858 rc = kauditd_send_queue(sk, portid,
0859 &audit_hold_queue, UNICAST_RETRIES,
0860 NULL, kauditd_rehold_skb);
0861 if (rc < 0) {
0862 sk = NULL;
0863 auditd_reset(ac);
0864 goto main_queue;
0865 }
0866
0867
0868 rc = kauditd_send_queue(sk, portid,
0869 &audit_retry_queue, UNICAST_RETRIES,
0870 NULL, kauditd_hold_skb);
0871 if (rc < 0) {
0872 sk = NULL;
0873 auditd_reset(ac);
0874 goto main_queue;
0875 }
0876
0877 main_queue:
0878
0879
0880
0881
0882 rc = kauditd_send_queue(sk, portid, &audit_queue, 1,
0883 kauditd_send_multicast_skb,
0884 (sk ?
0885 kauditd_retry_skb : kauditd_hold_skb));
0886 if (ac && rc < 0)
0887 auditd_reset(ac);
0888 sk = NULL;
0889
0890
0891 if (net) {
0892 put_net(net);
0893 net = NULL;
0894 }
0895
0896
0897 wake_up(&audit_backlog_wait);
0898
0899
0900
0901
0902
0903 wait_event_freezable(kauditd_wait,
0904 (skb_queue_len(&audit_queue) ? 1 : 0));
0905 }
0906
0907 return 0;
0908 }
0909
0910 int audit_send_list_thread(void *_dest)
0911 {
0912 struct audit_netlink_list *dest = _dest;
0913 struct sk_buff *skb;
0914 struct sock *sk = audit_get_sk(dest->net);
0915
0916
0917 audit_ctl_lock();
0918 audit_ctl_unlock();
0919
0920 while ((skb = __skb_dequeue(&dest->q)) != NULL)
0921 netlink_unicast(sk, skb, dest->portid, 0);
0922
0923 put_net(dest->net);
0924 kfree(dest);
0925
0926 return 0;
0927 }
0928
0929 struct sk_buff *audit_make_reply(int seq, int type, int done,
0930 int multi, const void *payload, int size)
0931 {
0932 struct sk_buff *skb;
0933 struct nlmsghdr *nlh;
0934 void *data;
0935 int flags = multi ? NLM_F_MULTI : 0;
0936 int t = done ? NLMSG_DONE : type;
0937
0938 skb = nlmsg_new(size, GFP_KERNEL);
0939 if (!skb)
0940 return NULL;
0941
0942 nlh = nlmsg_put(skb, 0, seq, t, size, flags);
0943 if (!nlh)
0944 goto out_kfree_skb;
0945 data = nlmsg_data(nlh);
0946 memcpy(data, payload, size);
0947 return skb;
0948
0949 out_kfree_skb:
0950 kfree_skb(skb);
0951 return NULL;
0952 }
0953
0954 static void audit_free_reply(struct audit_reply *reply)
0955 {
0956 if (!reply)
0957 return;
0958
0959 kfree_skb(reply->skb);
0960 if (reply->net)
0961 put_net(reply->net);
0962 kfree(reply);
0963 }
0964
0965 static int audit_send_reply_thread(void *arg)
0966 {
0967 struct audit_reply *reply = (struct audit_reply *)arg;
0968
0969 audit_ctl_lock();
0970 audit_ctl_unlock();
0971
0972
0973
0974 netlink_unicast(audit_get_sk(reply->net), reply->skb, reply->portid, 0);
0975 reply->skb = NULL;
0976 audit_free_reply(reply);
0977 return 0;
0978 }
0979
0980
0981
0982
0983
0984
0985
0986
0987
0988
0989
0990
0991
0992 static void audit_send_reply(struct sk_buff *request_skb, int seq, int type, int done,
0993 int multi, const void *payload, int size)
0994 {
0995 struct task_struct *tsk;
0996 struct audit_reply *reply;
0997
0998 reply = kzalloc(sizeof(*reply), GFP_KERNEL);
0999 if (!reply)
1000 return;
1001
1002 reply->skb = audit_make_reply(seq, type, done, multi, payload, size);
1003 if (!reply->skb)
1004 goto err;
1005 reply->net = get_net(sock_net(NETLINK_CB(request_skb).sk));
1006 reply->portid = NETLINK_CB(request_skb).portid;
1007
1008 tsk = kthread_run(audit_send_reply_thread, reply, "audit_send_reply");
1009 if (IS_ERR(tsk))
1010 goto err;
1011
1012 return;
1013
1014 err:
1015 audit_free_reply(reply);
1016 }
1017
1018
1019
1020
1021
1022 static int audit_netlink_ok(struct sk_buff *skb, u16 msg_type)
1023 {
1024 int err = 0;
1025
1026
1027
1028
1029
1030
1031
1032
1033
1034
1035
1036
1037 if (current_user_ns() != &init_user_ns)
1038 return -ECONNREFUSED;
1039
1040 switch (msg_type) {
1041 case AUDIT_LIST:
1042 case AUDIT_ADD:
1043 case AUDIT_DEL:
1044 return -EOPNOTSUPP;
1045 case AUDIT_GET:
1046 case AUDIT_SET:
1047 case AUDIT_GET_FEATURE:
1048 case AUDIT_SET_FEATURE:
1049 case AUDIT_LIST_RULES:
1050 case AUDIT_ADD_RULE:
1051 case AUDIT_DEL_RULE:
1052 case AUDIT_SIGNAL_INFO:
1053 case AUDIT_TTY_GET:
1054 case AUDIT_TTY_SET:
1055 case AUDIT_TRIM:
1056 case AUDIT_MAKE_EQUIV:
1057
1058
1059 if (task_active_pid_ns(current) != &init_pid_ns)
1060 return -EPERM;
1061
1062 if (!netlink_capable(skb, CAP_AUDIT_CONTROL))
1063 err = -EPERM;
1064 break;
1065 case AUDIT_USER:
1066 case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG:
1067 case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
1068 if (!netlink_capable(skb, CAP_AUDIT_WRITE))
1069 err = -EPERM;
1070 break;
1071 default:
1072 err = -EINVAL;
1073 }
1074
1075 return err;
1076 }
1077
1078 static void audit_log_common_recv_msg(struct audit_context *context,
1079 struct audit_buffer **ab, u16 msg_type)
1080 {
1081 uid_t uid = from_kuid(&init_user_ns, current_uid());
1082 pid_t pid = task_tgid_nr(current);
1083
1084 if (!audit_enabled && msg_type != AUDIT_USER_AVC) {
1085 *ab = NULL;
1086 return;
1087 }
1088
1089 *ab = audit_log_start(context, GFP_KERNEL, msg_type);
1090 if (unlikely(!*ab))
1091 return;
1092 audit_log_format(*ab, "pid=%d uid=%u ", pid, uid);
1093 audit_log_session_info(*ab);
1094 audit_log_task_context(*ab);
1095 }
1096
1097 static inline void audit_log_user_recv_msg(struct audit_buffer **ab,
1098 u16 msg_type)
1099 {
1100 audit_log_common_recv_msg(NULL, ab, msg_type);
1101 }
1102
1103 static int is_audit_feature_set(int i)
1104 {
1105 return af.features & AUDIT_FEATURE_TO_MASK(i);
1106 }
1107
1108
1109 static int audit_get_feature(struct sk_buff *skb)
1110 {
1111 u32 seq;
1112
1113 seq = nlmsg_hdr(skb)->nlmsg_seq;
1114
1115 audit_send_reply(skb, seq, AUDIT_GET_FEATURE, 0, 0, &af, sizeof(af));
1116
1117 return 0;
1118 }
1119
1120 static void audit_log_feature_change(int which, u32 old_feature, u32 new_feature,
1121 u32 old_lock, u32 new_lock, int res)
1122 {
1123 struct audit_buffer *ab;
1124
1125 if (audit_enabled == AUDIT_OFF)
1126 return;
1127
1128 ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_FEATURE_CHANGE);
1129 if (!ab)
1130 return;
1131 audit_log_task_info(ab);
1132 audit_log_format(ab, " feature=%s old=%u new=%u old_lock=%u new_lock=%u res=%d",
1133 audit_feature_names[which], !!old_feature, !!new_feature,
1134 !!old_lock, !!new_lock, res);
1135 audit_log_end(ab);
1136 }
1137
1138 static int audit_set_feature(struct audit_features *uaf)
1139 {
1140 int i;
1141
1142 BUILD_BUG_ON(AUDIT_LAST_FEATURE + 1 > ARRAY_SIZE(audit_feature_names));
1143
1144
1145
1146 for (i = 0; i <= AUDIT_LAST_FEATURE; i++) {
1147 u32 feature = AUDIT_FEATURE_TO_MASK(i);
1148 u32 old_feature, new_feature, old_lock, new_lock;
1149
1150
1151 if (!(feature & uaf->mask))
1152 continue;
1153
1154 old_feature = af.features & feature;
1155 new_feature = uaf->features & feature;
1156 new_lock = (uaf->lock | af.lock) & feature;
1157 old_lock = af.lock & feature;
1158
1159
1160 if (old_lock && (new_feature != old_feature)) {
1161 audit_log_feature_change(i, old_feature, new_feature,
1162 old_lock, new_lock, 0);
1163 return -EPERM;
1164 }
1165 }
1166
1167 for (i = 0; i <= AUDIT_LAST_FEATURE; i++) {
1168 u32 feature = AUDIT_FEATURE_TO_MASK(i);
1169 u32 old_feature, new_feature, old_lock, new_lock;
1170
1171
1172 if (!(feature & uaf->mask))
1173 continue;
1174
1175 old_feature = af.features & feature;
1176 new_feature = uaf->features & feature;
1177 old_lock = af.lock & feature;
1178 new_lock = (uaf->lock | af.lock) & feature;
1179
1180 if (new_feature != old_feature)
1181 audit_log_feature_change(i, old_feature, new_feature,
1182 old_lock, new_lock, 1);
1183
1184 if (new_feature)
1185 af.features |= feature;
1186 else
1187 af.features &= ~feature;
1188 af.lock |= new_lock;
1189 }
1190
1191 return 0;
1192 }
1193
1194 static int audit_replace(struct pid *pid)
1195 {
1196 pid_t pvnr;
1197 struct sk_buff *skb;
1198
1199 pvnr = pid_vnr(pid);
1200 skb = audit_make_reply(0, AUDIT_REPLACE, 0, 0, &pvnr, sizeof(pvnr));
1201 if (!skb)
1202 return -ENOMEM;
1203 return auditd_send_unicast_skb(skb);
1204 }
1205
1206 static int audit_receive_msg(struct sk_buff *skb, struct nlmsghdr *nlh)
1207 {
1208 u32 seq;
1209 void *data;
1210 int data_len;
1211 int err;
1212 struct audit_buffer *ab;
1213 u16 msg_type = nlh->nlmsg_type;
1214 struct audit_sig_info *sig_data;
1215 char *ctx = NULL;
1216 u32 len;
1217
1218 err = audit_netlink_ok(skb, msg_type);
1219 if (err)
1220 return err;
1221
1222 seq = nlh->nlmsg_seq;
1223 data = nlmsg_data(nlh);
1224 data_len = nlmsg_len(nlh);
1225
1226 switch (msg_type) {
1227 case AUDIT_GET: {
1228 struct audit_status s;
1229 memset(&s, 0, sizeof(s));
1230 s.enabled = audit_enabled;
1231 s.failure = audit_failure;
1232
1233
1234 s.pid = auditd_pid_vnr();
1235 s.rate_limit = audit_rate_limit;
1236 s.backlog_limit = audit_backlog_limit;
1237 s.lost = atomic_read(&audit_lost);
1238 s.backlog = skb_queue_len(&audit_queue);
1239 s.feature_bitmap = AUDIT_FEATURE_BITMAP_ALL;
1240 s.backlog_wait_time = audit_backlog_wait_time;
1241 s.backlog_wait_time_actual = atomic_read(&audit_backlog_wait_time_actual);
1242 audit_send_reply(skb, seq, AUDIT_GET, 0, 0, &s, sizeof(s));
1243 break;
1244 }
1245 case AUDIT_SET: {
1246 struct audit_status s;
1247 memset(&s, 0, sizeof(s));
1248
1249 memcpy(&s, data, min_t(size_t, sizeof(s), data_len));
1250 if (s.mask & AUDIT_STATUS_ENABLED) {
1251 err = audit_set_enabled(s.enabled);
1252 if (err < 0)
1253 return err;
1254 }
1255 if (s.mask & AUDIT_STATUS_FAILURE) {
1256 err = audit_set_failure(s.failure);
1257 if (err < 0)
1258 return err;
1259 }
1260 if (s.mask & AUDIT_STATUS_PID) {
1261
1262
1263
1264
1265
1266
1267 pid_t new_pid = s.pid;
1268 pid_t auditd_pid;
1269 struct pid *req_pid = task_tgid(current);
1270
1271
1272
1273 if (new_pid && (new_pid != pid_vnr(req_pid)))
1274 return -EINVAL;
1275
1276
1277 audit_replace(req_pid);
1278
1279 auditd_pid = auditd_pid_vnr();
1280 if (auditd_pid) {
1281
1282 if (new_pid) {
1283 audit_log_config_change("audit_pid",
1284 new_pid, auditd_pid, 0);
1285 return -EEXIST;
1286 }
1287
1288 if (pid_vnr(req_pid) != auditd_pid) {
1289 audit_log_config_change("audit_pid",
1290 new_pid, auditd_pid, 0);
1291 return -EACCES;
1292 }
1293 }
1294
1295 if (new_pid) {
1296
1297 err = auditd_set(req_pid,
1298 NETLINK_CB(skb).portid,
1299 sock_net(NETLINK_CB(skb).sk));
1300 if (audit_enabled != AUDIT_OFF)
1301 audit_log_config_change("audit_pid",
1302 new_pid,
1303 auditd_pid,
1304 err ? 0 : 1);
1305 if (err)
1306 return err;
1307
1308
1309 wake_up_interruptible(&kauditd_wait);
1310 } else {
1311 if (audit_enabled != AUDIT_OFF)
1312 audit_log_config_change("audit_pid",
1313 new_pid,
1314 auditd_pid, 1);
1315
1316
1317 auditd_reset(NULL);
1318 }
1319 }
1320 if (s.mask & AUDIT_STATUS_RATE_LIMIT) {
1321 err = audit_set_rate_limit(s.rate_limit);
1322 if (err < 0)
1323 return err;
1324 }
1325 if (s.mask & AUDIT_STATUS_BACKLOG_LIMIT) {
1326 err = audit_set_backlog_limit(s.backlog_limit);
1327 if (err < 0)
1328 return err;
1329 }
1330 if (s.mask & AUDIT_STATUS_BACKLOG_WAIT_TIME) {
1331 if (sizeof(s) > (size_t)nlh->nlmsg_len)
1332 return -EINVAL;
1333 if (s.backlog_wait_time > 10*AUDIT_BACKLOG_WAIT_TIME)
1334 return -EINVAL;
1335 err = audit_set_backlog_wait_time(s.backlog_wait_time);
1336 if (err < 0)
1337 return err;
1338 }
1339 if (s.mask == AUDIT_STATUS_LOST) {
1340 u32 lost = atomic_xchg(&audit_lost, 0);
1341
1342 audit_log_config_change("lost", 0, lost, 1);
1343 return lost;
1344 }
1345 if (s.mask == AUDIT_STATUS_BACKLOG_WAIT_TIME_ACTUAL) {
1346 u32 actual = atomic_xchg(&audit_backlog_wait_time_actual, 0);
1347
1348 audit_log_config_change("backlog_wait_time_actual", 0, actual, 1);
1349 return actual;
1350 }
1351 break;
1352 }
1353 case AUDIT_GET_FEATURE:
1354 err = audit_get_feature(skb);
1355 if (err)
1356 return err;
1357 break;
1358 case AUDIT_SET_FEATURE:
1359 if (data_len < sizeof(struct audit_features))
1360 return -EINVAL;
1361 err = audit_set_feature(data);
1362 if (err)
1363 return err;
1364 break;
1365 case AUDIT_USER:
1366 case AUDIT_FIRST_USER_MSG ... AUDIT_LAST_USER_MSG:
1367 case AUDIT_FIRST_USER_MSG2 ... AUDIT_LAST_USER_MSG2:
1368 if (!audit_enabled && msg_type != AUDIT_USER_AVC)
1369 return 0;
1370
1371 if (data_len < 2)
1372 return -EINVAL;
1373
1374 err = audit_filter(msg_type, AUDIT_FILTER_USER);
1375 if (err == 1) {
1376 char *str = data;
1377
1378 err = 0;
1379 if (msg_type == AUDIT_USER_TTY) {
1380 err = tty_audit_push();
1381 if (err)
1382 break;
1383 }
1384 audit_log_user_recv_msg(&ab, msg_type);
1385 if (msg_type != AUDIT_USER_TTY) {
1386
1387 str[data_len - 1] = '\0';
1388 audit_log_format(ab, " msg='%.*s'",
1389 AUDIT_MESSAGE_TEXT_MAX,
1390 str);
1391 } else {
1392 audit_log_format(ab, " data=");
1393 if (str[data_len - 1] == '\0')
1394 data_len--;
1395 audit_log_n_untrustedstring(ab, str, data_len);
1396 }
1397 audit_log_end(ab);
1398 }
1399 break;
1400 case AUDIT_ADD_RULE:
1401 case AUDIT_DEL_RULE:
1402 if (data_len < sizeof(struct audit_rule_data))
1403 return -EINVAL;
1404 if (audit_enabled == AUDIT_LOCKED) {
1405 audit_log_common_recv_msg(audit_context(), &ab,
1406 AUDIT_CONFIG_CHANGE);
1407 audit_log_format(ab, " op=%s audit_enabled=%d res=0",
1408 msg_type == AUDIT_ADD_RULE ?
1409 "add_rule" : "remove_rule",
1410 audit_enabled);
1411 audit_log_end(ab);
1412 return -EPERM;
1413 }
1414 err = audit_rule_change(msg_type, seq, data, data_len);
1415 break;
1416 case AUDIT_LIST_RULES:
1417 err = audit_list_rules_send(skb, seq);
1418 break;
1419 case AUDIT_TRIM:
1420 audit_trim_trees();
1421 audit_log_common_recv_msg(audit_context(), &ab,
1422 AUDIT_CONFIG_CHANGE);
1423 audit_log_format(ab, " op=trim res=1");
1424 audit_log_end(ab);
1425 break;
1426 case AUDIT_MAKE_EQUIV: {
1427 void *bufp = data;
1428 u32 sizes[2];
1429 size_t msglen = data_len;
1430 char *old, *new;
1431
1432 err = -EINVAL;
1433 if (msglen < 2 * sizeof(u32))
1434 break;
1435 memcpy(sizes, bufp, 2 * sizeof(u32));
1436 bufp += 2 * sizeof(u32);
1437 msglen -= 2 * sizeof(u32);
1438 old = audit_unpack_string(&bufp, &msglen, sizes[0]);
1439 if (IS_ERR(old)) {
1440 err = PTR_ERR(old);
1441 break;
1442 }
1443 new = audit_unpack_string(&bufp, &msglen, sizes[1]);
1444 if (IS_ERR(new)) {
1445 err = PTR_ERR(new);
1446 kfree(old);
1447 break;
1448 }
1449
1450 err = audit_tag_tree(old, new);
1451
1452 audit_log_common_recv_msg(audit_context(), &ab,
1453 AUDIT_CONFIG_CHANGE);
1454 audit_log_format(ab, " op=make_equiv old=");
1455 audit_log_untrustedstring(ab, old);
1456 audit_log_format(ab, " new=");
1457 audit_log_untrustedstring(ab, new);
1458 audit_log_format(ab, " res=%d", !err);
1459 audit_log_end(ab);
1460 kfree(old);
1461 kfree(new);
1462 break;
1463 }
1464 case AUDIT_SIGNAL_INFO:
1465 len = 0;
1466 if (audit_sig_sid) {
1467 err = security_secid_to_secctx(audit_sig_sid, &ctx, &len);
1468 if (err)
1469 return err;
1470 }
1471 sig_data = kmalloc(struct_size(sig_data, ctx, len), GFP_KERNEL);
1472 if (!sig_data) {
1473 if (audit_sig_sid)
1474 security_release_secctx(ctx, len);
1475 return -ENOMEM;
1476 }
1477 sig_data->uid = from_kuid(&init_user_ns, audit_sig_uid);
1478 sig_data->pid = audit_sig_pid;
1479 if (audit_sig_sid) {
1480 memcpy(sig_data->ctx, ctx, len);
1481 security_release_secctx(ctx, len);
1482 }
1483 audit_send_reply(skb, seq, AUDIT_SIGNAL_INFO, 0, 0,
1484 sig_data, struct_size(sig_data, ctx, len));
1485 kfree(sig_data);
1486 break;
1487 case AUDIT_TTY_GET: {
1488 struct audit_tty_status s;
1489 unsigned int t;
1490
1491 t = READ_ONCE(current->signal->audit_tty);
1492 s.enabled = t & AUDIT_TTY_ENABLE;
1493 s.log_passwd = !!(t & AUDIT_TTY_LOG_PASSWD);
1494
1495 audit_send_reply(skb, seq, AUDIT_TTY_GET, 0, 0, &s, sizeof(s));
1496 break;
1497 }
1498 case AUDIT_TTY_SET: {
1499 struct audit_tty_status s, old;
1500 struct audit_buffer *ab;
1501 unsigned int t;
1502
1503 memset(&s, 0, sizeof(s));
1504
1505 memcpy(&s, data, min_t(size_t, sizeof(s), data_len));
1506
1507 if ((s.enabled != 0 && s.enabled != 1) ||
1508 (s.log_passwd != 0 && s.log_passwd != 1))
1509 err = -EINVAL;
1510
1511 if (err)
1512 t = READ_ONCE(current->signal->audit_tty);
1513 else {
1514 t = s.enabled | (-s.log_passwd & AUDIT_TTY_LOG_PASSWD);
1515 t = xchg(¤t->signal->audit_tty, t);
1516 }
1517 old.enabled = t & AUDIT_TTY_ENABLE;
1518 old.log_passwd = !!(t & AUDIT_TTY_LOG_PASSWD);
1519
1520 audit_log_common_recv_msg(audit_context(), &ab,
1521 AUDIT_CONFIG_CHANGE);
1522 audit_log_format(ab, " op=tty_set old-enabled=%d new-enabled=%d"
1523 " old-log_passwd=%d new-log_passwd=%d res=%d",
1524 old.enabled, s.enabled, old.log_passwd,
1525 s.log_passwd, !err);
1526 audit_log_end(ab);
1527 break;
1528 }
1529 default:
1530 err = -EINVAL;
1531 break;
1532 }
1533
1534 return err < 0 ? err : 0;
1535 }
1536
1537
1538
1539
1540
1541
1542
1543
1544 static void audit_receive(struct sk_buff *skb)
1545 {
1546 struct nlmsghdr *nlh;
1547
1548
1549
1550
1551 int len;
1552 int err;
1553
1554 nlh = nlmsg_hdr(skb);
1555 len = skb->len;
1556
1557 audit_ctl_lock();
1558 while (nlmsg_ok(nlh, len)) {
1559 err = audit_receive_msg(skb, nlh);
1560
1561 if (err || (nlh->nlmsg_flags & NLM_F_ACK))
1562 netlink_ack(skb, nlh, err, NULL);
1563
1564 nlh = nlmsg_next(nlh, &len);
1565 }
1566 audit_ctl_unlock();
1567
1568
1569 if (audit_backlog_limit &&
1570 (skb_queue_len(&audit_queue) > audit_backlog_limit)) {
1571 DECLARE_WAITQUEUE(wait, current);
1572
1573
1574 wake_up_interruptible(&kauditd_wait);
1575
1576 add_wait_queue_exclusive(&audit_backlog_wait, &wait);
1577 set_current_state(TASK_UNINTERRUPTIBLE);
1578 schedule_timeout(audit_backlog_wait_time);
1579 remove_wait_queue(&audit_backlog_wait, &wait);
1580 }
1581 }
1582
1583
1584 static void audit_log_multicast(int group, const char *op, int err)
1585 {
1586 const struct cred *cred;
1587 struct tty_struct *tty;
1588 char comm[sizeof(current->comm)];
1589 struct audit_buffer *ab;
1590
1591 if (!audit_enabled)
1592 return;
1593
1594 ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_EVENT_LISTENER);
1595 if (!ab)
1596 return;
1597
1598 cred = current_cred();
1599 tty = audit_get_tty();
1600 audit_log_format(ab, "pid=%u uid=%u auid=%u tty=%s ses=%u",
1601 task_pid_nr(current),
1602 from_kuid(&init_user_ns, cred->uid),
1603 from_kuid(&init_user_ns, audit_get_loginuid(current)),
1604 tty ? tty_name(tty) : "(none)",
1605 audit_get_sessionid(current));
1606 audit_put_tty(tty);
1607 audit_log_task_context(ab);
1608 audit_log_format(ab, " comm=");
1609 audit_log_untrustedstring(ab, get_task_comm(comm, current));
1610 audit_log_d_path_exe(ab, current->mm);
1611 audit_log_format(ab, " nl-mcgrp=%d op=%s res=%d", group, op, !err);
1612 audit_log_end(ab);
1613 }
1614
1615
1616 static int audit_multicast_bind(struct net *net, int group)
1617 {
1618 int err = 0;
1619
1620 if (!capable(CAP_AUDIT_READ))
1621 err = -EPERM;
1622 audit_log_multicast(group, "connect", err);
1623 return err;
1624 }
1625
1626 static void audit_multicast_unbind(struct net *net, int group)
1627 {
1628 audit_log_multicast(group, "disconnect", 0);
1629 }
1630
1631 static int __net_init audit_net_init(struct net *net)
1632 {
1633 struct netlink_kernel_cfg cfg = {
1634 .input = audit_receive,
1635 .bind = audit_multicast_bind,
1636 .unbind = audit_multicast_unbind,
1637 .flags = NL_CFG_F_NONROOT_RECV,
1638 .groups = AUDIT_NLGRP_MAX,
1639 };
1640
1641 struct audit_net *aunet = net_generic(net, audit_net_id);
1642
1643 aunet->sk = netlink_kernel_create(net, NETLINK_AUDIT, &cfg);
1644 if (aunet->sk == NULL) {
1645 audit_panic("cannot initialize netlink socket in namespace");
1646 return -ENOMEM;
1647 }
1648
1649 aunet->sk->sk_sndtimeo = HZ / 10;
1650
1651 return 0;
1652 }
1653
1654 static void __net_exit audit_net_exit(struct net *net)
1655 {
1656 struct audit_net *aunet = net_generic(net, audit_net_id);
1657
1658
1659
1660
1661
1662
1663
1664 netlink_kernel_release(aunet->sk);
1665 }
1666
1667 static struct pernet_operations audit_net_ops __net_initdata = {
1668 .init = audit_net_init,
1669 .exit = audit_net_exit,
1670 .id = &audit_net_id,
1671 .size = sizeof(struct audit_net),
1672 };
1673
1674
1675 static int __init audit_init(void)
1676 {
1677 int i;
1678
1679 if (audit_initialized == AUDIT_DISABLED)
1680 return 0;
1681
1682 audit_buffer_cache = kmem_cache_create("audit_buffer",
1683 sizeof(struct audit_buffer),
1684 0, SLAB_PANIC, NULL);
1685
1686 skb_queue_head_init(&audit_queue);
1687 skb_queue_head_init(&audit_retry_queue);
1688 skb_queue_head_init(&audit_hold_queue);
1689
1690 for (i = 0; i < AUDIT_INODE_BUCKETS; i++)
1691 INIT_LIST_HEAD(&audit_inode_hash[i]);
1692
1693 mutex_init(&audit_cmd_mutex.lock);
1694 audit_cmd_mutex.owner = NULL;
1695
1696 pr_info("initializing netlink subsys (%s)\n",
1697 audit_default ? "enabled" : "disabled");
1698 register_pernet_subsys(&audit_net_ops);
1699
1700 audit_initialized = AUDIT_INITIALIZED;
1701
1702 kauditd_task = kthread_run(kauditd_thread, NULL, "kauditd");
1703 if (IS_ERR(kauditd_task)) {
1704 int err = PTR_ERR(kauditd_task);
1705 panic("audit: failed to start the kauditd thread (%d)\n", err);
1706 }
1707
1708 audit_log(NULL, GFP_KERNEL, AUDIT_KERNEL,
1709 "state=initialized audit_enabled=%u res=1",
1710 audit_enabled);
1711
1712 return 0;
1713 }
1714 postcore_initcall(audit_init);
1715
1716
1717
1718
1719
1720 static int __init audit_enable(char *str)
1721 {
1722 if (!strcasecmp(str, "off") || !strcmp(str, "0"))
1723 audit_default = AUDIT_OFF;
1724 else if (!strcasecmp(str, "on") || !strcmp(str, "1"))
1725 audit_default = AUDIT_ON;
1726 else {
1727 pr_err("audit: invalid 'audit' parameter value (%s)\n", str);
1728 audit_default = AUDIT_ON;
1729 }
1730
1731 if (audit_default == AUDIT_OFF)
1732 audit_initialized = AUDIT_DISABLED;
1733 if (audit_set_enabled(audit_default))
1734 pr_err("audit: error setting audit state (%d)\n",
1735 audit_default);
1736
1737 pr_info("%s\n", audit_default ?
1738 "enabled (after initialization)" : "disabled (until reboot)");
1739
1740 return 1;
1741 }
1742 __setup("audit=", audit_enable);
1743
1744
1745
1746 static int __init audit_backlog_limit_set(char *str)
1747 {
1748 u32 audit_backlog_limit_arg;
1749
1750 pr_info("audit_backlog_limit: ");
1751 if (kstrtouint(str, 0, &audit_backlog_limit_arg)) {
1752 pr_cont("using default of %u, unable to parse %s\n",
1753 audit_backlog_limit, str);
1754 return 1;
1755 }
1756
1757 audit_backlog_limit = audit_backlog_limit_arg;
1758 pr_cont("%d\n", audit_backlog_limit);
1759
1760 return 1;
1761 }
1762 __setup("audit_backlog_limit=", audit_backlog_limit_set);
1763
1764 static void audit_buffer_free(struct audit_buffer *ab)
1765 {
1766 if (!ab)
1767 return;
1768
1769 kfree_skb(ab->skb);
1770 kmem_cache_free(audit_buffer_cache, ab);
1771 }
1772
1773 static struct audit_buffer *audit_buffer_alloc(struct audit_context *ctx,
1774 gfp_t gfp_mask, int type)
1775 {
1776 struct audit_buffer *ab;
1777
1778 ab = kmem_cache_alloc(audit_buffer_cache, gfp_mask);
1779 if (!ab)
1780 return NULL;
1781
1782 ab->skb = nlmsg_new(AUDIT_BUFSIZ, gfp_mask);
1783 if (!ab->skb)
1784 goto err;
1785 if (!nlmsg_put(ab->skb, 0, 0, type, 0, 0))
1786 goto err;
1787
1788 ab->ctx = ctx;
1789 ab->gfp_mask = gfp_mask;
1790
1791 return ab;
1792
1793 err:
1794 audit_buffer_free(ab);
1795 return NULL;
1796 }
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815 unsigned int audit_serial(void)
1816 {
1817 static atomic_t serial = ATOMIC_INIT(0);
1818
1819 return atomic_inc_return(&serial);
1820 }
1821
1822 static inline void audit_get_stamp(struct audit_context *ctx,
1823 struct timespec64 *t, unsigned int *serial)
1824 {
1825 if (!ctx || !auditsc_get_stamp(ctx, t, serial)) {
1826 ktime_get_coarse_real_ts64(t);
1827 *serial = audit_serial();
1828 }
1829 }
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840
1841
1842
1843
1844
1845
1846 struct audit_buffer *audit_log_start(struct audit_context *ctx, gfp_t gfp_mask,
1847 int type)
1848 {
1849 struct audit_buffer *ab;
1850 struct timespec64 t;
1851 unsigned int serial;
1852
1853 if (audit_initialized != AUDIT_INITIALIZED)
1854 return NULL;
1855
1856 if (unlikely(!audit_filter(type, AUDIT_FILTER_EXCLUDE)))
1857 return NULL;
1858
1859
1860
1861
1862
1863
1864
1865
1866
1867
1868 if (!(auditd_test_task(current) || audit_ctl_owner_current())) {
1869 long stime = audit_backlog_wait_time;
1870
1871 while (audit_backlog_limit &&
1872 (skb_queue_len(&audit_queue) > audit_backlog_limit)) {
1873
1874 wake_up_interruptible(&kauditd_wait);
1875
1876
1877
1878 if (gfpflags_allow_blocking(gfp_mask) && (stime > 0)) {
1879 long rtime = stime;
1880
1881 DECLARE_WAITQUEUE(wait, current);
1882
1883 add_wait_queue_exclusive(&audit_backlog_wait,
1884 &wait);
1885 set_current_state(TASK_UNINTERRUPTIBLE);
1886 stime = schedule_timeout(rtime);
1887 atomic_add(rtime - stime, &audit_backlog_wait_time_actual);
1888 remove_wait_queue(&audit_backlog_wait, &wait);
1889 } else {
1890 if (audit_rate_check() && printk_ratelimit())
1891 pr_warn("audit_backlog=%d > audit_backlog_limit=%d\n",
1892 skb_queue_len(&audit_queue),
1893 audit_backlog_limit);
1894 audit_log_lost("backlog limit exceeded");
1895 return NULL;
1896 }
1897 }
1898 }
1899
1900 ab = audit_buffer_alloc(ctx, gfp_mask, type);
1901 if (!ab) {
1902 audit_log_lost("out of memory in audit_log_start");
1903 return NULL;
1904 }
1905
1906 audit_get_stamp(ab->ctx, &t, &serial);
1907
1908 if (ctx)
1909 ctx->dummy = 0;
1910 audit_log_format(ab, "audit(%llu.%03lu:%u): ",
1911 (unsigned long long)t.tv_sec, t.tv_nsec/1000000, serial);
1912
1913 return ab;
1914 }
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924 static inline int audit_expand(struct audit_buffer *ab, int extra)
1925 {
1926 struct sk_buff *skb = ab->skb;
1927 int oldtail = skb_tailroom(skb);
1928 int ret = pskb_expand_head(skb, 0, extra, ab->gfp_mask);
1929 int newtail = skb_tailroom(skb);
1930
1931 if (ret < 0) {
1932 audit_log_lost("out of memory in audit_expand");
1933 return 0;
1934 }
1935
1936 skb->truesize += newtail - oldtail;
1937 return newtail;
1938 }
1939
1940
1941
1942
1943
1944
1945
1946 static void audit_log_vformat(struct audit_buffer *ab, const char *fmt,
1947 va_list args)
1948 {
1949 int len, avail;
1950 struct sk_buff *skb;
1951 va_list args2;
1952
1953 if (!ab)
1954 return;
1955
1956 BUG_ON(!ab->skb);
1957 skb = ab->skb;
1958 avail = skb_tailroom(skb);
1959 if (avail == 0) {
1960 avail = audit_expand(ab, AUDIT_BUFSIZ);
1961 if (!avail)
1962 goto out;
1963 }
1964 va_copy(args2, args);
1965 len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args);
1966 if (len >= avail) {
1967
1968
1969
1970 avail = audit_expand(ab,
1971 max_t(unsigned, AUDIT_BUFSIZ, 1+len-avail));
1972 if (!avail)
1973 goto out_va_end;
1974 len = vsnprintf(skb_tail_pointer(skb), avail, fmt, args2);
1975 }
1976 if (len > 0)
1977 skb_put(skb, len);
1978 out_va_end:
1979 va_end(args2);
1980 out:
1981 return;
1982 }
1983
1984
1985
1986
1987
1988
1989
1990
1991
1992 void audit_log_format(struct audit_buffer *ab, const char *fmt, ...)
1993 {
1994 va_list args;
1995
1996 if (!ab)
1997 return;
1998 va_start(args, fmt);
1999 audit_log_vformat(ab, fmt, args);
2000 va_end(args);
2001 }
2002
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014 void audit_log_n_hex(struct audit_buffer *ab, const unsigned char *buf,
2015 size_t len)
2016 {
2017 int i, avail, new_len;
2018 unsigned char *ptr;
2019 struct sk_buff *skb;
2020
2021 if (!ab)
2022 return;
2023
2024 BUG_ON(!ab->skb);
2025 skb = ab->skb;
2026 avail = skb_tailroom(skb);
2027 new_len = len<<1;
2028 if (new_len >= avail) {
2029
2030 new_len = AUDIT_BUFSIZ*(((new_len-avail)/AUDIT_BUFSIZ) + 1);
2031 avail = audit_expand(ab, new_len);
2032 if (!avail)
2033 return;
2034 }
2035
2036 ptr = skb_tail_pointer(skb);
2037 for (i = 0; i < len; i++)
2038 ptr = hex_byte_pack_upper(ptr, buf[i]);
2039 *ptr = 0;
2040 skb_put(skb, len << 1);
2041 }
2042
2043
2044
2045
2046
2047 void audit_log_n_string(struct audit_buffer *ab, const char *string,
2048 size_t slen)
2049 {
2050 int avail, new_len;
2051 unsigned char *ptr;
2052 struct sk_buff *skb;
2053
2054 if (!ab)
2055 return;
2056
2057 BUG_ON(!ab->skb);
2058 skb = ab->skb;
2059 avail = skb_tailroom(skb);
2060 new_len = slen + 3;
2061 if (new_len > avail) {
2062 avail = audit_expand(ab, new_len);
2063 if (!avail)
2064 return;
2065 }
2066 ptr = skb_tail_pointer(skb);
2067 *ptr++ = '"';
2068 memcpy(ptr, string, slen);
2069 ptr += slen;
2070 *ptr++ = '"';
2071 *ptr = 0;
2072 skb_put(skb, slen + 2);
2073 }
2074
2075
2076
2077
2078
2079
2080 bool audit_string_contains_control(const char *string, size_t len)
2081 {
2082 const unsigned char *p;
2083 for (p = string; p < (const unsigned char *)string + len; p++) {
2084 if (*p == '"' || *p < 0x21 || *p > 0x7e)
2085 return true;
2086 }
2087 return false;
2088 }
2089
2090
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104 void audit_log_n_untrustedstring(struct audit_buffer *ab, const char *string,
2105 size_t len)
2106 {
2107 if (audit_string_contains_control(string, len))
2108 audit_log_n_hex(ab, string, len);
2109 else
2110 audit_log_n_string(ab, string, len);
2111 }
2112
2113
2114
2115
2116
2117
2118
2119
2120
2121 void audit_log_untrustedstring(struct audit_buffer *ab, const char *string)
2122 {
2123 audit_log_n_untrustedstring(ab, string, strlen(string));
2124 }
2125
2126
2127 void audit_log_d_path(struct audit_buffer *ab, const char *prefix,
2128 const struct path *path)
2129 {
2130 char *p, *pathname;
2131
2132 if (prefix)
2133 audit_log_format(ab, "%s", prefix);
2134
2135
2136 pathname = kmalloc(PATH_MAX+11, ab->gfp_mask);
2137 if (!pathname) {
2138 audit_log_format(ab, "\"<no_memory>\"");
2139 return;
2140 }
2141 p = d_path(path, pathname, PATH_MAX+11);
2142 if (IS_ERR(p)) {
2143
2144 audit_log_format(ab, "\"<too_long>\"");
2145 } else
2146 audit_log_untrustedstring(ab, p);
2147 kfree(pathname);
2148 }
2149
2150 void audit_log_session_info(struct audit_buffer *ab)
2151 {
2152 unsigned int sessionid = audit_get_sessionid(current);
2153 uid_t auid = from_kuid(&init_user_ns, audit_get_loginuid(current));
2154
2155 audit_log_format(ab, "auid=%u ses=%u", auid, sessionid);
2156 }
2157
2158 void audit_log_key(struct audit_buffer *ab, char *key)
2159 {
2160 audit_log_format(ab, " key=");
2161 if (key)
2162 audit_log_untrustedstring(ab, key);
2163 else
2164 audit_log_format(ab, "(null)");
2165 }
2166
2167 int audit_log_task_context(struct audit_buffer *ab)
2168 {
2169 char *ctx = NULL;
2170 unsigned len;
2171 int error;
2172 u32 sid;
2173
2174 security_current_getsecid_subj(&sid);
2175 if (!sid)
2176 return 0;
2177
2178 error = security_secid_to_secctx(sid, &ctx, &len);
2179 if (error) {
2180 if (error != -EINVAL)
2181 goto error_path;
2182 return 0;
2183 }
2184
2185 audit_log_format(ab, " subj=%s", ctx);
2186 security_release_secctx(ctx, len);
2187 return 0;
2188
2189 error_path:
2190 audit_panic("error in audit_log_task_context");
2191 return error;
2192 }
2193 EXPORT_SYMBOL(audit_log_task_context);
2194
2195 void audit_log_d_path_exe(struct audit_buffer *ab,
2196 struct mm_struct *mm)
2197 {
2198 struct file *exe_file;
2199
2200 if (!mm)
2201 goto out_null;
2202
2203 exe_file = get_mm_exe_file(mm);
2204 if (!exe_file)
2205 goto out_null;
2206
2207 audit_log_d_path(ab, " exe=", &exe_file->f_path);
2208 fput(exe_file);
2209 return;
2210 out_null:
2211 audit_log_format(ab, " exe=(null)");
2212 }
2213
2214 struct tty_struct *audit_get_tty(void)
2215 {
2216 struct tty_struct *tty = NULL;
2217 unsigned long flags;
2218
2219 spin_lock_irqsave(¤t->sighand->siglock, flags);
2220 if (current->signal)
2221 tty = tty_kref_get(current->signal->tty);
2222 spin_unlock_irqrestore(¤t->sighand->siglock, flags);
2223 return tty;
2224 }
2225
2226 void audit_put_tty(struct tty_struct *tty)
2227 {
2228 tty_kref_put(tty);
2229 }
2230
2231 void audit_log_task_info(struct audit_buffer *ab)
2232 {
2233 const struct cred *cred;
2234 char comm[sizeof(current->comm)];
2235 struct tty_struct *tty;
2236
2237 if (!ab)
2238 return;
2239
2240 cred = current_cred();
2241 tty = audit_get_tty();
2242 audit_log_format(ab,
2243 " ppid=%d pid=%d auid=%u uid=%u gid=%u"
2244 " euid=%u suid=%u fsuid=%u"
2245 " egid=%u sgid=%u fsgid=%u tty=%s ses=%u",
2246 task_ppid_nr(current),
2247 task_tgid_nr(current),
2248 from_kuid(&init_user_ns, audit_get_loginuid(current)),
2249 from_kuid(&init_user_ns, cred->uid),
2250 from_kgid(&init_user_ns, cred->gid),
2251 from_kuid(&init_user_ns, cred->euid),
2252 from_kuid(&init_user_ns, cred->suid),
2253 from_kuid(&init_user_ns, cred->fsuid),
2254 from_kgid(&init_user_ns, cred->egid),
2255 from_kgid(&init_user_ns, cred->sgid),
2256 from_kgid(&init_user_ns, cred->fsgid),
2257 tty ? tty_name(tty) : "(none)",
2258 audit_get_sessionid(current));
2259 audit_put_tty(tty);
2260 audit_log_format(ab, " comm=");
2261 audit_log_untrustedstring(ab, get_task_comm(comm, current));
2262 audit_log_d_path_exe(ab, current->mm);
2263 audit_log_task_context(ab);
2264 }
2265 EXPORT_SYMBOL(audit_log_task_info);
2266
2267
2268
2269
2270
2271
2272 void audit_log_path_denied(int type, const char *operation)
2273 {
2274 struct audit_buffer *ab;
2275
2276 if (!audit_enabled || audit_dummy_context())
2277 return;
2278
2279
2280 ab = audit_log_start(audit_context(), GFP_KERNEL, type);
2281 if (!ab)
2282 return;
2283 audit_log_format(ab, "op=%s", operation);
2284 audit_log_task_info(ab);
2285 audit_log_format(ab, " res=0");
2286 audit_log_end(ab);
2287 }
2288
2289
2290 static atomic_t session_id = ATOMIC_INIT(0);
2291
2292 static int audit_set_loginuid_perm(kuid_t loginuid)
2293 {
2294
2295 if (!audit_loginuid_set(current))
2296 return 0;
2297
2298 if (is_audit_feature_set(AUDIT_FEATURE_LOGINUID_IMMUTABLE))
2299 return -EPERM;
2300
2301 if (!capable(CAP_AUDIT_CONTROL))
2302 return -EPERM;
2303
2304 if (is_audit_feature_set(AUDIT_FEATURE_ONLY_UNSET_LOGINUID)
2305 && uid_valid(loginuid))
2306 return -EPERM;
2307 return 0;
2308 }
2309
2310 static void audit_log_set_loginuid(kuid_t koldloginuid, kuid_t kloginuid,
2311 unsigned int oldsessionid,
2312 unsigned int sessionid, int rc)
2313 {
2314 struct audit_buffer *ab;
2315 uid_t uid, oldloginuid, loginuid;
2316 struct tty_struct *tty;
2317
2318 if (!audit_enabled)
2319 return;
2320
2321 ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_LOGIN);
2322 if (!ab)
2323 return;
2324
2325 uid = from_kuid(&init_user_ns, task_uid(current));
2326 oldloginuid = from_kuid(&init_user_ns, koldloginuid);
2327 loginuid = from_kuid(&init_user_ns, kloginuid);
2328 tty = audit_get_tty();
2329
2330 audit_log_format(ab, "pid=%d uid=%u", task_tgid_nr(current), uid);
2331 audit_log_task_context(ab);
2332 audit_log_format(ab, " old-auid=%u auid=%u tty=%s old-ses=%u ses=%u res=%d",
2333 oldloginuid, loginuid, tty ? tty_name(tty) : "(none)",
2334 oldsessionid, sessionid, !rc);
2335 audit_put_tty(tty);
2336 audit_log_end(ab);
2337 }
2338
2339
2340
2341
2342
2343
2344
2345
2346
2347 int audit_set_loginuid(kuid_t loginuid)
2348 {
2349 unsigned int oldsessionid, sessionid = AUDIT_SID_UNSET;
2350 kuid_t oldloginuid;
2351 int rc;
2352
2353 oldloginuid = audit_get_loginuid(current);
2354 oldsessionid = audit_get_sessionid(current);
2355
2356 rc = audit_set_loginuid_perm(loginuid);
2357 if (rc)
2358 goto out;
2359
2360
2361 if (uid_valid(loginuid)) {
2362 sessionid = (unsigned int)atomic_inc_return(&session_id);
2363 if (unlikely(sessionid == AUDIT_SID_UNSET))
2364 sessionid = (unsigned int)atomic_inc_return(&session_id);
2365 }
2366
2367 current->sessionid = sessionid;
2368 current->loginuid = loginuid;
2369 out:
2370 audit_log_set_loginuid(oldloginuid, loginuid, oldsessionid, sessionid, rc);
2371 return rc;
2372 }
2373
2374
2375
2376
2377
2378
2379
2380
2381
2382 int audit_signal_info(int sig, struct task_struct *t)
2383 {
2384 kuid_t uid = current_uid(), auid;
2385
2386 if (auditd_test_task(t) &&
2387 (sig == SIGTERM || sig == SIGHUP ||
2388 sig == SIGUSR1 || sig == SIGUSR2)) {
2389 audit_sig_pid = task_tgid_nr(current);
2390 auid = audit_get_loginuid(current);
2391 if (uid_valid(auid))
2392 audit_sig_uid = auid;
2393 else
2394 audit_sig_uid = uid;
2395 security_current_getsecid_subj(&audit_sig_sid);
2396 }
2397
2398 return audit_signal_info_syscall(t);
2399 }
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410 void audit_log_end(struct audit_buffer *ab)
2411 {
2412 struct sk_buff *skb;
2413 struct nlmsghdr *nlh;
2414
2415 if (!ab)
2416 return;
2417
2418 if (audit_rate_check()) {
2419 skb = ab->skb;
2420 ab->skb = NULL;
2421
2422
2423
2424 nlh = nlmsg_hdr(skb);
2425 nlh->nlmsg_len = skb->len - NLMSG_HDRLEN;
2426
2427
2428 skb_queue_tail(&audit_queue, skb);
2429 wake_up_interruptible(&kauditd_wait);
2430 } else
2431 audit_log_lost("rate limit exceeded");
2432
2433 audit_buffer_free(ab);
2434 }
2435
2436
2437
2438
2439
2440
2441
2442
2443
2444
2445
2446
2447
2448 void audit_log(struct audit_context *ctx, gfp_t gfp_mask, int type,
2449 const char *fmt, ...)
2450 {
2451 struct audit_buffer *ab;
2452 va_list args;
2453
2454 ab = audit_log_start(ctx, gfp_mask, type);
2455 if (ab) {
2456 va_start(args, fmt);
2457 audit_log_vformat(ab, fmt, args);
2458 va_end(args);
2459 audit_log_end(ab);
2460 }
2461 }
2462
2463 EXPORT_SYMBOL(audit_log_start);
2464 EXPORT_SYMBOL(audit_log_end);
2465 EXPORT_SYMBOL(audit_log_format);
2466 EXPORT_SYMBOL(audit_log);