~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/kernel/auditsc.c

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

Diff markup

Differences between /kernel/auditsc.c (Version linux-6.11.5) and /kernel/auditsc.c (Version linux-5.18.19)


  1 // SPDX-License-Identifier: GPL-2.0-or-later        1 // SPDX-License-Identifier: GPL-2.0-or-later
  2 /* auditsc.c -- System-call auditing support        2 /* auditsc.c -- System-call auditing support
  3  * Handles all system-call specific auditing f      3  * Handles all system-call specific auditing features.
  4  *                                                  4  *
  5  * Copyright 2003-2004 Red Hat Inc., Durham, N      5  * Copyright 2003-2004 Red Hat Inc., Durham, North Carolina.
  6  * Copyright 2005 Hewlett-Packard Development       6  * Copyright 2005 Hewlett-Packard Development Company, L.P.
  7  * Copyright (C) 2005, 2006 IBM Corporation         7  * Copyright (C) 2005, 2006 IBM Corporation
  8  * All Rights Reserved.                             8  * All Rights Reserved.
  9  *                                                  9  *
 10  * Written by Rickard E. (Rik) Faith <faith@re     10  * Written by Rickard E. (Rik) Faith <faith@redhat.com>
 11  *                                                 11  *
 12  * Many of the ideas implemented here are from     12  * Many of the ideas implemented here are from Stephen C. Tweedie,
 13  * especially the idea of avoiding a copy by u     13  * especially the idea of avoiding a copy by using getname.
 14  *                                                 14  *
 15  * The method for actual interception of sysca     15  * The method for actual interception of syscall entry and exit (not in
 16  * this file -- see entry.S) is based on a GPL     16  * this file -- see entry.S) is based on a GPL'd patch written by
 17  * okir@suse.de and Copyright 2003 SuSE Linux      17  * okir@suse.de and Copyright 2003 SuSE Linux AG.
 18  *                                                 18  *
 19  * POSIX message queue support added by George     19  * POSIX message queue support added by George Wilson <ltcgcw@us.ibm.com>,
 20  * 2006.                                           20  * 2006.
 21  *                                                 21  *
 22  * The support of additional filter rules comp     22  * The support of additional filter rules compares (>, <, >=, <=) was
 23  * added by Dustin Kirkland <dustin.kirkland@u     23  * added by Dustin Kirkland <dustin.kirkland@us.ibm.com>, 2005.
 24  *                                                 24  *
 25  * Modified by Amy Griffis <amy.griffis@hp.com     25  * Modified by Amy Griffis <amy.griffis@hp.com> to collect additional
 26  * filesystem information.                         26  * filesystem information.
 27  *                                                 27  *
 28  * Subject and object context labeling support     28  * Subject and object context labeling support added by <danjones@us.ibm.com>
 29  * and <dustin.kirkland@us.ibm.com> for LSPP c     29  * and <dustin.kirkland@us.ibm.com> for LSPP certification compliance.
 30  */                                                30  */
 31                                                    31 
 32 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt        32 #define pr_fmt(fmt) KBUILD_MODNAME ": " fmt
 33                                                    33 
 34 #include <linux/init.h>                            34 #include <linux/init.h>
 35 #include <asm/types.h>                             35 #include <asm/types.h>
 36 #include <linux/atomic.h>                          36 #include <linux/atomic.h>
 37 #include <linux/fs.h>                              37 #include <linux/fs.h>
 38 #include <linux/namei.h>                           38 #include <linux/namei.h>
 39 #include <linux/mm.h>                              39 #include <linux/mm.h>
 40 #include <linux/export.h>                          40 #include <linux/export.h>
 41 #include <linux/slab.h>                            41 #include <linux/slab.h>
 42 #include <linux/mount.h>                           42 #include <linux/mount.h>
 43 #include <linux/socket.h>                          43 #include <linux/socket.h>
 44 #include <linux/mqueue.h>                          44 #include <linux/mqueue.h>
 45 #include <linux/audit.h>                           45 #include <linux/audit.h>
 46 #include <linux/personality.h>                     46 #include <linux/personality.h>
 47 #include <linux/time.h>                            47 #include <linux/time.h>
 48 #include <linux/netlink.h>                         48 #include <linux/netlink.h>
 49 #include <linux/compiler.h>                        49 #include <linux/compiler.h>
 50 #include <asm/unistd.h>                            50 #include <asm/unistd.h>
 51 #include <linux/security.h>                        51 #include <linux/security.h>
 52 #include <linux/list.h>                            52 #include <linux/list.h>
 53 #include <linux/binfmts.h>                         53 #include <linux/binfmts.h>
 54 #include <linux/highmem.h>                         54 #include <linux/highmem.h>
 55 #include <linux/syscalls.h>                        55 #include <linux/syscalls.h>
 56 #include <asm/syscall.h>                           56 #include <asm/syscall.h>
 57 #include <linux/capability.h>                      57 #include <linux/capability.h>
 58 #include <linux/fs_struct.h>                       58 #include <linux/fs_struct.h>
 59 #include <linux/compat.h>                          59 #include <linux/compat.h>
 60 #include <linux/ctype.h>                           60 #include <linux/ctype.h>
 61 #include <linux/string.h>                          61 #include <linux/string.h>
 62 #include <linux/uaccess.h>                         62 #include <linux/uaccess.h>
 63 #include <linux/fsnotify_backend.h>                63 #include <linux/fsnotify_backend.h>
 64 #include <uapi/linux/limits.h>                     64 #include <uapi/linux/limits.h>
 65 #include <uapi/linux/netfilter/nf_tables.h>        65 #include <uapi/linux/netfilter/nf_tables.h>
 66 #include <uapi/linux/openat2.h> // struct open     66 #include <uapi/linux/openat2.h> // struct open_how
 67 #include <uapi/linux/fanotify.h>               << 
 68                                                    67 
 69 #include "audit.h"                                 68 #include "audit.h"
 70                                                    69 
 71 /* flags stating the success for a syscall */      70 /* flags stating the success for a syscall */
 72 #define AUDITSC_INVALID 0                          71 #define AUDITSC_INVALID 0
 73 #define AUDITSC_SUCCESS 1                          72 #define AUDITSC_SUCCESS 1
 74 #define AUDITSC_FAILURE 2                          73 #define AUDITSC_FAILURE 2
 75                                                    74 
 76 /* no execve audit message should be longer th     75 /* no execve audit message should be longer than this (userspace limits),
 77  * see the note near the top of audit_log_exec     76  * see the note near the top of audit_log_execve_info() about this value */
 78 #define MAX_EXECVE_AUDIT_LEN 7500                  77 #define MAX_EXECVE_AUDIT_LEN 7500
 79                                                    78 
 80 /* max length to print of cmdline/proctitle va     79 /* max length to print of cmdline/proctitle value during audit */
 81 #define MAX_PROCTITLE_AUDIT_LEN 128                80 #define MAX_PROCTITLE_AUDIT_LEN 128
 82                                                    81 
 83 /* number of audit rules */                        82 /* number of audit rules */
 84 int audit_n_rules;                                 83 int audit_n_rules;
 85                                                    84 
 86 /* determines whether we collect data for sign     85 /* determines whether we collect data for signals sent */
 87 int audit_signals;                                 86 int audit_signals;
 88                                                    87 
 89 struct audit_aux_data {                            88 struct audit_aux_data {
 90         struct audit_aux_data   *next;             89         struct audit_aux_data   *next;
 91         int                     type;              90         int                     type;
 92 };                                                 91 };
 93                                                    92 
 94 /* Number of target pids per aux struct. */        93 /* Number of target pids per aux struct. */
 95 #define AUDIT_AUX_PIDS  16                         94 #define AUDIT_AUX_PIDS  16
 96                                                    95 
 97 struct audit_aux_data_pids {                       96 struct audit_aux_data_pids {
 98         struct audit_aux_data   d;                 97         struct audit_aux_data   d;
 99         pid_t                   target_pid[AUD     98         pid_t                   target_pid[AUDIT_AUX_PIDS];
100         kuid_t                  target_auid[AU     99         kuid_t                  target_auid[AUDIT_AUX_PIDS];
101         kuid_t                  target_uid[AUD    100         kuid_t                  target_uid[AUDIT_AUX_PIDS];
102         unsigned int            target_session    101         unsigned int            target_sessionid[AUDIT_AUX_PIDS];
103         u32                     target_sid[AUD    102         u32                     target_sid[AUDIT_AUX_PIDS];
104         char                    target_comm[AU    103         char                    target_comm[AUDIT_AUX_PIDS][TASK_COMM_LEN];
105         int                     pid_count;        104         int                     pid_count;
106 };                                                105 };
107                                                   106 
108 struct audit_aux_data_bprm_fcaps {                107 struct audit_aux_data_bprm_fcaps {
109         struct audit_aux_data   d;                108         struct audit_aux_data   d;
110         struct audit_cap_data   fcap;             109         struct audit_cap_data   fcap;
111         unsigned int            fcap_ver;         110         unsigned int            fcap_ver;
112         struct audit_cap_data   old_pcap;         111         struct audit_cap_data   old_pcap;
113         struct audit_cap_data   new_pcap;         112         struct audit_cap_data   new_pcap;
114 };                                                113 };
115                                                   114 
116 struct audit_tree_refs {                          115 struct audit_tree_refs {
117         struct audit_tree_refs *next;             116         struct audit_tree_refs *next;
118         struct audit_chunk *c[31];                117         struct audit_chunk *c[31];
119 };                                                118 };
120                                                   119 
121 struct audit_nfcfgop_tab {                        120 struct audit_nfcfgop_tab {
122         enum audit_nfcfgop      op;               121         enum audit_nfcfgop      op;
123         const char              *s;               122         const char              *s;
124 };                                                123 };
125                                                   124 
126 static const struct audit_nfcfgop_tab audit_nf    125 static const struct audit_nfcfgop_tab audit_nfcfgs[] = {
127         { AUDIT_XT_OP_REGISTER,                   126         { AUDIT_XT_OP_REGISTER,                 "xt_register"              },
128         { AUDIT_XT_OP_REPLACE,                    127         { AUDIT_XT_OP_REPLACE,                  "xt_replace"               },
129         { AUDIT_XT_OP_UNREGISTER,                 128         { AUDIT_XT_OP_UNREGISTER,               "xt_unregister"            },
130         { AUDIT_NFT_OP_TABLE_REGISTER,            129         { AUDIT_NFT_OP_TABLE_REGISTER,          "nft_register_table"       },
131         { AUDIT_NFT_OP_TABLE_UNREGISTER,          130         { AUDIT_NFT_OP_TABLE_UNREGISTER,        "nft_unregister_table"     },
132         { AUDIT_NFT_OP_CHAIN_REGISTER,            131         { AUDIT_NFT_OP_CHAIN_REGISTER,          "nft_register_chain"       },
133         { AUDIT_NFT_OP_CHAIN_UNREGISTER,          132         { AUDIT_NFT_OP_CHAIN_UNREGISTER,        "nft_unregister_chain"     },
134         { AUDIT_NFT_OP_RULE_REGISTER,             133         { AUDIT_NFT_OP_RULE_REGISTER,           "nft_register_rule"        },
135         { AUDIT_NFT_OP_RULE_UNREGISTER,           134         { AUDIT_NFT_OP_RULE_UNREGISTER,         "nft_unregister_rule"      },
136         { AUDIT_NFT_OP_SET_REGISTER,              135         { AUDIT_NFT_OP_SET_REGISTER,            "nft_register_set"         },
137         { AUDIT_NFT_OP_SET_UNREGISTER,            136         { AUDIT_NFT_OP_SET_UNREGISTER,          "nft_unregister_set"       },
138         { AUDIT_NFT_OP_SETELEM_REGISTER,          137         { AUDIT_NFT_OP_SETELEM_REGISTER,        "nft_register_setelem"     },
139         { AUDIT_NFT_OP_SETELEM_UNREGISTER,        138         { AUDIT_NFT_OP_SETELEM_UNREGISTER,      "nft_unregister_setelem"   },
140         { AUDIT_NFT_OP_GEN_REGISTER,              139         { AUDIT_NFT_OP_GEN_REGISTER,            "nft_register_gen"         },
141         { AUDIT_NFT_OP_OBJ_REGISTER,              140         { AUDIT_NFT_OP_OBJ_REGISTER,            "nft_register_obj"         },
142         { AUDIT_NFT_OP_OBJ_UNREGISTER,            141         { AUDIT_NFT_OP_OBJ_UNREGISTER,          "nft_unregister_obj"       },
143         { AUDIT_NFT_OP_OBJ_RESET,                 142         { AUDIT_NFT_OP_OBJ_RESET,               "nft_reset_obj"            },
144         { AUDIT_NFT_OP_FLOWTABLE_REGISTER,        143         { AUDIT_NFT_OP_FLOWTABLE_REGISTER,      "nft_register_flowtable"   },
145         { AUDIT_NFT_OP_FLOWTABLE_UNREGISTER,      144         { AUDIT_NFT_OP_FLOWTABLE_UNREGISTER,    "nft_unregister_flowtable" },
146         { AUDIT_NFT_OP_SETELEM_RESET,          << 
147         { AUDIT_NFT_OP_RULE_RESET,             << 
148         { AUDIT_NFT_OP_INVALID,                   145         { AUDIT_NFT_OP_INVALID,                 "nft_invalid"              },
149 };                                                146 };
150                                                   147 
151 static int audit_match_perm(struct audit_conte    148 static int audit_match_perm(struct audit_context *ctx, int mask)
152 {                                                 149 {
153         unsigned n;                               150         unsigned n;
154                                                   151 
155         if (unlikely(!ctx))                       152         if (unlikely(!ctx))
156                 return 0;                         153                 return 0;
157         n = ctx->major;                           154         n = ctx->major;
158                                                   155 
159         switch (audit_classify_syscall(ctx->ar    156         switch (audit_classify_syscall(ctx->arch, n)) {
160         case AUDITSC_NATIVE:                      157         case AUDITSC_NATIVE:
161                 if ((mask & AUDIT_PERM_WRITE)     158                 if ((mask & AUDIT_PERM_WRITE) &&
162                      audit_match_class(AUDIT_C    159                      audit_match_class(AUDIT_CLASS_WRITE, n))
163                         return 1;                 160                         return 1;
164                 if ((mask & AUDIT_PERM_READ) &    161                 if ((mask & AUDIT_PERM_READ) &&
165                      audit_match_class(AUDIT_C    162                      audit_match_class(AUDIT_CLASS_READ, n))
166                         return 1;                 163                         return 1;
167                 if ((mask & AUDIT_PERM_ATTR) &    164                 if ((mask & AUDIT_PERM_ATTR) &&
168                      audit_match_class(AUDIT_C    165                      audit_match_class(AUDIT_CLASS_CHATTR, n))
169                         return 1;                 166                         return 1;
170                 return 0;                         167                 return 0;
171         case AUDITSC_COMPAT: /* 32bit on biarc    168         case AUDITSC_COMPAT: /* 32bit on biarch */
172                 if ((mask & AUDIT_PERM_WRITE)     169                 if ((mask & AUDIT_PERM_WRITE) &&
173                      audit_match_class(AUDIT_C    170                      audit_match_class(AUDIT_CLASS_WRITE_32, n))
174                         return 1;                 171                         return 1;
175                 if ((mask & AUDIT_PERM_READ) &    172                 if ((mask & AUDIT_PERM_READ) &&
176                      audit_match_class(AUDIT_C    173                      audit_match_class(AUDIT_CLASS_READ_32, n))
177                         return 1;                 174                         return 1;
178                 if ((mask & AUDIT_PERM_ATTR) &    175                 if ((mask & AUDIT_PERM_ATTR) &&
179                      audit_match_class(AUDIT_C    176                      audit_match_class(AUDIT_CLASS_CHATTR_32, n))
180                         return 1;                 177                         return 1;
181                 return 0;                         178                 return 0;
182         case AUDITSC_OPEN:                        179         case AUDITSC_OPEN:
183                 return mask & ACC_MODE(ctx->ar    180                 return mask & ACC_MODE(ctx->argv[1]);
184         case AUDITSC_OPENAT:                      181         case AUDITSC_OPENAT:
185                 return mask & ACC_MODE(ctx->ar    182                 return mask & ACC_MODE(ctx->argv[2]);
186         case AUDITSC_SOCKETCALL:                  183         case AUDITSC_SOCKETCALL:
187                 return ((mask & AUDIT_PERM_WRI    184                 return ((mask & AUDIT_PERM_WRITE) && ctx->argv[0] == SYS_BIND);
188         case AUDITSC_EXECVE:                      185         case AUDITSC_EXECVE:
189                 return mask & AUDIT_PERM_EXEC;    186                 return mask & AUDIT_PERM_EXEC;
190         case AUDITSC_OPENAT2:                     187         case AUDITSC_OPENAT2:
191                 return mask & ACC_MODE((u32)ct    188                 return mask & ACC_MODE((u32)ctx->openat2.flags);
192         default:                                  189         default:
193                 return 0;                         190                 return 0;
194         }                                         191         }
195 }                                                 192 }
196                                                   193 
197 static int audit_match_filetype(struct audit_c    194 static int audit_match_filetype(struct audit_context *ctx, int val)
198 {                                                 195 {
199         struct audit_names *n;                    196         struct audit_names *n;
200         umode_t mode = (umode_t)val;              197         umode_t mode = (umode_t)val;
201                                                   198 
202         if (unlikely(!ctx))                       199         if (unlikely(!ctx))
203                 return 0;                         200                 return 0;
204                                                   201 
205         list_for_each_entry(n, &ctx->names_lis    202         list_for_each_entry(n, &ctx->names_list, list) {
206                 if ((n->ino != AUDIT_INO_UNSET    203                 if ((n->ino != AUDIT_INO_UNSET) &&
207                     ((n->mode & S_IFMT) == mod    204                     ((n->mode & S_IFMT) == mode))
208                         return 1;                 205                         return 1;
209         }                                         206         }
210                                                   207 
211         return 0;                                 208         return 0;
212 }                                                 209 }
213                                                   210 
214 /*                                                211 /*
215  * We keep a linked list of fixed-sized (31 po    212  * We keep a linked list of fixed-sized (31 pointer) arrays of audit_chunk *;
216  * ->first_trees points to its beginning, ->tr    213  * ->first_trees points to its beginning, ->trees - to the current end of data.
217  * ->tree_count is the number of free entries     214  * ->tree_count is the number of free entries in array pointed to by ->trees.
218  * Original condition is (NULL, NULL, 0); as s    215  * Original condition is (NULL, NULL, 0); as soon as it grows we never revert to NULL,
219  * "empty" becomes (p, p, 31) afterwards.  We     216  * "empty" becomes (p, p, 31) afterwards.  We don't shrink the list (and seriously,
220  * it's going to remain 1-element for almost a    217  * it's going to remain 1-element for almost any setup) until we free context itself.
221  * References in it _are_ dropped - at the sam    218  * References in it _are_ dropped - at the same time we free/drop aux stuff.
222  */                                               219  */
223                                                   220 
224 static void audit_set_auditable(struct audit_c    221 static void audit_set_auditable(struct audit_context *ctx)
225 {                                                 222 {
226         if (!ctx->prio) {                         223         if (!ctx->prio) {
227                 ctx->prio = 1;                    224                 ctx->prio = 1;
228                 ctx->current_state = AUDIT_STA    225                 ctx->current_state = AUDIT_STATE_RECORD;
229         }                                         226         }
230 }                                                 227 }
231                                                   228 
232 static int put_tree_ref(struct audit_context *    229 static int put_tree_ref(struct audit_context *ctx, struct audit_chunk *chunk)
233 {                                                 230 {
234         struct audit_tree_refs *p = ctx->trees    231         struct audit_tree_refs *p = ctx->trees;
235         int left = ctx->tree_count;               232         int left = ctx->tree_count;
236                                                   233 
237         if (likely(left)) {                       234         if (likely(left)) {
238                 p->c[--left] = chunk;             235                 p->c[--left] = chunk;
239                 ctx->tree_count = left;           236                 ctx->tree_count = left;
240                 return 1;                         237                 return 1;
241         }                                         238         }
242         if (!p)                                   239         if (!p)
243                 return 0;                         240                 return 0;
244         p = p->next;                              241         p = p->next;
245         if (p) {                                  242         if (p) {
246                 p->c[30] = chunk;                 243                 p->c[30] = chunk;
247                 ctx->trees = p;                   244                 ctx->trees = p;
248                 ctx->tree_count = 30;             245                 ctx->tree_count = 30;
249                 return 1;                         246                 return 1;
250         }                                         247         }
251         return 0;                                 248         return 0;
252 }                                                 249 }
253                                                   250 
254 static int grow_tree_refs(struct audit_context    251 static int grow_tree_refs(struct audit_context *ctx)
255 {                                                 252 {
256         struct audit_tree_refs *p = ctx->trees    253         struct audit_tree_refs *p = ctx->trees;
257                                                   254 
258         ctx->trees = kzalloc(sizeof(struct aud    255         ctx->trees = kzalloc(sizeof(struct audit_tree_refs), GFP_KERNEL);
259         if (!ctx->trees) {                        256         if (!ctx->trees) {
260                 ctx->trees = p;                   257                 ctx->trees = p;
261                 return 0;                         258                 return 0;
262         }                                         259         }
263         if (p)                                    260         if (p)
264                 p->next = ctx->trees;             261                 p->next = ctx->trees;
265         else                                      262         else
266                 ctx->first_trees = ctx->trees;    263                 ctx->first_trees = ctx->trees;
267         ctx->tree_count = 31;                     264         ctx->tree_count = 31;
268         return 1;                                 265         return 1;
269 }                                                 266 }
270                                                   267 
271 static void unroll_tree_refs(struct audit_cont    268 static void unroll_tree_refs(struct audit_context *ctx,
272                       struct audit_tree_refs *    269                       struct audit_tree_refs *p, int count)
273 {                                                 270 {
274         struct audit_tree_refs *q;                271         struct audit_tree_refs *q;
275         int n;                                    272         int n;
276                                                   273 
277         if (!p) {                                 274         if (!p) {
278                 /* we started with empty chain    275                 /* we started with empty chain */
279                 p = ctx->first_trees;             276                 p = ctx->first_trees;
280                 count = 31;                       277                 count = 31;
281                 /* if the very first allocatio    278                 /* if the very first allocation has failed, nothing to do */
282                 if (!p)                           279                 if (!p)
283                         return;                   280                         return;
284         }                                         281         }
285         n = count;                                282         n = count;
286         for (q = p; q != ctx->trees; q = q->ne    283         for (q = p; q != ctx->trees; q = q->next, n = 31) {
287                 while (n--) {                     284                 while (n--) {
288                         audit_put_chunk(q->c[n    285                         audit_put_chunk(q->c[n]);
289                         q->c[n] = NULL;           286                         q->c[n] = NULL;
290                 }                                 287                 }
291         }                                         288         }
292         while (n-- > ctx->tree_count) {           289         while (n-- > ctx->tree_count) {
293                 audit_put_chunk(q->c[n]);         290                 audit_put_chunk(q->c[n]);
294                 q->c[n] = NULL;                   291                 q->c[n] = NULL;
295         }                                         292         }
296         ctx->trees = p;                           293         ctx->trees = p;
297         ctx->tree_count = count;                  294         ctx->tree_count = count;
298 }                                                 295 }
299                                                   296 
300 static void free_tree_refs(struct audit_contex    297 static void free_tree_refs(struct audit_context *ctx)
301 {                                                 298 {
302         struct audit_tree_refs *p, *q;            299         struct audit_tree_refs *p, *q;
303                                                   300 
304         for (p = ctx->first_trees; p; p = q) {    301         for (p = ctx->first_trees; p; p = q) {
305                 q = p->next;                      302                 q = p->next;
306                 kfree(p);                         303                 kfree(p);
307         }                                         304         }
308 }                                                 305 }
309                                                   306 
310 static int match_tree_refs(struct audit_contex    307 static int match_tree_refs(struct audit_context *ctx, struct audit_tree *tree)
311 {                                                 308 {
312         struct audit_tree_refs *p;                309         struct audit_tree_refs *p;
313         int n;                                    310         int n;
314                                                   311 
315         if (!tree)                                312         if (!tree)
316                 return 0;                         313                 return 0;
317         /* full ones */                           314         /* full ones */
318         for (p = ctx->first_trees; p != ctx->t    315         for (p = ctx->first_trees; p != ctx->trees; p = p->next) {
319                 for (n = 0; n < 31; n++)          316                 for (n = 0; n < 31; n++)
320                         if (audit_tree_match(p    317                         if (audit_tree_match(p->c[n], tree))
321                                 return 1;         318                                 return 1;
322         }                                         319         }
323         /* partial */                             320         /* partial */
324         if (p) {                                  321         if (p) {
325                 for (n = ctx->tree_count; n <     322                 for (n = ctx->tree_count; n < 31; n++)
326                         if (audit_tree_match(p    323                         if (audit_tree_match(p->c[n], tree))
327                                 return 1;         324                                 return 1;
328         }                                         325         }
329         return 0;                                 326         return 0;
330 }                                                 327 }
331                                                   328 
332 static int audit_compare_uid(kuid_t uid,          329 static int audit_compare_uid(kuid_t uid,
333                              struct audit_name    330                              struct audit_names *name,
334                              struct audit_fiel    331                              struct audit_field *f,
335                              struct audit_cont    332                              struct audit_context *ctx)
336 {                                                 333 {
337         struct audit_names *n;                    334         struct audit_names *n;
338         int rc;                                   335         int rc;
339                                                   336 
340         if (name) {                               337         if (name) {
341                 rc = audit_uid_comparator(uid,    338                 rc = audit_uid_comparator(uid, f->op, name->uid);
342                 if (rc)                           339                 if (rc)
343                         return rc;                340                         return rc;
344         }                                         341         }
345                                                   342 
346         if (ctx) {                                343         if (ctx) {
347                 list_for_each_entry(n, &ctx->n    344                 list_for_each_entry(n, &ctx->names_list, list) {
348                         rc = audit_uid_compara    345                         rc = audit_uid_comparator(uid, f->op, n->uid);
349                         if (rc)                   346                         if (rc)
350                                 return rc;        347                                 return rc;
351                 }                                 348                 }
352         }                                         349         }
353         return 0;                                 350         return 0;
354 }                                                 351 }
355                                                   352 
356 static int audit_compare_gid(kgid_t gid,          353 static int audit_compare_gid(kgid_t gid,
357                              struct audit_name    354                              struct audit_names *name,
358                              struct audit_fiel    355                              struct audit_field *f,
359                              struct audit_cont    356                              struct audit_context *ctx)
360 {                                                 357 {
361         struct audit_names *n;                    358         struct audit_names *n;
362         int rc;                                   359         int rc;
363                                                   360 
364         if (name) {                               361         if (name) {
365                 rc = audit_gid_comparator(gid,    362                 rc = audit_gid_comparator(gid, f->op, name->gid);
366                 if (rc)                           363                 if (rc)
367                         return rc;                364                         return rc;
368         }                                         365         }
369                                                   366 
370         if (ctx) {                                367         if (ctx) {
371                 list_for_each_entry(n, &ctx->n    368                 list_for_each_entry(n, &ctx->names_list, list) {
372                         rc = audit_gid_compara    369                         rc = audit_gid_comparator(gid, f->op, n->gid);
373                         if (rc)                   370                         if (rc)
374                                 return rc;        371                                 return rc;
375                 }                                 372                 }
376         }                                         373         }
377         return 0;                                 374         return 0;
378 }                                                 375 }
379                                                   376 
380 static int audit_field_compare(struct task_str    377 static int audit_field_compare(struct task_struct *tsk,
381                                const struct cr    378                                const struct cred *cred,
382                                struct audit_fi    379                                struct audit_field *f,
383                                struct audit_co    380                                struct audit_context *ctx,
384                                struct audit_na    381                                struct audit_names *name)
385 {                                                 382 {
386         switch (f->val) {                         383         switch (f->val) {
387         /* process to file object comparisons     384         /* process to file object comparisons */
388         case AUDIT_COMPARE_UID_TO_OBJ_UID:        385         case AUDIT_COMPARE_UID_TO_OBJ_UID:
389                 return audit_compare_uid(cred-    386                 return audit_compare_uid(cred->uid, name, f, ctx);
390         case AUDIT_COMPARE_GID_TO_OBJ_GID:        387         case AUDIT_COMPARE_GID_TO_OBJ_GID:
391                 return audit_compare_gid(cred-    388                 return audit_compare_gid(cred->gid, name, f, ctx);
392         case AUDIT_COMPARE_EUID_TO_OBJ_UID:       389         case AUDIT_COMPARE_EUID_TO_OBJ_UID:
393                 return audit_compare_uid(cred-    390                 return audit_compare_uid(cred->euid, name, f, ctx);
394         case AUDIT_COMPARE_EGID_TO_OBJ_GID:       391         case AUDIT_COMPARE_EGID_TO_OBJ_GID:
395                 return audit_compare_gid(cred-    392                 return audit_compare_gid(cred->egid, name, f, ctx);
396         case AUDIT_COMPARE_AUID_TO_OBJ_UID:       393         case AUDIT_COMPARE_AUID_TO_OBJ_UID:
397                 return audit_compare_uid(audit    394                 return audit_compare_uid(audit_get_loginuid(tsk), name, f, ctx);
398         case AUDIT_COMPARE_SUID_TO_OBJ_UID:       395         case AUDIT_COMPARE_SUID_TO_OBJ_UID:
399                 return audit_compare_uid(cred-    396                 return audit_compare_uid(cred->suid, name, f, ctx);
400         case AUDIT_COMPARE_SGID_TO_OBJ_GID:       397         case AUDIT_COMPARE_SGID_TO_OBJ_GID:
401                 return audit_compare_gid(cred-    398                 return audit_compare_gid(cred->sgid, name, f, ctx);
402         case AUDIT_COMPARE_FSUID_TO_OBJ_UID:      399         case AUDIT_COMPARE_FSUID_TO_OBJ_UID:
403                 return audit_compare_uid(cred-    400                 return audit_compare_uid(cred->fsuid, name, f, ctx);
404         case AUDIT_COMPARE_FSGID_TO_OBJ_GID:      401         case AUDIT_COMPARE_FSGID_TO_OBJ_GID:
405                 return audit_compare_gid(cred-    402                 return audit_compare_gid(cred->fsgid, name, f, ctx);
406         /* uid comparisons */                     403         /* uid comparisons */
407         case AUDIT_COMPARE_UID_TO_AUID:           404         case AUDIT_COMPARE_UID_TO_AUID:
408                 return audit_uid_comparator(cr    405                 return audit_uid_comparator(cred->uid, f->op,
409                                             au    406                                             audit_get_loginuid(tsk));
410         case AUDIT_COMPARE_UID_TO_EUID:           407         case AUDIT_COMPARE_UID_TO_EUID:
411                 return audit_uid_comparator(cr    408                 return audit_uid_comparator(cred->uid, f->op, cred->euid);
412         case AUDIT_COMPARE_UID_TO_SUID:           409         case AUDIT_COMPARE_UID_TO_SUID:
413                 return audit_uid_comparator(cr    410                 return audit_uid_comparator(cred->uid, f->op, cred->suid);
414         case AUDIT_COMPARE_UID_TO_FSUID:          411         case AUDIT_COMPARE_UID_TO_FSUID:
415                 return audit_uid_comparator(cr    412                 return audit_uid_comparator(cred->uid, f->op, cred->fsuid);
416         /* auid comparisons */                    413         /* auid comparisons */
417         case AUDIT_COMPARE_AUID_TO_EUID:          414         case AUDIT_COMPARE_AUID_TO_EUID:
418                 return audit_uid_comparator(au    415                 return audit_uid_comparator(audit_get_loginuid(tsk), f->op,
419                                             cr    416                                             cred->euid);
420         case AUDIT_COMPARE_AUID_TO_SUID:          417         case AUDIT_COMPARE_AUID_TO_SUID:
421                 return audit_uid_comparator(au    418                 return audit_uid_comparator(audit_get_loginuid(tsk), f->op,
422                                             cr    419                                             cred->suid);
423         case AUDIT_COMPARE_AUID_TO_FSUID:         420         case AUDIT_COMPARE_AUID_TO_FSUID:
424                 return audit_uid_comparator(au    421                 return audit_uid_comparator(audit_get_loginuid(tsk), f->op,
425                                             cr    422                                             cred->fsuid);
426         /* euid comparisons */                    423         /* euid comparisons */
427         case AUDIT_COMPARE_EUID_TO_SUID:          424         case AUDIT_COMPARE_EUID_TO_SUID:
428                 return audit_uid_comparator(cr    425                 return audit_uid_comparator(cred->euid, f->op, cred->suid);
429         case AUDIT_COMPARE_EUID_TO_FSUID:         426         case AUDIT_COMPARE_EUID_TO_FSUID:
430                 return audit_uid_comparator(cr    427                 return audit_uid_comparator(cred->euid, f->op, cred->fsuid);
431         /* suid comparisons */                    428         /* suid comparisons */
432         case AUDIT_COMPARE_SUID_TO_FSUID:         429         case AUDIT_COMPARE_SUID_TO_FSUID:
433                 return audit_uid_comparator(cr    430                 return audit_uid_comparator(cred->suid, f->op, cred->fsuid);
434         /* gid comparisons */                     431         /* gid comparisons */
435         case AUDIT_COMPARE_GID_TO_EGID:           432         case AUDIT_COMPARE_GID_TO_EGID:
436                 return audit_gid_comparator(cr    433                 return audit_gid_comparator(cred->gid, f->op, cred->egid);
437         case AUDIT_COMPARE_GID_TO_SGID:           434         case AUDIT_COMPARE_GID_TO_SGID:
438                 return audit_gid_comparator(cr    435                 return audit_gid_comparator(cred->gid, f->op, cred->sgid);
439         case AUDIT_COMPARE_GID_TO_FSGID:          436         case AUDIT_COMPARE_GID_TO_FSGID:
440                 return audit_gid_comparator(cr    437                 return audit_gid_comparator(cred->gid, f->op, cred->fsgid);
441         /* egid comparisons */                    438         /* egid comparisons */
442         case AUDIT_COMPARE_EGID_TO_SGID:          439         case AUDIT_COMPARE_EGID_TO_SGID:
443                 return audit_gid_comparator(cr    440                 return audit_gid_comparator(cred->egid, f->op, cred->sgid);
444         case AUDIT_COMPARE_EGID_TO_FSGID:         441         case AUDIT_COMPARE_EGID_TO_FSGID:
445                 return audit_gid_comparator(cr    442                 return audit_gid_comparator(cred->egid, f->op, cred->fsgid);
446         /* sgid comparison */                     443         /* sgid comparison */
447         case AUDIT_COMPARE_SGID_TO_FSGID:         444         case AUDIT_COMPARE_SGID_TO_FSGID:
448                 return audit_gid_comparator(cr    445                 return audit_gid_comparator(cred->sgid, f->op, cred->fsgid);
449         default:                                  446         default:
450                 WARN(1, "Missing AUDIT_COMPARE    447                 WARN(1, "Missing AUDIT_COMPARE define.  Report as a bug\n");
451                 return 0;                         448                 return 0;
452         }                                         449         }
453         return 0;                                 450         return 0;
454 }                                                 451 }
455                                                   452 
456 /* Determine if any context name data matches     453 /* Determine if any context name data matches a rule's watch data */
457 /* Compare a task_struct with an audit_rule.      454 /* Compare a task_struct with an audit_rule.  Return 1 on match, 0
458  * otherwise.                                     455  * otherwise.
459  *                                                456  *
460  * If task_creation is true, this is an explic    457  * If task_creation is true, this is an explicit indication that we are
461  * filtering a task rule at task creation time    458  * filtering a task rule at task creation time.  This and tsk == current are
462  * the only situations where tsk->cred may be     459  * the only situations where tsk->cred may be accessed without an rcu read lock.
463  */                                               460  */
464 static int audit_filter_rules(struct task_stru    461 static int audit_filter_rules(struct task_struct *tsk,
465                               struct audit_kru    462                               struct audit_krule *rule,
466                               struct audit_con    463                               struct audit_context *ctx,
467                               struct audit_nam    464                               struct audit_names *name,
468                               enum audit_state    465                               enum audit_state *state,
469                               bool task_creati    466                               bool task_creation)
470 {                                                 467 {
471         const struct cred *cred;                  468         const struct cred *cred;
472         int i, need_sid = 1;                      469         int i, need_sid = 1;
473         u32 sid;                                  470         u32 sid;
474         unsigned int sessionid;                   471         unsigned int sessionid;
475                                                   472 
476         if (ctx && rule->prio <= ctx->prio)       473         if (ctx && rule->prio <= ctx->prio)
477                 return 0;                         474                 return 0;
478                                                   475 
479         cred = rcu_dereference_check(tsk->cred    476         cred = rcu_dereference_check(tsk->cred, tsk == current || task_creation);
480                                                   477 
481         for (i = 0; i < rule->field_count; i++    478         for (i = 0; i < rule->field_count; i++) {
482                 struct audit_field *f = &rule-    479                 struct audit_field *f = &rule->fields[i];
483                 struct audit_names *n;            480                 struct audit_names *n;
484                 int result = 0;                   481                 int result = 0;
485                 pid_t pid;                        482                 pid_t pid;
486                                                   483 
487                 switch (f->type) {                484                 switch (f->type) {
488                 case AUDIT_PID:                   485                 case AUDIT_PID:
489                         pid = task_tgid_nr(tsk    486                         pid = task_tgid_nr(tsk);
490                         result = audit_compara    487                         result = audit_comparator(pid, f->op, f->val);
491                         break;                    488                         break;
492                 case AUDIT_PPID:                  489                 case AUDIT_PPID:
493                         if (ctx) {                490                         if (ctx) {
494                                 if (!ctx->ppid    491                                 if (!ctx->ppid)
495                                         ctx->p    492                                         ctx->ppid = task_ppid_nr(tsk);
496                                 result = audit    493                                 result = audit_comparator(ctx->ppid, f->op, f->val);
497                         }                         494                         }
498                         break;                    495                         break;
499                 case AUDIT_EXE:                   496                 case AUDIT_EXE:
500                         result = audit_exe_com    497                         result = audit_exe_compare(tsk, rule->exe);
501                         if (f->op == Audit_not    498                         if (f->op == Audit_not_equal)
502                                 result = !resu    499                                 result = !result;
503                         break;                    500                         break;
504                 case AUDIT_UID:                   501                 case AUDIT_UID:
505                         result = audit_uid_com    502                         result = audit_uid_comparator(cred->uid, f->op, f->uid);
506                         break;                    503                         break;
507                 case AUDIT_EUID:                  504                 case AUDIT_EUID:
508                         result = audit_uid_com    505                         result = audit_uid_comparator(cred->euid, f->op, f->uid);
509                         break;                    506                         break;
510                 case AUDIT_SUID:                  507                 case AUDIT_SUID:
511                         result = audit_uid_com    508                         result = audit_uid_comparator(cred->suid, f->op, f->uid);
512                         break;                    509                         break;
513                 case AUDIT_FSUID:                 510                 case AUDIT_FSUID:
514                         result = audit_uid_com    511                         result = audit_uid_comparator(cred->fsuid, f->op, f->uid);
515                         break;                    512                         break;
516                 case AUDIT_GID:                   513                 case AUDIT_GID:
517                         result = audit_gid_com    514                         result = audit_gid_comparator(cred->gid, f->op, f->gid);
518                         if (f->op == Audit_equ    515                         if (f->op == Audit_equal) {
519                                 if (!result)      516                                 if (!result)
520                                         result    517                                         result = groups_search(cred->group_info, f->gid);
521                         } else if (f->op == Au    518                         } else if (f->op == Audit_not_equal) {
522                                 if (result)       519                                 if (result)
523                                         result    520                                         result = !groups_search(cred->group_info, f->gid);
524                         }                         521                         }
525                         break;                    522                         break;
526                 case AUDIT_EGID:                  523                 case AUDIT_EGID:
527                         result = audit_gid_com    524                         result = audit_gid_comparator(cred->egid, f->op, f->gid);
528                         if (f->op == Audit_equ    525                         if (f->op == Audit_equal) {
529                                 if (!result)      526                                 if (!result)
530                                         result    527                                         result = groups_search(cred->group_info, f->gid);
531                         } else if (f->op == Au    528                         } else if (f->op == Audit_not_equal) {
532                                 if (result)       529                                 if (result)
533                                         result    530                                         result = !groups_search(cred->group_info, f->gid);
534                         }                         531                         }
535                         break;                    532                         break;
536                 case AUDIT_SGID:                  533                 case AUDIT_SGID:
537                         result = audit_gid_com    534                         result = audit_gid_comparator(cred->sgid, f->op, f->gid);
538                         break;                    535                         break;
539                 case AUDIT_FSGID:                 536                 case AUDIT_FSGID:
540                         result = audit_gid_com    537                         result = audit_gid_comparator(cred->fsgid, f->op, f->gid);
541                         break;                    538                         break;
542                 case AUDIT_SESSIONID:             539                 case AUDIT_SESSIONID:
543                         sessionid = audit_get_    540                         sessionid = audit_get_sessionid(tsk);
544                         result = audit_compara    541                         result = audit_comparator(sessionid, f->op, f->val);
545                         break;                    542                         break;
546                 case AUDIT_PERS:                  543                 case AUDIT_PERS:
547                         result = audit_compara    544                         result = audit_comparator(tsk->personality, f->op, f->val);
548                         break;                    545                         break;
549                 case AUDIT_ARCH:                  546                 case AUDIT_ARCH:
550                         if (ctx)                  547                         if (ctx)
551                                 result = audit    548                                 result = audit_comparator(ctx->arch, f->op, f->val);
552                         break;                    549                         break;
553                                                   550 
554                 case AUDIT_EXIT:                  551                 case AUDIT_EXIT:
555                         if (ctx && ctx->return    552                         if (ctx && ctx->return_valid != AUDITSC_INVALID)
556                                 result = audit    553                                 result = audit_comparator(ctx->return_code, f->op, f->val);
557                         break;                    554                         break;
558                 case AUDIT_SUCCESS:               555                 case AUDIT_SUCCESS:
559                         if (ctx && ctx->return    556                         if (ctx && ctx->return_valid != AUDITSC_INVALID) {
560                                 if (f->val)       557                                 if (f->val)
561                                         result    558                                         result = audit_comparator(ctx->return_valid, f->op, AUDITSC_SUCCESS);
562                                 else              559                                 else
563                                         result    560                                         result = audit_comparator(ctx->return_valid, f->op, AUDITSC_FAILURE);
564                         }                         561                         }
565                         break;                    562                         break;
566                 case AUDIT_DEVMAJOR:              563                 case AUDIT_DEVMAJOR:
567                         if (name) {               564                         if (name) {
568                                 if (audit_comp    565                                 if (audit_comparator(MAJOR(name->dev), f->op, f->val) ||
569                                     audit_comp    566                                     audit_comparator(MAJOR(name->rdev), f->op, f->val))
570                                         ++resu    567                                         ++result;
571                         } else if (ctx) {         568                         } else if (ctx) {
572                                 list_for_each_    569                                 list_for_each_entry(n, &ctx->names_list, list) {
573                                         if (au    570                                         if (audit_comparator(MAJOR(n->dev), f->op, f->val) ||
574                                             au    571                                             audit_comparator(MAJOR(n->rdev), f->op, f->val)) {
575                                                   572                                                 ++result;
576                                                   573                                                 break;
577                                         }         574                                         }
578                                 }                 575                                 }
579                         }                         576                         }
580                         break;                    577                         break;
581                 case AUDIT_DEVMINOR:              578                 case AUDIT_DEVMINOR:
582                         if (name) {               579                         if (name) {
583                                 if (audit_comp    580                                 if (audit_comparator(MINOR(name->dev), f->op, f->val) ||
584                                     audit_comp    581                                     audit_comparator(MINOR(name->rdev), f->op, f->val))
585                                         ++resu    582                                         ++result;
586                         } else if (ctx) {         583                         } else if (ctx) {
587                                 list_for_each_    584                                 list_for_each_entry(n, &ctx->names_list, list) {
588                                         if (au    585                                         if (audit_comparator(MINOR(n->dev), f->op, f->val) ||
589                                             au    586                                             audit_comparator(MINOR(n->rdev), f->op, f->val)) {
590                                                   587                                                 ++result;
591                                                   588                                                 break;
592                                         }         589                                         }
593                                 }                 590                                 }
594                         }                         591                         }
595                         break;                    592                         break;
596                 case AUDIT_INODE:                 593                 case AUDIT_INODE:
597                         if (name)                 594                         if (name)
598                                 result = audit    595                                 result = audit_comparator(name->ino, f->op, f->val);
599                         else if (ctx) {           596                         else if (ctx) {
600                                 list_for_each_    597                                 list_for_each_entry(n, &ctx->names_list, list) {
601                                         if (au    598                                         if (audit_comparator(n->ino, f->op, f->val)) {
602                                                   599                                                 ++result;
603                                                   600                                                 break;
604                                         }         601                                         }
605                                 }                 602                                 }
606                         }                         603                         }
607                         break;                    604                         break;
608                 case AUDIT_OBJ_UID:               605                 case AUDIT_OBJ_UID:
609                         if (name) {               606                         if (name) {
610                                 result = audit    607                                 result = audit_uid_comparator(name->uid, f->op, f->uid);
611                         } else if (ctx) {         608                         } else if (ctx) {
612                                 list_for_each_    609                                 list_for_each_entry(n, &ctx->names_list, list) {
613                                         if (au    610                                         if (audit_uid_comparator(n->uid, f->op, f->uid)) {
614                                                   611                                                 ++result;
615                                                   612                                                 break;
616                                         }         613                                         }
617                                 }                 614                                 }
618                         }                         615                         }
619                         break;                    616                         break;
620                 case AUDIT_OBJ_GID:               617                 case AUDIT_OBJ_GID:
621                         if (name) {               618                         if (name) {
622                                 result = audit    619                                 result = audit_gid_comparator(name->gid, f->op, f->gid);
623                         } else if (ctx) {         620                         } else if (ctx) {
624                                 list_for_each_    621                                 list_for_each_entry(n, &ctx->names_list, list) {
625                                         if (au    622                                         if (audit_gid_comparator(n->gid, f->op, f->gid)) {
626                                                   623                                                 ++result;
627                                                   624                                                 break;
628                                         }         625                                         }
629                                 }                 626                                 }
630                         }                         627                         }
631                         break;                    628                         break;
632                 case AUDIT_WATCH:                 629                 case AUDIT_WATCH:
633                         if (name) {               630                         if (name) {
634                                 result = audit    631                                 result = audit_watch_compare(rule->watch,
635                                                   632                                                              name->ino,
636                                                   633                                                              name->dev);
637                                 if (f->op == A    634                                 if (f->op == Audit_not_equal)
638                                         result    635                                         result = !result;
639                         }                         636                         }
640                         break;                    637                         break;
641                 case AUDIT_DIR:                   638                 case AUDIT_DIR:
642                         if (ctx) {                639                         if (ctx) {
643                                 result = match    640                                 result = match_tree_refs(ctx, rule->tree);
644                                 if (f->op == A    641                                 if (f->op == Audit_not_equal)
645                                         result    642                                         result = !result;
646                         }                         643                         }
647                         break;                    644                         break;
648                 case AUDIT_LOGINUID:              645                 case AUDIT_LOGINUID:
649                         result = audit_uid_com    646                         result = audit_uid_comparator(audit_get_loginuid(tsk),
650                                                   647                                                       f->op, f->uid);
651                         break;                    648                         break;
652                 case AUDIT_LOGINUID_SET:          649                 case AUDIT_LOGINUID_SET:
653                         result = audit_compara    650                         result = audit_comparator(audit_loginuid_set(tsk), f->op, f->val);
654                         break;                    651                         break;
655                 case AUDIT_SADDR_FAM:             652                 case AUDIT_SADDR_FAM:
656                         if (ctx && ctx->sockad    653                         if (ctx && ctx->sockaddr)
657                                 result = audit    654                                 result = audit_comparator(ctx->sockaddr->ss_family,
658                                                   655                                                           f->op, f->val);
659                         break;                    656                         break;
660                 case AUDIT_SUBJ_USER:             657                 case AUDIT_SUBJ_USER:
661                 case AUDIT_SUBJ_ROLE:             658                 case AUDIT_SUBJ_ROLE:
662                 case AUDIT_SUBJ_TYPE:             659                 case AUDIT_SUBJ_TYPE:
663                 case AUDIT_SUBJ_SEN:              660                 case AUDIT_SUBJ_SEN:
664                 case AUDIT_SUBJ_CLR:              661                 case AUDIT_SUBJ_CLR:
665                         /* NOTE: this may retu    662                         /* NOTE: this may return negative values indicating
666                            a temporary error.     663                            a temporary error.  We simply treat this as a
667                            match for now to av    664                            match for now to avoid losing information that
668                            may be wanted.   An    665                            may be wanted.   An error message will also be
669                            logged upon error *    666                            logged upon error */
670                         if (f->lsm_rule) {        667                         if (f->lsm_rule) {
671                                 if (need_sid)     668                                 if (need_sid) {
672                                         /* @ts    669                                         /* @tsk should always be equal to
673                                          * @cu    670                                          * @current with the exception of
674                                          * for    671                                          * fork()/copy_process() in which case
675                                          * the    672                                          * the new @tsk creds are still a dup
676                                          * of     673                                          * of @current's creds so we can still
677                                          * use    674                                          * use security_current_getsecid_subj()
678                                          * her    675                                          * here even though it always refs
679                                          * @cu    676                                          * @current's creds
680                                          */       677                                          */
681                                         securi    678                                         security_current_getsecid_subj(&sid);
682                                         need_s    679                                         need_sid = 0;
683                                 }                 680                                 }
684                                 result = secur    681                                 result = security_audit_rule_match(sid, f->type,
685                                                   682                                                                    f->op,
686                                                   683                                                                    f->lsm_rule);
687                         }                         684                         }
688                         break;                    685                         break;
689                 case AUDIT_OBJ_USER:              686                 case AUDIT_OBJ_USER:
690                 case AUDIT_OBJ_ROLE:              687                 case AUDIT_OBJ_ROLE:
691                 case AUDIT_OBJ_TYPE:              688                 case AUDIT_OBJ_TYPE:
692                 case AUDIT_OBJ_LEV_LOW:           689                 case AUDIT_OBJ_LEV_LOW:
693                 case AUDIT_OBJ_LEV_HIGH:          690                 case AUDIT_OBJ_LEV_HIGH:
694                         /* The above note for     691                         /* The above note for AUDIT_SUBJ_USER...AUDIT_SUBJ_CLR
695                            also applies here *    692                            also applies here */
696                         if (f->lsm_rule) {        693                         if (f->lsm_rule) {
697                                 /* Find files     694                                 /* Find files that match */
698                                 if (name) {       695                                 if (name) {
699                                         result    696                                         result = security_audit_rule_match(
700                                                   697                                                                 name->osid,
701                                                   698                                                                 f->type,
702                                                   699                                                                 f->op,
703                                                   700                                                                 f->lsm_rule);
704                                 } else if (ctx    701                                 } else if (ctx) {
705                                         list_f    702                                         list_for_each_entry(n, &ctx->names_list, list) {
706                                                   703                                                 if (security_audit_rule_match(
707                                                   704                                                                 n->osid,
708                                                   705                                                                 f->type,
709                                                   706                                                                 f->op,
710                                                   707                                                                 f->lsm_rule)) {
711                                                   708                                                         ++result;
712                                                   709                                                         break;
713                                                   710                                                 }
714                                         }         711                                         }
715                                 }                 712                                 }
716                                 /* Find ipc ob    713                                 /* Find ipc objects that match */
717                                 if (!ctx || ct    714                                 if (!ctx || ctx->type != AUDIT_IPC)
718                                         break;    715                                         break;
719                                 if (security_a    716                                 if (security_audit_rule_match(ctx->ipc.osid,
720                                                   717                                                               f->type, f->op,
721                                                   718                                                               f->lsm_rule))
722                                         ++resu    719                                         ++result;
723                         }                         720                         }
724                         break;                    721                         break;
725                 case AUDIT_ARG0:                  722                 case AUDIT_ARG0:
726                 case AUDIT_ARG1:                  723                 case AUDIT_ARG1:
727                 case AUDIT_ARG2:                  724                 case AUDIT_ARG2:
728                 case AUDIT_ARG3:                  725                 case AUDIT_ARG3:
729                         if (ctx)                  726                         if (ctx)
730                                 result = audit    727                                 result = audit_comparator(ctx->argv[f->type-AUDIT_ARG0], f->op, f->val);
731                         break;                    728                         break;
732                 case AUDIT_FILTERKEY:             729                 case AUDIT_FILTERKEY:
733                         /* ignore this field f    730                         /* ignore this field for filtering */
734                         result = 1;               731                         result = 1;
735                         break;                    732                         break;
736                 case AUDIT_PERM:                  733                 case AUDIT_PERM:
737                         result = audit_match_p    734                         result = audit_match_perm(ctx, f->val);
738                         if (f->op == Audit_not    735                         if (f->op == Audit_not_equal)
739                                 result = !resu    736                                 result = !result;
740                         break;                    737                         break;
741                 case AUDIT_FILETYPE:              738                 case AUDIT_FILETYPE:
742                         result = audit_match_f    739                         result = audit_match_filetype(ctx, f->val);
743                         if (f->op == Audit_not    740                         if (f->op == Audit_not_equal)
744                                 result = !resu    741                                 result = !result;
745                         break;                    742                         break;
746                 case AUDIT_FIELD_COMPARE:         743                 case AUDIT_FIELD_COMPARE:
747                         result = audit_field_c    744                         result = audit_field_compare(tsk, cred, f, ctx, name);
748                         break;                    745                         break;
749                 }                                 746                 }
750                 if (!result)                      747                 if (!result)
751                         return 0;                 748                         return 0;
752         }                                         749         }
753                                                   750 
754         if (ctx) {                                751         if (ctx) {
755                 if (rule->filterkey) {            752                 if (rule->filterkey) {
756                         kfree(ctx->filterkey);    753                         kfree(ctx->filterkey);
757                         ctx->filterkey = kstrd    754                         ctx->filterkey = kstrdup(rule->filterkey, GFP_ATOMIC);
758                 }                                 755                 }
759                 ctx->prio = rule->prio;           756                 ctx->prio = rule->prio;
760         }                                         757         }
761         switch (rule->action) {                   758         switch (rule->action) {
762         case AUDIT_NEVER:                         759         case AUDIT_NEVER:
763                 *state = AUDIT_STATE_DISABLED;    760                 *state = AUDIT_STATE_DISABLED;
764                 break;                            761                 break;
765         case AUDIT_ALWAYS:                        762         case AUDIT_ALWAYS:
766                 *state = AUDIT_STATE_RECORD;      763                 *state = AUDIT_STATE_RECORD;
767                 break;                            764                 break;
768         }                                         765         }
769         return 1;                                 766         return 1;
770 }                                                 767 }
771                                                   768 
772 /* At process creation time, we can determine     769 /* At process creation time, we can determine if system-call auditing is
773  * completely disabled for this task.  Since w    770  * completely disabled for this task.  Since we only have the task
774  * structure at this point, we can only check     771  * structure at this point, we can only check uid and gid.
775  */                                               772  */
776 static enum audit_state audit_filter_task(stru    773 static enum audit_state audit_filter_task(struct task_struct *tsk, char **key)
777 {                                                 774 {
778         struct audit_entry *e;                    775         struct audit_entry *e;
779         enum audit_state   state;                 776         enum audit_state   state;
780                                                   777 
781         rcu_read_lock();                          778         rcu_read_lock();
782         list_for_each_entry_rcu(e, &audit_filt    779         list_for_each_entry_rcu(e, &audit_filter_list[AUDIT_FILTER_TASK], list) {
783                 if (audit_filter_rules(tsk, &e    780                 if (audit_filter_rules(tsk, &e->rule, NULL, NULL,
784                                        &state,    781                                        &state, true)) {
785                         if (state == AUDIT_STA    782                         if (state == AUDIT_STATE_RECORD)
786                                 *key = kstrdup    783                                 *key = kstrdup(e->rule.filterkey, GFP_ATOMIC);
787                         rcu_read_unlock();        784                         rcu_read_unlock();
788                         return state;             785                         return state;
789                 }                                 786                 }
790         }                                         787         }
791         rcu_read_unlock();                        788         rcu_read_unlock();
792         return AUDIT_STATE_BUILD;                 789         return AUDIT_STATE_BUILD;
793 }                                                 790 }
794                                                   791 
795 static int audit_in_mask(const struct audit_kr    792 static int audit_in_mask(const struct audit_krule *rule, unsigned long val)
796 {                                                 793 {
797         int word, bit;                            794         int word, bit;
798                                                   795 
799         if (val > 0xffffffff)                     796         if (val > 0xffffffff)
800                 return false;                     797                 return false;
801                                                   798 
802         word = AUDIT_WORD(val);                   799         word = AUDIT_WORD(val);
803         if (word >= AUDIT_BITMASK_SIZE)           800         if (word >= AUDIT_BITMASK_SIZE)
804                 return false;                     801                 return false;
805                                                   802 
806         bit = AUDIT_BIT(val);                     803         bit = AUDIT_BIT(val);
807                                                   804 
808         return rule->mask[word] & bit;            805         return rule->mask[word] & bit;
809 }                                                 806 }
810                                                   807 
811 /**                                               808 /**
812  * __audit_filter_op - common filter helper fo << 
813  * @tsk: associated task                       << 
814  * @ctx: audit context                         << 
815  * @list: audit filter list                    << 
816  * @name: audit_name (can be NULL)             << 
817  * @op: current syscall/uring_op               << 
818  *                                             << 
819  * Run the udit filters specified in @list aga << 
820  * @name, and @op, as necessary; the caller is << 
821  * that the call is made while the RCU read lo << 
822  * parameter can be NULL, but all others must  << 
823  * Returns 1/true if the filter finds a match, << 
824  */                                            << 
825 static int __audit_filter_op(struct task_struc << 
826                            struct audit_contex << 
827                            struct list_head *l << 
828                            struct audit_names  << 
829                            unsigned long op)   << 
830 {                                              << 
831         struct audit_entry *e;                 << 
832         enum audit_state state;                << 
833                                                << 
834         list_for_each_entry_rcu(e, list, list) << 
835                 if (audit_in_mask(&e->rule, op << 
836                     audit_filter_rules(tsk, &e << 
837                                        &state, << 
838                         ctx->current_state = s << 
839                         return 1;              << 
840                 }                              << 
841         }                                      << 
842         return 0;                              << 
843 }                                              << 
844                                                << 
845 /**                                            << 
846  * audit_filter_uring - apply filters to an io    809  * audit_filter_uring - apply filters to an io_uring operation
847  * @tsk: associated task                          810  * @tsk: associated task
848  * @ctx: audit context                            811  * @ctx: audit context
849  */                                               812  */
850 static void audit_filter_uring(struct task_str    813 static void audit_filter_uring(struct task_struct *tsk,
851                                struct audit_co    814                                struct audit_context *ctx)
852 {                                                 815 {
                                                   >> 816         struct audit_entry *e;
                                                   >> 817         enum audit_state state;
                                                   >> 818 
853         if (auditd_test_task(tsk))                819         if (auditd_test_task(tsk))
854                 return;                           820                 return;
855                                                   821 
856         rcu_read_lock();                          822         rcu_read_lock();
857         __audit_filter_op(tsk, ctx, &audit_fil !! 823         list_for_each_entry_rcu(e, &audit_filter_list[AUDIT_FILTER_URING_EXIT],
858                         NULL, ctx->uring_op);  !! 824                                 list) {
                                                   >> 825                 if (audit_in_mask(&e->rule, ctx->uring_op) &&
                                                   >> 826                     audit_filter_rules(tsk, &e->rule, ctx, NULL, &state,
                                                   >> 827                                        false)) {
                                                   >> 828                         rcu_read_unlock();
                                                   >> 829                         ctx->current_state = state;
                                                   >> 830                         return;
                                                   >> 831                 }
                                                   >> 832         }
859         rcu_read_unlock();                        833         rcu_read_unlock();
860 }                                                 834 }
861                                                   835 
862 /* At syscall exit time, this filter is called    836 /* At syscall exit time, this filter is called if the audit_state is
863  * not low enough that auditing cannot take pl    837  * not low enough that auditing cannot take place, but is also not
864  * high enough that we already know we have to    838  * high enough that we already know we have to write an audit record
865  * (i.e., the state is AUDIT_STATE_BUILD).        839  * (i.e., the state is AUDIT_STATE_BUILD).
866  */                                               840  */
867 static void audit_filter_syscall(struct task_s    841 static void audit_filter_syscall(struct task_struct *tsk,
868                                  struct audit_    842                                  struct audit_context *ctx)
869 {                                                 843 {
                                                   >> 844         struct audit_entry *e;
                                                   >> 845         enum audit_state state;
                                                   >> 846 
870         if (auditd_test_task(tsk))                847         if (auditd_test_task(tsk))
871                 return;                           848                 return;
872                                                   849 
873         rcu_read_lock();                          850         rcu_read_lock();
874         __audit_filter_op(tsk, ctx, &audit_fil !! 851         list_for_each_entry_rcu(e, &audit_filter_list[AUDIT_FILTER_EXIT], list) {
875                         NULL, ctx->major);     !! 852                 if (audit_in_mask(&e->rule, ctx->major) &&
                                                   >> 853                     audit_filter_rules(tsk, &e->rule, ctx, NULL,
                                                   >> 854                                        &state, false)) {
                                                   >> 855                         rcu_read_unlock();
                                                   >> 856                         ctx->current_state = state;
                                                   >> 857                         return;
                                                   >> 858                 }
                                                   >> 859         }
876         rcu_read_unlock();                        860         rcu_read_unlock();
                                                   >> 861         return;
877 }                                                 862 }
878                                                   863 
879 /*                                                864 /*
880  * Given an audit_name check the inode hash ta    865  * Given an audit_name check the inode hash table to see if they match.
881  * Called holding the rcu read lock to protect    866  * Called holding the rcu read lock to protect the use of audit_inode_hash
882  */                                               867  */
883 static int audit_filter_inode_name(struct task    868 static int audit_filter_inode_name(struct task_struct *tsk,
884                                    struct audi    869                                    struct audit_names *n,
885                                    struct audi !! 870                                    struct audit_context *ctx) {
886 {                                              << 
887         int h = audit_hash_ino((u32)n->ino);      871         int h = audit_hash_ino((u32)n->ino);
888         struct list_head *list = &audit_inode_    872         struct list_head *list = &audit_inode_hash[h];
                                                   >> 873         struct audit_entry *e;
                                                   >> 874         enum audit_state state;
889                                                   875 
890         return __audit_filter_op(tsk, ctx, lis !! 876         list_for_each_entry_rcu(e, list, list) {
                                                   >> 877                 if (audit_in_mask(&e->rule, ctx->major) &&
                                                   >> 878                     audit_filter_rules(tsk, &e->rule, ctx, n, &state, false)) {
                                                   >> 879                         ctx->current_state = state;
                                                   >> 880                         return 1;
                                                   >> 881                 }
                                                   >> 882         }
                                                   >> 883         return 0;
891 }                                                 884 }
892                                                   885 
893 /* At syscall exit time, this filter is called    886 /* At syscall exit time, this filter is called if any audit_names have been
894  * collected during syscall processing.  We on    887  * collected during syscall processing.  We only check rules in sublists at hash
895  * buckets applicable to the inode numbers in     888  * buckets applicable to the inode numbers in audit_names.
896  * Regarding audit_state, same rules apply as     889  * Regarding audit_state, same rules apply as for audit_filter_syscall().
897  */                                               890  */
898 void audit_filter_inodes(struct task_struct *t    891 void audit_filter_inodes(struct task_struct *tsk, struct audit_context *ctx)
899 {                                                 892 {
900         struct audit_names *n;                    893         struct audit_names *n;
901                                                   894 
902         if (auditd_test_task(tsk))                895         if (auditd_test_task(tsk))
903                 return;                           896                 return;
904                                                   897 
905         rcu_read_lock();                          898         rcu_read_lock();
906                                                   899 
907         list_for_each_entry(n, &ctx->names_lis    900         list_for_each_entry(n, &ctx->names_list, list) {
908                 if (audit_filter_inode_name(ts    901                 if (audit_filter_inode_name(tsk, n, ctx))
909                         break;                    902                         break;
910         }                                         903         }
911         rcu_read_unlock();                        904         rcu_read_unlock();
912 }                                                 905 }
913                                                   906 
914 static inline void audit_proctitle_free(struct    907 static inline void audit_proctitle_free(struct audit_context *context)
915 {                                                 908 {
916         kfree(context->proctitle.value);          909         kfree(context->proctitle.value);
917         context->proctitle.value = NULL;          910         context->proctitle.value = NULL;
918         context->proctitle.len = 0;               911         context->proctitle.len = 0;
919 }                                                 912 }
920                                                   913 
921 static inline void audit_free_module(struct au    914 static inline void audit_free_module(struct audit_context *context)
922 {                                                 915 {
923         if (context->type == AUDIT_KERN_MODULE    916         if (context->type == AUDIT_KERN_MODULE) {
924                 kfree(context->module.name);      917                 kfree(context->module.name);
925                 context->module.name = NULL;      918                 context->module.name = NULL;
926         }                                         919         }
927 }                                                 920 }
928 static inline void audit_free_names(struct aud    921 static inline void audit_free_names(struct audit_context *context)
929 {                                                 922 {
930         struct audit_names *n, *next;             923         struct audit_names *n, *next;
931                                                   924 
932         list_for_each_entry_safe(n, next, &con    925         list_for_each_entry_safe(n, next, &context->names_list, list) {
933                 list_del(&n->list);               926                 list_del(&n->list);
934                 if (n->name)                      927                 if (n->name)
935                         putname(n->name);         928                         putname(n->name);
936                 if (n->should_free)               929                 if (n->should_free)
937                         kfree(n);                 930                         kfree(n);
938         }                                         931         }
939         context->name_count = 0;                  932         context->name_count = 0;
940         path_put(&context->pwd);                  933         path_put(&context->pwd);
941         context->pwd.dentry = NULL;               934         context->pwd.dentry = NULL;
942         context->pwd.mnt = NULL;                  935         context->pwd.mnt = NULL;
943 }                                                 936 }
944                                                   937 
945 static inline void audit_free_aux(struct audit    938 static inline void audit_free_aux(struct audit_context *context)
946 {                                                 939 {
947         struct audit_aux_data *aux;               940         struct audit_aux_data *aux;
948                                                   941 
949         while ((aux = context->aux)) {            942         while ((aux = context->aux)) {
950                 context->aux = aux->next;         943                 context->aux = aux->next;
951                 kfree(aux);                       944                 kfree(aux);
952         }                                         945         }
953         context->aux = NULL;                      946         context->aux = NULL;
954         while ((aux = context->aux_pids)) {       947         while ((aux = context->aux_pids)) {
955                 context->aux_pids = aux->next;    948                 context->aux_pids = aux->next;
956                 kfree(aux);                       949                 kfree(aux);
957         }                                         950         }
958         context->aux_pids = NULL;                 951         context->aux_pids = NULL;
959 }                                                 952 }
960                                                   953 
961 /**                                               954 /**
962  * audit_reset_context - reset a audit_context    955  * audit_reset_context - reset a audit_context structure
963  * @ctx: the audit_context to reset               956  * @ctx: the audit_context to reset
964  *                                                957  *
965  * All fields in the audit_context will be res    958  * All fields in the audit_context will be reset to an initial state, all
966  * references held by fields will be dropped,     959  * references held by fields will be dropped, and private memory will be
967  * released.  When this function returns the a    960  * released.  When this function returns the audit_context will be suitable
968  * for reuse, so long as the passed context is    961  * for reuse, so long as the passed context is not NULL or a dummy context.
969  */                                               962  */
970 static void audit_reset_context(struct audit_c    963 static void audit_reset_context(struct audit_context *ctx)
971 {                                                 964 {
972         if (!ctx)                                 965         if (!ctx)
973                 return;                           966                 return;
974                                                   967 
975         /* if ctx is non-null, reset the "ctx- !! 968         /* if ctx is non-null, reset the "ctx->state" regardless */
976         ctx->context = AUDIT_CTX_UNUSED;          969         ctx->context = AUDIT_CTX_UNUSED;
977         if (ctx->dummy)                           970         if (ctx->dummy)
978                 return;                           971                 return;
979                                                   972 
980         /*                                        973         /*
981          * NOTE: It shouldn't matter in what o    974          * NOTE: It shouldn't matter in what order we release the fields, so
982          *       release them in the order in     975          *       release them in the order in which they appear in the struct;
983          *       this gives us some hope of qu    976          *       this gives us some hope of quickly making sure we are
984          *       resetting the audit_context p    977          *       resetting the audit_context properly.
985          *                                        978          *
986          *       Other things worth mentioning    979          *       Other things worth mentioning:
987          *       - we don't reset "dummy"         980          *       - we don't reset "dummy"
988          *       - we don't reset "state", we     981          *       - we don't reset "state", we do reset "current_state"
989          *       - we preserve "filterkey" if     982          *       - we preserve "filterkey" if "state" is AUDIT_STATE_RECORD
990          *       - much of this is likely over    983          *       - much of this is likely overkill, but play it safe for now
991          *       - we really need to work on i    984          *       - we really need to work on improving the audit_context struct
992          */                                       985          */
993                                                   986 
994         ctx->current_state = ctx->state;          987         ctx->current_state = ctx->state;
995         ctx->serial = 0;                          988         ctx->serial = 0;
996         ctx->major = 0;                           989         ctx->major = 0;
997         ctx->uring_op = 0;                        990         ctx->uring_op = 0;
998         ctx->ctime = (struct timespec64){ .tv_    991         ctx->ctime = (struct timespec64){ .tv_sec = 0, .tv_nsec = 0 };
999         memset(ctx->argv, 0, sizeof(ctx->argv)    992         memset(ctx->argv, 0, sizeof(ctx->argv));
1000         ctx->return_code = 0;                    993         ctx->return_code = 0;
1001         ctx->prio = (ctx->state == AUDIT_STAT    994         ctx->prio = (ctx->state == AUDIT_STATE_RECORD ? ~0ULL : 0);
1002         ctx->return_valid = AUDITSC_INVALID;     995         ctx->return_valid = AUDITSC_INVALID;
1003         audit_free_names(ctx);                   996         audit_free_names(ctx);
1004         if (ctx->state != AUDIT_STATE_RECORD)    997         if (ctx->state != AUDIT_STATE_RECORD) {
1005                 kfree(ctx->filterkey);           998                 kfree(ctx->filterkey);
1006                 ctx->filterkey = NULL;           999                 ctx->filterkey = NULL;
1007         }                                        1000         }
1008         audit_free_aux(ctx);                     1001         audit_free_aux(ctx);
1009         kfree(ctx->sockaddr);                    1002         kfree(ctx->sockaddr);
1010         ctx->sockaddr = NULL;                    1003         ctx->sockaddr = NULL;
1011         ctx->sockaddr_len = 0;                   1004         ctx->sockaddr_len = 0;
1012         ctx->ppid = 0;                        !! 1005         ctx->pid = ctx->ppid = 0;
1013         ctx->uid = ctx->euid = ctx->suid = ct    1006         ctx->uid = ctx->euid = ctx->suid = ctx->fsuid = KUIDT_INIT(0);
1014         ctx->gid = ctx->egid = ctx->sgid = ct    1007         ctx->gid = ctx->egid = ctx->sgid = ctx->fsgid = KGIDT_INIT(0);
1015         ctx->personality = 0;                    1008         ctx->personality = 0;
1016         ctx->arch = 0;                           1009         ctx->arch = 0;
1017         ctx->target_pid = 0;                     1010         ctx->target_pid = 0;
1018         ctx->target_auid = ctx->target_uid =     1011         ctx->target_auid = ctx->target_uid = KUIDT_INIT(0);
1019         ctx->target_sessionid = 0;               1012         ctx->target_sessionid = 0;
1020         ctx->target_sid = 0;                     1013         ctx->target_sid = 0;
1021         ctx->target_comm[0] = '\0';              1014         ctx->target_comm[0] = '\0';
1022         unroll_tree_refs(ctx, NULL, 0);          1015         unroll_tree_refs(ctx, NULL, 0);
1023         WARN_ON(!list_empty(&ctx->killed_tree    1016         WARN_ON(!list_empty(&ctx->killed_trees));
1024         audit_free_module(ctx);                  1017         audit_free_module(ctx);
1025         ctx->fds[0] = -1;                        1018         ctx->fds[0] = -1;
                                                   >> 1019         audit_proctitle_free(ctx);
1026         ctx->type = 0; /* reset last for audi    1020         ctx->type = 0; /* reset last for audit_free_*() */
1027 }                                                1021 }
1028                                                  1022 
1029 static inline struct audit_context *audit_all    1023 static inline struct audit_context *audit_alloc_context(enum audit_state state)
1030 {                                                1024 {
1031         struct audit_context *context;           1025         struct audit_context *context;
1032                                                  1026 
1033         context = kzalloc(sizeof(*context), G    1027         context = kzalloc(sizeof(*context), GFP_KERNEL);
1034         if (!context)                            1028         if (!context)
1035                 return NULL;                     1029                 return NULL;
1036         context->context = AUDIT_CTX_UNUSED;     1030         context->context = AUDIT_CTX_UNUSED;
1037         context->state = state;                  1031         context->state = state;
1038         context->prio = state == AUDIT_STATE_    1032         context->prio = state == AUDIT_STATE_RECORD ? ~0ULL : 0;
1039         INIT_LIST_HEAD(&context->killed_trees    1033         INIT_LIST_HEAD(&context->killed_trees);
1040         INIT_LIST_HEAD(&context->names_list);    1034         INIT_LIST_HEAD(&context->names_list);
1041         context->fds[0] = -1;                    1035         context->fds[0] = -1;
1042         context->return_valid = AUDITSC_INVAL    1036         context->return_valid = AUDITSC_INVALID;
1043         return context;                          1037         return context;
1044 }                                                1038 }
1045                                                  1039 
1046 /**                                              1040 /**
1047  * audit_alloc - allocate an audit context bl    1041  * audit_alloc - allocate an audit context block for a task
1048  * @tsk: task                                    1042  * @tsk: task
1049  *                                               1043  *
1050  * Filter on the task information and allocat    1044  * Filter on the task information and allocate a per-task audit context
1051  * if necessary.  Doing so turns on system ca    1045  * if necessary.  Doing so turns on system call auditing for the
1052  * specified task.  This is called from copy_    1046  * specified task.  This is called from copy_process, so no lock is
1053  * needed.                                       1047  * needed.
1054  */                                              1048  */
1055 int audit_alloc(struct task_struct *tsk)         1049 int audit_alloc(struct task_struct *tsk)
1056 {                                                1050 {
1057         struct audit_context *context;           1051         struct audit_context *context;
1058         enum audit_state     state;              1052         enum audit_state     state;
1059         char *key = NULL;                        1053         char *key = NULL;
1060                                                  1054 
1061         if (likely(!audit_ever_enabled))         1055         if (likely(!audit_ever_enabled))
1062                 return 0;                        1056                 return 0;
1063                                                  1057 
1064         state = audit_filter_task(tsk, &key);    1058         state = audit_filter_task(tsk, &key);
1065         if (state == AUDIT_STATE_DISABLED) {     1059         if (state == AUDIT_STATE_DISABLED) {
1066                 clear_task_syscall_work(tsk,     1060                 clear_task_syscall_work(tsk, SYSCALL_AUDIT);
1067                 return 0;                        1061                 return 0;
1068         }                                        1062         }
1069                                                  1063 
1070         context = audit_alloc_context(state); !! 1064         if (!(context = audit_alloc_context(state))) {
1071         if (!context) {                       << 
1072                 kfree(key);                      1065                 kfree(key);
1073                 audit_log_lost("out of memory    1066                 audit_log_lost("out of memory in audit_alloc");
1074                 return -ENOMEM;                  1067                 return -ENOMEM;
1075         }                                        1068         }
1076         context->filterkey = key;                1069         context->filterkey = key;
1077                                                  1070 
1078         audit_set_context(tsk, context);         1071         audit_set_context(tsk, context);
1079         set_task_syscall_work(tsk, SYSCALL_AU    1072         set_task_syscall_work(tsk, SYSCALL_AUDIT);
1080         return 0;                                1073         return 0;
1081 }                                                1074 }
1082                                                  1075 
                                                   >> 1076 /**
                                                   >> 1077  * audit_alloc_kernel - allocate an audit_context for a kernel task
                                                   >> 1078  * @tsk: the kernel task
                                                   >> 1079  *
                                                   >> 1080  * Similar to the audit_alloc() function, but intended for kernel private
                                                   >> 1081  * threads.  Returns zero on success, negative values on failure.
                                                   >> 1082  */
                                                   >> 1083 int audit_alloc_kernel(struct task_struct *tsk)
                                                   >> 1084 {
                                                   >> 1085         /*
                                                   >> 1086          * At the moment we are just going to call into audit_alloc() to
                                                   >> 1087          * simplify the code, but there two things to keep in mind with this
                                                   >> 1088          * approach:
                                                   >> 1089          *
                                                   >> 1090          * 1. Filtering internal kernel tasks is a bit laughable in almost all
                                                   >> 1091          * cases, but there is at least one case where there is a benefit:
                                                   >> 1092          * the '-a task,never' case allows the admin to effectively disable
                                                   >> 1093          * task auditing at runtime.
                                                   >> 1094          *
                                                   >> 1095          * 2. The {set,clear}_task_syscall_work() ops likely have zero effect
                                                   >> 1096          * on these internal kernel tasks, but they probably don't hurt either.
                                                   >> 1097          */
                                                   >> 1098         return audit_alloc(tsk);
                                                   >> 1099 }
                                                   >> 1100 
1083 static inline void audit_free_context(struct     1101 static inline void audit_free_context(struct audit_context *context)
1084 {                                                1102 {
1085         /* resetting is extra work, but it is    1103         /* resetting is extra work, but it is likely just noise */
1086         audit_reset_context(context);            1104         audit_reset_context(context);
1087         audit_proctitle_free(context);        << 
1088         free_tree_refs(context);                 1105         free_tree_refs(context);
1089         kfree(context->filterkey);               1106         kfree(context->filterkey);
1090         kfree(context);                          1107         kfree(context);
1091 }                                                1108 }
1092                                                  1109 
1093 static int audit_log_pid_context(struct audit    1110 static int audit_log_pid_context(struct audit_context *context, pid_t pid,
1094                                  kuid_t auid,    1111                                  kuid_t auid, kuid_t uid, unsigned int sessionid,
1095                                  u32 sid, cha    1112                                  u32 sid, char *comm)
1096 {                                                1113 {
1097         struct audit_buffer *ab;                 1114         struct audit_buffer *ab;
1098         char *ctx = NULL;                        1115         char *ctx = NULL;
1099         u32 len;                                 1116         u32 len;
1100         int rc = 0;                              1117         int rc = 0;
1101                                                  1118 
1102         ab = audit_log_start(context, GFP_KER    1119         ab = audit_log_start(context, GFP_KERNEL, AUDIT_OBJ_PID);
1103         if (!ab)                                 1120         if (!ab)
1104                 return rc;                       1121                 return rc;
1105                                                  1122 
1106         audit_log_format(ab, "opid=%d oauid=%    1123         audit_log_format(ab, "opid=%d oauid=%d ouid=%d oses=%d", pid,
1107                          from_kuid(&init_user    1124                          from_kuid(&init_user_ns, auid),
1108                          from_kuid(&init_user    1125                          from_kuid(&init_user_ns, uid), sessionid);
1109         if (sid) {                               1126         if (sid) {
1110                 if (security_secid_to_secctx(    1127                 if (security_secid_to_secctx(sid, &ctx, &len)) {
1111                         audit_log_format(ab,     1128                         audit_log_format(ab, " obj=(none)");
1112                         rc = 1;                  1129                         rc = 1;
1113                 } else {                         1130                 } else {
1114                         audit_log_format(ab,     1131                         audit_log_format(ab, " obj=%s", ctx);
1115                         security_release_secc    1132                         security_release_secctx(ctx, len);
1116                 }                                1133                 }
1117         }                                        1134         }
1118         audit_log_format(ab, " ocomm=");         1135         audit_log_format(ab, " ocomm=");
1119         audit_log_untrustedstring(ab, comm);     1136         audit_log_untrustedstring(ab, comm);
1120         audit_log_end(ab);                       1137         audit_log_end(ab);
1121                                                  1138 
1122         return rc;                               1139         return rc;
1123 }                                                1140 }
1124                                                  1141 
1125 static void audit_log_execve_info(struct audi    1142 static void audit_log_execve_info(struct audit_context *context,
1126                                   struct audi    1143                                   struct audit_buffer **ab)
1127 {                                                1144 {
1128         long len_max;                            1145         long len_max;
1129         long len_rem;                            1146         long len_rem;
1130         long len_full;                           1147         long len_full;
1131         long len_buf;                            1148         long len_buf;
1132         long len_abuf = 0;                       1149         long len_abuf = 0;
1133         long len_tmp;                            1150         long len_tmp;
1134         bool require_data;                       1151         bool require_data;
1135         bool encode;                             1152         bool encode;
1136         unsigned int iter;                       1153         unsigned int iter;
1137         unsigned int arg;                        1154         unsigned int arg;
1138         char *buf_head;                          1155         char *buf_head;
1139         char *buf;                               1156         char *buf;
1140         const char __user *p = (const char __    1157         const char __user *p = (const char __user *)current->mm->arg_start;
1141                                                  1158 
1142         /* NOTE: this buffer needs to be larg    1159         /* NOTE: this buffer needs to be large enough to hold all the non-arg
1143          *       data we put in the audit rec    1160          *       data we put in the audit record for this argument (see the
1144          *       code below) ... at this poin    1161          *       code below) ... at this point in time 96 is plenty */
1145         char abuf[96];                           1162         char abuf[96];
1146                                                  1163 
1147         /* NOTE: we set MAX_EXECVE_AUDIT_LEN     1164         /* NOTE: we set MAX_EXECVE_AUDIT_LEN to a rather arbitrary limit, the
1148          *       current value of 7500 is not    1165          *       current value of 7500 is not as important as the fact that it
1149          *       is less than 8k, a setting o    1166          *       is less than 8k, a setting of 7500 gives us plenty of wiggle
1150          *       room if we go over a little     1167          *       room if we go over a little bit in the logging below */
1151         WARN_ON_ONCE(MAX_EXECVE_AUDIT_LEN > 7    1168         WARN_ON_ONCE(MAX_EXECVE_AUDIT_LEN > 7500);
1152         len_max = MAX_EXECVE_AUDIT_LEN;          1169         len_max = MAX_EXECVE_AUDIT_LEN;
1153                                                  1170 
1154         /* scratch buffer to hold the userspa    1171         /* scratch buffer to hold the userspace args */
1155         buf_head = kmalloc(MAX_EXECVE_AUDIT_L    1172         buf_head = kmalloc(MAX_EXECVE_AUDIT_LEN + 1, GFP_KERNEL);
1156         if (!buf_head) {                         1173         if (!buf_head) {
1157                 audit_panic("out of memory fo    1174                 audit_panic("out of memory for argv string");
1158                 return;                          1175                 return;
1159         }                                        1176         }
1160         buf = buf_head;                          1177         buf = buf_head;
1161                                                  1178 
1162         audit_log_format(*ab, "argc=%d", cont    1179         audit_log_format(*ab, "argc=%d", context->execve.argc);
1163                                                  1180 
1164         len_rem = len_max;                       1181         len_rem = len_max;
1165         len_buf = 0;                             1182         len_buf = 0;
1166         len_full = 0;                            1183         len_full = 0;
1167         require_data = true;                     1184         require_data = true;
1168         encode = false;                          1185         encode = false;
1169         iter = 0;                                1186         iter = 0;
1170         arg = 0;                                 1187         arg = 0;
1171         do {                                     1188         do {
1172                 /* NOTE: we don't ever want t    1189                 /* NOTE: we don't ever want to trust this value for anything
1173                  *       serious, but the aud    1190                  *       serious, but the audit record format insists we
1174                  *       provide an argument     1191                  *       provide an argument length for really long arguments,
1175                  *       e.g. > MAX_EXECVE_AU    1192                  *       e.g. > MAX_EXECVE_AUDIT_LEN, so we have no choice but
1176                  *       to use strncpy_from_    1193                  *       to use strncpy_from_user() to obtain this value for
1177                  *       recording in the log    1194                  *       recording in the log, although we don't use it
1178                  *       anywhere here to avo    1195                  *       anywhere here to avoid a double-fetch problem */
1179                 if (len_full == 0)               1196                 if (len_full == 0)
1180                         len_full = strnlen_us    1197                         len_full = strnlen_user(p, MAX_ARG_STRLEN) - 1;
1181                                                  1198 
1182                 /* read more data from usersp    1199                 /* read more data from userspace */
1183                 if (require_data) {              1200                 if (require_data) {
1184                         /* can we make more r    1201                         /* can we make more room in the buffer? */
1185                         if (buf != buf_head)     1202                         if (buf != buf_head) {
1186                                 memmove(buf_h    1203                                 memmove(buf_head, buf, len_buf);
1187                                 buf = buf_hea    1204                                 buf = buf_head;
1188                         }                        1205                         }
1189                                                  1206 
1190                         /* fetch as much as w    1207                         /* fetch as much as we can of the argument */
1191                         len_tmp = strncpy_fro    1208                         len_tmp = strncpy_from_user(&buf_head[len_buf], p,
1192                                                  1209                                                     len_max - len_buf);
1193                         if (len_tmp == -EFAUL    1210                         if (len_tmp == -EFAULT) {
1194                                 /* unable to     1211                                 /* unable to copy from userspace */
1195                                 send_sig(SIGK    1212                                 send_sig(SIGKILL, current, 0);
1196                                 goto out;        1213                                 goto out;
1197                         } else if (len_tmp ==    1214                         } else if (len_tmp == (len_max - len_buf)) {
1198                                 /* buffer is     1215                                 /* buffer is not large enough */
1199                                 require_data     1216                                 require_data = true;
1200                                 /* NOTE: if w    1217                                 /* NOTE: if we are going to span multiple
1201                                  *       buff    1218                                  *       buffers force the encoding so we stand
1202                                  *       a ch    1219                                  *       a chance at a sane len_full value and
1203                                  *       cons    1220                                  *       consistent record encoding */
1204                                 encode = true    1221                                 encode = true;
1205                                 len_full = le    1222                                 len_full = len_full * 2;
1206                                 p += len_tmp;    1223                                 p += len_tmp;
1207                         } else {                 1224                         } else {
1208                                 require_data     1225                                 require_data = false;
1209                                 if (!encode)     1226                                 if (!encode)
1210                                         encod    1227                                         encode = audit_string_contains_control(
1211                                                  1228                                                                 buf, len_tmp);
1212                                 /* try to use    1229                                 /* try to use a trusted value for len_full */
1213                                 if (len_full     1230                                 if (len_full < len_max)
1214                                         len_f    1231                                         len_full = (encode ?
1215                                                  1232                                                     len_tmp * 2 : len_tmp);
1216                                 p += len_tmp     1233                                 p += len_tmp + 1;
1217                         }                        1234                         }
1218                         len_buf += len_tmp;      1235                         len_buf += len_tmp;
1219                         buf_head[len_buf] = '    1236                         buf_head[len_buf] = '\0';
1220                                                  1237 
1221                         /* length of the buff    1238                         /* length of the buffer in the audit record? */
1222                         len_abuf = (encode ?     1239                         len_abuf = (encode ? len_buf * 2 : len_buf + 2);
1223                 }                                1240                 }
1224                                                  1241 
1225                 /* write as much as we can to    1242                 /* write as much as we can to the audit log */
1226                 if (len_buf >= 0) {              1243                 if (len_buf >= 0) {
1227                         /* NOTE: some magic n    1244                         /* NOTE: some magic numbers here - basically if we
1228                          *       can't fit a     1245                          *       can't fit a reasonable amount of data into the
1229                          *       existing aud    1246                          *       existing audit buffer, flush it and start with
1230                          *       a new buffer    1247                          *       a new buffer */
1231                         if ((sizeof(abuf) + 8    1248                         if ((sizeof(abuf) + 8) > len_rem) {
1232                                 len_rem = len    1249                                 len_rem = len_max;
1233                                 audit_log_end    1250                                 audit_log_end(*ab);
1234                                 *ab = audit_l    1251                                 *ab = audit_log_start(context,
1235                                                  1252                                                       GFP_KERNEL, AUDIT_EXECVE);
1236                                 if (!*ab)        1253                                 if (!*ab)
1237                                         goto     1254                                         goto out;
1238                         }                        1255                         }
1239                                                  1256 
1240                         /* create the non-arg    1257                         /* create the non-arg portion of the arg record */
1241                         len_tmp = 0;             1258                         len_tmp = 0;
1242                         if (require_data || (    1259                         if (require_data || (iter > 0) ||
1243                             ((len_abuf + size    1260                             ((len_abuf + sizeof(abuf)) > len_rem)) {
1244                                 if (iter == 0    1261                                 if (iter == 0) {
1245                                         len_t    1262                                         len_tmp += snprintf(&abuf[len_tmp],
1246                                                  1263                                                         sizeof(abuf) - len_tmp,
1247                                                  1264                                                         " a%d_len=%lu",
1248                                                  1265                                                         arg, len_full);
1249                                 }                1266                                 }
1250                                 len_tmp += sn    1267                                 len_tmp += snprintf(&abuf[len_tmp],
1251                                                  1268                                                     sizeof(abuf) - len_tmp,
1252                                                  1269                                                     " a%d[%d]=", arg, iter++);
1253                         } else                   1270                         } else
1254                                 len_tmp += sn    1271                                 len_tmp += snprintf(&abuf[len_tmp],
1255                                                  1272                                                     sizeof(abuf) - len_tmp,
1256                                                  1273                                                     " a%d=", arg);
1257                         WARN_ON(len_tmp >= si    1274                         WARN_ON(len_tmp >= sizeof(abuf));
1258                         abuf[sizeof(abuf) - 1    1275                         abuf[sizeof(abuf) - 1] = '\0';
1259                                                  1276 
1260                         /* log the arg in the    1277                         /* log the arg in the audit record */
1261                         audit_log_format(*ab,    1278                         audit_log_format(*ab, "%s", abuf);
1262                         len_rem -= len_tmp;      1279                         len_rem -= len_tmp;
1263                         len_tmp = len_buf;       1280                         len_tmp = len_buf;
1264                         if (encode) {            1281                         if (encode) {
1265                                 if (len_abuf     1282                                 if (len_abuf > len_rem)
1266                                         len_t    1283                                         len_tmp = len_rem / 2; /* encoding */
1267                                 audit_log_n_h    1284                                 audit_log_n_hex(*ab, buf, len_tmp);
1268                                 len_rem -= le    1285                                 len_rem -= len_tmp * 2;
1269                                 len_abuf -= l    1286                                 len_abuf -= len_tmp * 2;
1270                         } else {                 1287                         } else {
1271                                 if (len_abuf     1288                                 if (len_abuf > len_rem)
1272                                         len_t    1289                                         len_tmp = len_rem - 2; /* quotes */
1273                                 audit_log_n_s    1290                                 audit_log_n_string(*ab, buf, len_tmp);
1274                                 len_rem -= le    1291                                 len_rem -= len_tmp + 2;
1275                                 /* don't subt    1292                                 /* don't subtract the "2" because we still need
1276                                  * to add quo    1293                                  * to add quotes to the remaining string */
1277                                 len_abuf -= l    1294                                 len_abuf -= len_tmp;
1278                         }                        1295                         }
1279                         len_buf -= len_tmp;      1296                         len_buf -= len_tmp;
1280                         buf += len_tmp;          1297                         buf += len_tmp;
1281                 }                                1298                 }
1282                                                  1299 
1283                 /* ready to move to the next     1300                 /* ready to move to the next argument? */
1284                 if ((len_buf == 0) && !requir    1301                 if ((len_buf == 0) && !require_data) {
1285                         arg++;                   1302                         arg++;
1286                         iter = 0;                1303                         iter = 0;
1287                         len_full = 0;            1304                         len_full = 0;
1288                         require_data = true;     1305                         require_data = true;
1289                         encode = false;          1306                         encode = false;
1290                 }                                1307                 }
1291         } while (arg < context->execve.argc);    1308         } while (arg < context->execve.argc);
1292                                                  1309 
1293         /* NOTE: the caller handles the final    1310         /* NOTE: the caller handles the final audit_log_end() call */
1294                                                  1311 
1295 out:                                             1312 out:
1296         kfree(buf_head);                         1313         kfree(buf_head);
1297 }                                                1314 }
1298                                                  1315 
1299 static void audit_log_cap(struct audit_buffer    1316 static void audit_log_cap(struct audit_buffer *ab, char *prefix,
1300                           kernel_cap_t *cap)     1317                           kernel_cap_t *cap)
1301 {                                                1318 {
                                                   >> 1319         int i;
                                                   >> 1320 
1302         if (cap_isclear(*cap)) {                 1321         if (cap_isclear(*cap)) {
1303                 audit_log_format(ab, " %s=0",    1322                 audit_log_format(ab, " %s=0", prefix);
1304                 return;                          1323                 return;
1305         }                                        1324         }
1306         audit_log_format(ab, " %s=%016llx", p !! 1325         audit_log_format(ab, " %s=", prefix);
                                                   >> 1326         CAP_FOR_EACH_U32(i)
                                                   >> 1327                 audit_log_format(ab, "%08x", cap->cap[CAP_LAST_U32 - i]);
1307 }                                                1328 }
1308                                                  1329 
1309 static void audit_log_fcaps(struct audit_buff    1330 static void audit_log_fcaps(struct audit_buffer *ab, struct audit_names *name)
1310 {                                                1331 {
1311         if (name->fcap_ver == -1) {              1332         if (name->fcap_ver == -1) {
1312                 audit_log_format(ab, " cap_fe    1333                 audit_log_format(ab, " cap_fe=? cap_fver=? cap_fp=? cap_fi=?");
1313                 return;                          1334                 return;
1314         }                                        1335         }
1315         audit_log_cap(ab, "cap_fp", &name->fc    1336         audit_log_cap(ab, "cap_fp", &name->fcap.permitted);
1316         audit_log_cap(ab, "cap_fi", &name->fc    1337         audit_log_cap(ab, "cap_fi", &name->fcap.inheritable);
1317         audit_log_format(ab, " cap_fe=%d cap_    1338         audit_log_format(ab, " cap_fe=%d cap_fver=%x cap_frootid=%d",
1318                          name->fcap.fE, name-    1339                          name->fcap.fE, name->fcap_ver,
1319                          from_kuid(&init_user    1340                          from_kuid(&init_user_ns, name->fcap.rootid));
1320 }                                                1341 }
1321                                                  1342 
1322 static void audit_log_time(struct audit_conte    1343 static void audit_log_time(struct audit_context *context, struct audit_buffer **ab)
1323 {                                                1344 {
1324         const struct audit_ntp_data *ntp = &c    1345         const struct audit_ntp_data *ntp = &context->time.ntp_data;
1325         const struct timespec64 *tk = &contex    1346         const struct timespec64 *tk = &context->time.tk_injoffset;
1326         static const char * const ntp_name[]     1347         static const char * const ntp_name[] = {
1327                 "offset",                        1348                 "offset",
1328                 "freq",                          1349                 "freq",
1329                 "status",                        1350                 "status",
1330                 "tai",                           1351                 "tai",
1331                 "tick",                          1352                 "tick",
1332                 "adjust",                        1353                 "adjust",
1333         };                                       1354         };
1334         int type;                                1355         int type;
1335                                                  1356 
1336         if (context->type == AUDIT_TIME_ADJNT    1357         if (context->type == AUDIT_TIME_ADJNTPVAL) {
1337                 for (type = 0; type < AUDIT_N    1358                 for (type = 0; type < AUDIT_NTP_NVALS; type++) {
1338                         if (ntp->vals[type].n    1359                         if (ntp->vals[type].newval != ntp->vals[type].oldval) {
1339                                 if (!*ab) {      1360                                 if (!*ab) {
1340                                         *ab =    1361                                         *ab = audit_log_start(context,
1341                                                  1362                                                         GFP_KERNEL,
1342                                                  1363                                                         AUDIT_TIME_ADJNTPVAL);
1343                                         if (!    1364                                         if (!*ab)
1344                                                  1365                                                 return;
1345                                 }                1366                                 }
1346                                 audit_log_for    1367                                 audit_log_format(*ab, "op=%s old=%lli new=%lli",
1347                                                  1368                                                  ntp_name[type],
1348                                                  1369                                                  ntp->vals[type].oldval,
1349                                                  1370                                                  ntp->vals[type].newval);
1350                                 audit_log_end    1371                                 audit_log_end(*ab);
1351                                 *ab = NULL;      1372                                 *ab = NULL;
1352                         }                        1373                         }
1353                 }                                1374                 }
1354         }                                        1375         }
1355         if (tk->tv_sec != 0 || tk->tv_nsec !=    1376         if (tk->tv_sec != 0 || tk->tv_nsec != 0) {
1356                 if (!*ab) {                      1377                 if (!*ab) {
1357                         *ab = audit_log_start    1378                         *ab = audit_log_start(context, GFP_KERNEL,
1358                                                  1379                                               AUDIT_TIME_INJOFFSET);
1359                         if (!*ab)                1380                         if (!*ab)
1360                                 return;          1381                                 return;
1361                 }                                1382                 }
1362                 audit_log_format(*ab, "sec=%l    1383                 audit_log_format(*ab, "sec=%lli nsec=%li",
1363                                  (long long)t    1384                                  (long long)tk->tv_sec, tk->tv_nsec);
1364                 audit_log_end(*ab);              1385                 audit_log_end(*ab);
1365                 *ab = NULL;                      1386                 *ab = NULL;
1366         }                                        1387         }
1367 }                                                1388 }
1368                                                  1389 
1369 static void show_special(struct audit_context    1390 static void show_special(struct audit_context *context, int *call_panic)
1370 {                                                1391 {
1371         struct audit_buffer *ab;                 1392         struct audit_buffer *ab;
1372         int i;                                   1393         int i;
1373                                                  1394 
1374         ab = audit_log_start(context, GFP_KER    1395         ab = audit_log_start(context, GFP_KERNEL, context->type);
1375         if (!ab)                                 1396         if (!ab)
1376                 return;                          1397                 return;
1377                                                  1398 
1378         switch (context->type) {                 1399         switch (context->type) {
1379         case AUDIT_SOCKETCALL: {                 1400         case AUDIT_SOCKETCALL: {
1380                 int nargs = context->socketca    1401                 int nargs = context->socketcall.nargs;
1381                                                  1402 
1382                 audit_log_format(ab, "nargs=%    1403                 audit_log_format(ab, "nargs=%d", nargs);
1383                 for (i = 0; i < nargs; i++)      1404                 for (i = 0; i < nargs; i++)
1384                         audit_log_format(ab,     1405                         audit_log_format(ab, " a%d=%lx", i,
1385                                 context->sock    1406                                 context->socketcall.args[i]);
1386                 break; }                         1407                 break; }
1387         case AUDIT_IPC: {                        1408         case AUDIT_IPC: {
1388                 u32 osid = context->ipc.osid;    1409                 u32 osid = context->ipc.osid;
1389                                                  1410 
1390                 audit_log_format(ab, "ouid=%u    1411                 audit_log_format(ab, "ouid=%u ogid=%u mode=%#ho",
1391                                  from_kuid(&i    1412                                  from_kuid(&init_user_ns, context->ipc.uid),
1392                                  from_kgid(&i    1413                                  from_kgid(&init_user_ns, context->ipc.gid),
1393                                  context->ipc    1414                                  context->ipc.mode);
1394                 if (osid) {                      1415                 if (osid) {
1395                         char *ctx = NULL;        1416                         char *ctx = NULL;
1396                         u32 len;                 1417                         u32 len;
1397                                                  1418 
1398                         if (security_secid_to    1419                         if (security_secid_to_secctx(osid, &ctx, &len)) {
1399                                 audit_log_for    1420                                 audit_log_format(ab, " osid=%u", osid);
1400                                 *call_panic =    1421                                 *call_panic = 1;
1401                         } else {                 1422                         } else {
1402                                 audit_log_for    1423                                 audit_log_format(ab, " obj=%s", ctx);
1403                                 security_rele    1424                                 security_release_secctx(ctx, len);
1404                         }                        1425                         }
1405                 }                                1426                 }
1406                 if (context->ipc.has_perm) {     1427                 if (context->ipc.has_perm) {
1407                         audit_log_end(ab);       1428                         audit_log_end(ab);
1408                         ab = audit_log_start(    1429                         ab = audit_log_start(context, GFP_KERNEL,
1409                                                  1430                                              AUDIT_IPC_SET_PERM);
1410                         if (unlikely(!ab))       1431                         if (unlikely(!ab))
1411                                 return;          1432                                 return;
1412                         audit_log_format(ab,     1433                         audit_log_format(ab,
1413                                 "qbytes=%lx o    1434                                 "qbytes=%lx ouid=%u ogid=%u mode=%#ho",
1414                                 context->ipc.    1435                                 context->ipc.qbytes,
1415                                 context->ipc.    1436                                 context->ipc.perm_uid,
1416                                 context->ipc.    1437                                 context->ipc.perm_gid,
1417                                 context->ipc.    1438                                 context->ipc.perm_mode);
1418                 }                                1439                 }
1419                 break; }                         1440                 break; }
1420         case AUDIT_MQ_OPEN:                      1441         case AUDIT_MQ_OPEN:
1421                 audit_log_format(ab,             1442                 audit_log_format(ab,
1422                         "oflag=0x%x mode=%#ho    1443                         "oflag=0x%x mode=%#ho mq_flags=0x%lx mq_maxmsg=%ld "
1423                         "mq_msgsize=%ld mq_cu    1444                         "mq_msgsize=%ld mq_curmsgs=%ld",
1424                         context->mq_open.ofla    1445                         context->mq_open.oflag, context->mq_open.mode,
1425                         context->mq_open.attr    1446                         context->mq_open.attr.mq_flags,
1426                         context->mq_open.attr    1447                         context->mq_open.attr.mq_maxmsg,
1427                         context->mq_open.attr    1448                         context->mq_open.attr.mq_msgsize,
1428                         context->mq_open.attr    1449                         context->mq_open.attr.mq_curmsgs);
1429                 break;                           1450                 break;
1430         case AUDIT_MQ_SENDRECV:                  1451         case AUDIT_MQ_SENDRECV:
1431                 audit_log_format(ab,             1452                 audit_log_format(ab,
1432                         "mqdes=%d msg_len=%zd    1453                         "mqdes=%d msg_len=%zd msg_prio=%u "
1433                         "abs_timeout_sec=%lld    1454                         "abs_timeout_sec=%lld abs_timeout_nsec=%ld",
1434                         context->mq_sendrecv.    1455                         context->mq_sendrecv.mqdes,
1435                         context->mq_sendrecv.    1456                         context->mq_sendrecv.msg_len,
1436                         context->mq_sendrecv.    1457                         context->mq_sendrecv.msg_prio,
1437                         (long long) context->    1458                         (long long) context->mq_sendrecv.abs_timeout.tv_sec,
1438                         context->mq_sendrecv.    1459                         context->mq_sendrecv.abs_timeout.tv_nsec);
1439                 break;                           1460                 break;
1440         case AUDIT_MQ_NOTIFY:                    1461         case AUDIT_MQ_NOTIFY:
1441                 audit_log_format(ab, "mqdes=%    1462                 audit_log_format(ab, "mqdes=%d sigev_signo=%d",
1442                                 context->mq_n    1463                                 context->mq_notify.mqdes,
1443                                 context->mq_n    1464                                 context->mq_notify.sigev_signo);
1444                 break;                           1465                 break;
1445         case AUDIT_MQ_GETSETATTR: {              1466         case AUDIT_MQ_GETSETATTR: {
1446                 struct mq_attr *attr = &conte    1467                 struct mq_attr *attr = &context->mq_getsetattr.mqstat;
1447                                                  1468 
1448                 audit_log_format(ab,             1469                 audit_log_format(ab,
1449                         "mqdes=%d mq_flags=0x    1470                         "mqdes=%d mq_flags=0x%lx mq_maxmsg=%ld mq_msgsize=%ld "
1450                         "mq_curmsgs=%ld ",       1471                         "mq_curmsgs=%ld ",
1451                         context->mq_getsetatt    1472                         context->mq_getsetattr.mqdes,
1452                         attr->mq_flags, attr-    1473                         attr->mq_flags, attr->mq_maxmsg,
1453                         attr->mq_msgsize, att    1474                         attr->mq_msgsize, attr->mq_curmsgs);
1454                 break; }                         1475                 break; }
1455         case AUDIT_CAPSET:                       1476         case AUDIT_CAPSET:
1456                 audit_log_format(ab, "pid=%d"    1477                 audit_log_format(ab, "pid=%d", context->capset.pid);
1457                 audit_log_cap(ab, "cap_pi", &    1478                 audit_log_cap(ab, "cap_pi", &context->capset.cap.inheritable);
1458                 audit_log_cap(ab, "cap_pp", &    1479                 audit_log_cap(ab, "cap_pp", &context->capset.cap.permitted);
1459                 audit_log_cap(ab, "cap_pe", &    1480                 audit_log_cap(ab, "cap_pe", &context->capset.cap.effective);
1460                 audit_log_cap(ab, "cap_pa", &    1481                 audit_log_cap(ab, "cap_pa", &context->capset.cap.ambient);
1461                 break;                           1482                 break;
1462         case AUDIT_MMAP:                         1483         case AUDIT_MMAP:
1463                 audit_log_format(ab, "fd=%d f    1484                 audit_log_format(ab, "fd=%d flags=0x%x", context->mmap.fd,
1464                                  context->mma    1485                                  context->mmap.flags);
1465                 break;                           1486                 break;
1466         case AUDIT_OPENAT2:                      1487         case AUDIT_OPENAT2:
1467                 audit_log_format(ab, "oflag=0    1488                 audit_log_format(ab, "oflag=0%llo mode=0%llo resolve=0x%llx",
1468                                  context->ope    1489                                  context->openat2.flags,
1469                                  context->ope    1490                                  context->openat2.mode,
1470                                  context->ope    1491                                  context->openat2.resolve);
1471                 break;                           1492                 break;
1472         case AUDIT_EXECVE:                       1493         case AUDIT_EXECVE:
1473                 audit_log_execve_info(context    1494                 audit_log_execve_info(context, &ab);
1474                 break;                           1495                 break;
1475         case AUDIT_KERN_MODULE:                  1496         case AUDIT_KERN_MODULE:
1476                 audit_log_format(ab, "name=")    1497                 audit_log_format(ab, "name=");
1477                 if (context->module.name) {      1498                 if (context->module.name) {
1478                         audit_log_untrustedst    1499                         audit_log_untrustedstring(ab, context->module.name);
1479                 } else                           1500                 } else
1480                         audit_log_format(ab,     1501                         audit_log_format(ab, "(null)");
1481                                                  1502 
1482                 break;                           1503                 break;
1483         case AUDIT_TIME_ADJNTPVAL:               1504         case AUDIT_TIME_ADJNTPVAL:
1484         case AUDIT_TIME_INJOFFSET:               1505         case AUDIT_TIME_INJOFFSET:
1485                 /* this call deviates from th    1506                 /* this call deviates from the rest, eating the buffer */
1486                 audit_log_time(context, &ab);    1507                 audit_log_time(context, &ab);
1487                 break;                           1508                 break;
1488         }                                        1509         }
1489         audit_log_end(ab);                       1510         audit_log_end(ab);
1490 }                                                1511 }
1491                                                  1512 
1492 static inline int audit_proctitle_rtrim(char     1513 static inline int audit_proctitle_rtrim(char *proctitle, int len)
1493 {                                                1514 {
1494         char *end = proctitle + len - 1;         1515         char *end = proctitle + len - 1;
1495                                                  1516 
1496         while (end > proctitle && !isprint(*e    1517         while (end > proctitle && !isprint(*end))
1497                 end--;                           1518                 end--;
1498                                                  1519 
1499         /* catch the case where proctitle is     1520         /* catch the case where proctitle is only 1 non-print character */
1500         len = end - proctitle + 1;               1521         len = end - proctitle + 1;
1501         len -= isprint(proctitle[len-1]) == 0    1522         len -= isprint(proctitle[len-1]) == 0;
1502         return len;                              1523         return len;
1503 }                                                1524 }
1504                                                  1525 
1505 /*                                               1526 /*
1506  * audit_log_name - produce AUDIT_PATH record    1527  * audit_log_name - produce AUDIT_PATH record from struct audit_names
1507  * @context: audit_context for the task          1528  * @context: audit_context for the task
1508  * @n: audit_names structure with reportable     1529  * @n: audit_names structure with reportable details
1509  * @path: optional path to report instead of     1530  * @path: optional path to report instead of audit_names->name
1510  * @record_num: record number to report when     1531  * @record_num: record number to report when handling a list of names
1511  * @call_panic: optional pointer to int that     1532  * @call_panic: optional pointer to int that will be updated if secid fails
1512  */                                              1533  */
1513 static void audit_log_name(struct audit_conte    1534 static void audit_log_name(struct audit_context *context, struct audit_names *n,
1514                     const struct path *path,     1535                     const struct path *path, int record_num, int *call_panic)
1515 {                                                1536 {
1516         struct audit_buffer *ab;                 1537         struct audit_buffer *ab;
1517                                                  1538 
1518         ab = audit_log_start(context, GFP_KER    1539         ab = audit_log_start(context, GFP_KERNEL, AUDIT_PATH);
1519         if (!ab)                                 1540         if (!ab)
1520                 return;                          1541                 return;
1521                                                  1542 
1522         audit_log_format(ab, "item=%d", recor    1543         audit_log_format(ab, "item=%d", record_num);
1523                                                  1544 
1524         if (path)                                1545         if (path)
1525                 audit_log_d_path(ab, " name="    1546                 audit_log_d_path(ab, " name=", path);
1526         else if (n->name) {                      1547         else if (n->name) {
1527                 switch (n->name_len) {           1548                 switch (n->name_len) {
1528                 case AUDIT_NAME_FULL:            1549                 case AUDIT_NAME_FULL:
1529                         /* log the full path     1550                         /* log the full path */
1530                         audit_log_format(ab,     1551                         audit_log_format(ab, " name=");
1531                         audit_log_untrustedst    1552                         audit_log_untrustedstring(ab, n->name->name);
1532                         break;                   1553                         break;
1533                 case 0:                          1554                 case 0:
1534                         /* name was specified    1555                         /* name was specified as a relative path and the
1535                          * directory componen    1556                          * directory component is the cwd
1536                          */                      1557                          */
1537                         if (context->pwd.dent    1558                         if (context->pwd.dentry && context->pwd.mnt)
1538                                 audit_log_d_p    1559                                 audit_log_d_path(ab, " name=", &context->pwd);
1539                         else                     1560                         else
1540                                 audit_log_for    1561                                 audit_log_format(ab, " name=(null)");
1541                         break;                   1562                         break;
1542                 default:                         1563                 default:
1543                         /* log the name's dir    1564                         /* log the name's directory component */
1544                         audit_log_format(ab,     1565                         audit_log_format(ab, " name=");
1545                         audit_log_n_untrusted    1566                         audit_log_n_untrustedstring(ab, n->name->name,
1546                                                  1567                                                     n->name_len);
1547                 }                                1568                 }
1548         } else                                   1569         } else
1549                 audit_log_format(ab, " name=(    1570                 audit_log_format(ab, " name=(null)");
1550                                                  1571 
1551         if (n->ino != AUDIT_INO_UNSET)           1572         if (n->ino != AUDIT_INO_UNSET)
1552                 audit_log_format(ab, " inode=    1573                 audit_log_format(ab, " inode=%lu dev=%02x:%02x mode=%#ho ouid=%u ogid=%u rdev=%02x:%02x",
1553                                  n->ino,         1574                                  n->ino,
1554                                  MAJOR(n->dev    1575                                  MAJOR(n->dev),
1555                                  MINOR(n->dev    1576                                  MINOR(n->dev),
1556                                  n->mode,        1577                                  n->mode,
1557                                  from_kuid(&i    1578                                  from_kuid(&init_user_ns, n->uid),
1558                                  from_kgid(&i    1579                                  from_kgid(&init_user_ns, n->gid),
1559                                  MAJOR(n->rde    1580                                  MAJOR(n->rdev),
1560                                  MINOR(n->rde    1581                                  MINOR(n->rdev));
1561         if (n->osid != 0) {                      1582         if (n->osid != 0) {
1562                 char *ctx = NULL;                1583                 char *ctx = NULL;
1563                 u32 len;                         1584                 u32 len;
1564                                                  1585 
1565                 if (security_secid_to_secctx(    1586                 if (security_secid_to_secctx(
1566                         n->osid, &ctx, &len))    1587                         n->osid, &ctx, &len)) {
1567                         audit_log_format(ab,     1588                         audit_log_format(ab, " osid=%u", n->osid);
1568                         if (call_panic)          1589                         if (call_panic)
1569                                 *call_panic =    1590                                 *call_panic = 2;
1570                 } else {                         1591                 } else {
1571                         audit_log_format(ab,     1592                         audit_log_format(ab, " obj=%s", ctx);
1572                         security_release_secc    1593                         security_release_secctx(ctx, len);
1573                 }                                1594                 }
1574         }                                        1595         }
1575                                                  1596 
1576         /* log the audit_names record type */    1597         /* log the audit_names record type */
1577         switch (n->type) {                       1598         switch (n->type) {
1578         case AUDIT_TYPE_NORMAL:                  1599         case AUDIT_TYPE_NORMAL:
1579                 audit_log_format(ab, " namety    1600                 audit_log_format(ab, " nametype=NORMAL");
1580                 break;                           1601                 break;
1581         case AUDIT_TYPE_PARENT:                  1602         case AUDIT_TYPE_PARENT:
1582                 audit_log_format(ab, " namety    1603                 audit_log_format(ab, " nametype=PARENT");
1583                 break;                           1604                 break;
1584         case AUDIT_TYPE_CHILD_DELETE:            1605         case AUDIT_TYPE_CHILD_DELETE:
1585                 audit_log_format(ab, " namety    1606                 audit_log_format(ab, " nametype=DELETE");
1586                 break;                           1607                 break;
1587         case AUDIT_TYPE_CHILD_CREATE:            1608         case AUDIT_TYPE_CHILD_CREATE:
1588                 audit_log_format(ab, " namety    1609                 audit_log_format(ab, " nametype=CREATE");
1589                 break;                           1610                 break;
1590         default:                                 1611         default:
1591                 audit_log_format(ab, " namety    1612                 audit_log_format(ab, " nametype=UNKNOWN");
1592                 break;                           1613                 break;
1593         }                                        1614         }
1594                                                  1615 
1595         audit_log_fcaps(ab, n);                  1616         audit_log_fcaps(ab, n);
1596         audit_log_end(ab);                       1617         audit_log_end(ab);
1597 }                                                1618 }
1598                                                  1619 
1599 static void audit_log_proctitle(void)            1620 static void audit_log_proctitle(void)
1600 {                                                1621 {
1601         int res;                                 1622         int res;
1602         char *buf;                               1623         char *buf;
1603         char *msg = "(null)";                    1624         char *msg = "(null)";
1604         int len = strlen(msg);                   1625         int len = strlen(msg);
1605         struct audit_context *context = audit    1626         struct audit_context *context = audit_context();
1606         struct audit_buffer *ab;                 1627         struct audit_buffer *ab;
1607                                                  1628 
1608         ab = audit_log_start(context, GFP_KER    1629         ab = audit_log_start(context, GFP_KERNEL, AUDIT_PROCTITLE);
1609         if (!ab)                                 1630         if (!ab)
1610                 return; /* audit_panic or bei    1631                 return; /* audit_panic or being filtered */
1611                                                  1632 
1612         audit_log_format(ab, "proctitle=");      1633         audit_log_format(ab, "proctitle=");
1613                                                  1634 
1614         /* Not  cached */                        1635         /* Not  cached */
1615         if (!context->proctitle.value) {         1636         if (!context->proctitle.value) {
1616                 buf = kmalloc(MAX_PROCTITLE_A    1637                 buf = kmalloc(MAX_PROCTITLE_AUDIT_LEN, GFP_KERNEL);
1617                 if (!buf)                        1638                 if (!buf)
1618                         goto out;                1639                         goto out;
1619                 /* Historically called this f    1640                 /* Historically called this from procfs naming */
1620                 res = get_cmdline(current, bu    1641                 res = get_cmdline(current, buf, MAX_PROCTITLE_AUDIT_LEN);
1621                 if (res == 0) {                  1642                 if (res == 0) {
1622                         kfree(buf);              1643                         kfree(buf);
1623                         goto out;                1644                         goto out;
1624                 }                                1645                 }
1625                 res = audit_proctitle_rtrim(b    1646                 res = audit_proctitle_rtrim(buf, res);
1626                 if (res == 0) {                  1647                 if (res == 0) {
1627                         kfree(buf);              1648                         kfree(buf);
1628                         goto out;                1649                         goto out;
1629                 }                                1650                 }
1630                 context->proctitle.value = bu    1651                 context->proctitle.value = buf;
1631                 context->proctitle.len = res;    1652                 context->proctitle.len = res;
1632         }                                        1653         }
1633         msg = context->proctitle.value;          1654         msg = context->proctitle.value;
1634         len = context->proctitle.len;            1655         len = context->proctitle.len;
1635 out:                                             1656 out:
1636         audit_log_n_untrustedstring(ab, msg,     1657         audit_log_n_untrustedstring(ab, msg, len);
1637         audit_log_end(ab);                       1658         audit_log_end(ab);
1638 }                                                1659 }
1639                                                  1660 
1640 /**                                              1661 /**
1641  * audit_log_uring - generate a AUDIT_URINGOP    1662  * audit_log_uring - generate a AUDIT_URINGOP record
1642  * @ctx: the audit context                       1663  * @ctx: the audit context
1643  */                                              1664  */
1644 static void audit_log_uring(struct audit_cont    1665 static void audit_log_uring(struct audit_context *ctx)
1645 {                                                1666 {
1646         struct audit_buffer *ab;                 1667         struct audit_buffer *ab;
1647         const struct cred *cred;                 1668         const struct cred *cred;
1648                                                  1669 
1649         ab = audit_log_start(ctx, GFP_ATOMIC,    1670         ab = audit_log_start(ctx, GFP_ATOMIC, AUDIT_URINGOP);
1650         if (!ab)                                 1671         if (!ab)
1651                 return;                          1672                 return;
1652         cred = current_cred();                   1673         cred = current_cred();
1653         audit_log_format(ab, "uring_op=%d", c    1674         audit_log_format(ab, "uring_op=%d", ctx->uring_op);
1654         if (ctx->return_valid != AUDITSC_INVA    1675         if (ctx->return_valid != AUDITSC_INVALID)
1655                 audit_log_format(ab, " succes    1676                 audit_log_format(ab, " success=%s exit=%ld",
1656                                  (ctx->return    1677                                  (ctx->return_valid == AUDITSC_SUCCESS ?
1657                                   "yes" : "no    1678                                   "yes" : "no"),
1658                                  ctx->return_    1679                                  ctx->return_code);
1659         audit_log_format(ab,                     1680         audit_log_format(ab,
1660                          " items=%d"             1681                          " items=%d"
1661                          " ppid=%d pid=%d uid    1682                          " ppid=%d pid=%d uid=%u gid=%u euid=%u suid=%u"
1662                          " fsuid=%u egid=%u s    1683                          " fsuid=%u egid=%u sgid=%u fsgid=%u",
1663                          ctx->name_count,        1684                          ctx->name_count,
1664                          task_ppid_nr(current    1685                          task_ppid_nr(current), task_tgid_nr(current),
1665                          from_kuid(&init_user    1686                          from_kuid(&init_user_ns, cred->uid),
1666                          from_kgid(&init_user    1687                          from_kgid(&init_user_ns, cred->gid),
1667                          from_kuid(&init_user    1688                          from_kuid(&init_user_ns, cred->euid),
1668                          from_kuid(&init_user    1689                          from_kuid(&init_user_ns, cred->suid),
1669                          from_kuid(&init_user    1690                          from_kuid(&init_user_ns, cred->fsuid),
1670                          from_kgid(&init_user    1691                          from_kgid(&init_user_ns, cred->egid),
1671                          from_kgid(&init_user    1692                          from_kgid(&init_user_ns, cred->sgid),
1672                          from_kgid(&init_user    1693                          from_kgid(&init_user_ns, cred->fsgid));
1673         audit_log_task_context(ab);              1694         audit_log_task_context(ab);
1674         audit_log_key(ab, ctx->filterkey);       1695         audit_log_key(ab, ctx->filterkey);
1675         audit_log_end(ab);                       1696         audit_log_end(ab);
1676 }                                                1697 }
1677                                                  1698 
1678 static void audit_log_exit(void)                 1699 static void audit_log_exit(void)
1679 {                                                1700 {
1680         int i, call_panic = 0;                   1701         int i, call_panic = 0;
1681         struct audit_context *context = audit    1702         struct audit_context *context = audit_context();
1682         struct audit_buffer *ab;                 1703         struct audit_buffer *ab;
1683         struct audit_aux_data *aux;              1704         struct audit_aux_data *aux;
1684         struct audit_names *n;                   1705         struct audit_names *n;
1685                                                  1706 
1686         context->personality = current->perso    1707         context->personality = current->personality;
1687                                                  1708 
1688         switch (context->context) {              1709         switch (context->context) {
1689         case AUDIT_CTX_SYSCALL:                  1710         case AUDIT_CTX_SYSCALL:
1690                 ab = audit_log_start(context,    1711                 ab = audit_log_start(context, GFP_KERNEL, AUDIT_SYSCALL);
1691                 if (!ab)                         1712                 if (!ab)
1692                         return;                  1713                         return;
1693                 audit_log_format(ab, "arch=%x    1714                 audit_log_format(ab, "arch=%x syscall=%d",
1694                                  context->arc    1715                                  context->arch, context->major);
1695                 if (context->personality != P    1716                 if (context->personality != PER_LINUX)
1696                         audit_log_format(ab,     1717                         audit_log_format(ab, " per=%lx", context->personality);
1697                 if (context->return_valid !=     1718                 if (context->return_valid != AUDITSC_INVALID)
1698                         audit_log_format(ab,     1719                         audit_log_format(ab, " success=%s exit=%ld",
1699                                          (con    1720                                          (context->return_valid == AUDITSC_SUCCESS ?
1700                                           "ye    1721                                           "yes" : "no"),
1701                                          cont    1722                                          context->return_code);
1702                 audit_log_format(ab,             1723                 audit_log_format(ab,
1703                                  " a0=%lx a1=    1724                                  " a0=%lx a1=%lx a2=%lx a3=%lx items=%d",
1704                                  context->arg    1725                                  context->argv[0],
1705                                  context->arg    1726                                  context->argv[1],
1706                                  context->arg    1727                                  context->argv[2],
1707                                  context->arg    1728                                  context->argv[3],
1708                                  context->nam    1729                                  context->name_count);
1709                 audit_log_task_info(ab);         1730                 audit_log_task_info(ab);
1710                 audit_log_key(ab, context->fi    1731                 audit_log_key(ab, context->filterkey);
1711                 audit_log_end(ab);               1732                 audit_log_end(ab);
1712                 break;                           1733                 break;
1713         case AUDIT_CTX_URING:                    1734         case AUDIT_CTX_URING:
1714                 audit_log_uring(context);        1735                 audit_log_uring(context);
1715                 break;                           1736                 break;
1716         default:                                 1737         default:
1717                 BUG();                           1738                 BUG();
1718                 break;                           1739                 break;
1719         }                                        1740         }
1720                                                  1741 
1721         for (aux = context->aux; aux; aux = a    1742         for (aux = context->aux; aux; aux = aux->next) {
1722                                                  1743 
1723                 ab = audit_log_start(context,    1744                 ab = audit_log_start(context, GFP_KERNEL, aux->type);
1724                 if (!ab)                         1745                 if (!ab)
1725                         continue; /* audit_pa    1746                         continue; /* audit_panic has been called */
1726                                                  1747 
1727                 switch (aux->type) {             1748                 switch (aux->type) {
1728                                                  1749 
1729                 case AUDIT_BPRM_FCAPS: {         1750                 case AUDIT_BPRM_FCAPS: {
1730                         struct audit_aux_data    1751                         struct audit_aux_data_bprm_fcaps *axs = (void *)aux;
1731                                                  1752 
1732                         audit_log_format(ab,     1753                         audit_log_format(ab, "fver=%x", axs->fcap_ver);
1733                         audit_log_cap(ab, "fp    1754                         audit_log_cap(ab, "fp", &axs->fcap.permitted);
1734                         audit_log_cap(ab, "fi    1755                         audit_log_cap(ab, "fi", &axs->fcap.inheritable);
1735                         audit_log_format(ab,     1756                         audit_log_format(ab, " fe=%d", axs->fcap.fE);
1736                         audit_log_cap(ab, "ol    1757                         audit_log_cap(ab, "old_pp", &axs->old_pcap.permitted);
1737                         audit_log_cap(ab, "ol    1758                         audit_log_cap(ab, "old_pi", &axs->old_pcap.inheritable);
1738                         audit_log_cap(ab, "ol    1759                         audit_log_cap(ab, "old_pe", &axs->old_pcap.effective);
1739                         audit_log_cap(ab, "ol    1760                         audit_log_cap(ab, "old_pa", &axs->old_pcap.ambient);
1740                         audit_log_cap(ab, "pp    1761                         audit_log_cap(ab, "pp", &axs->new_pcap.permitted);
1741                         audit_log_cap(ab, "pi    1762                         audit_log_cap(ab, "pi", &axs->new_pcap.inheritable);
1742                         audit_log_cap(ab, "pe    1763                         audit_log_cap(ab, "pe", &axs->new_pcap.effective);
1743                         audit_log_cap(ab, "pa    1764                         audit_log_cap(ab, "pa", &axs->new_pcap.ambient);
1744                         audit_log_format(ab,     1765                         audit_log_format(ab, " frootid=%d",
1745                                          from    1766                                          from_kuid(&init_user_ns,
1746                                                  1767                                                    axs->fcap.rootid));
1747                         break; }                 1768                         break; }
1748                                                  1769 
1749                 }                                1770                 }
1750                 audit_log_end(ab);               1771                 audit_log_end(ab);
1751         }                                        1772         }
1752                                                  1773 
1753         if (context->type)                       1774         if (context->type)
1754                 show_special(context, &call_p    1775                 show_special(context, &call_panic);
1755                                                  1776 
1756         if (context->fds[0] >= 0) {              1777         if (context->fds[0] >= 0) {
1757                 ab = audit_log_start(context,    1778                 ab = audit_log_start(context, GFP_KERNEL, AUDIT_FD_PAIR);
1758                 if (ab) {                        1779                 if (ab) {
1759                         audit_log_format(ab,     1780                         audit_log_format(ab, "fd0=%d fd1=%d",
1760                                         conte    1781                                         context->fds[0], context->fds[1]);
1761                         audit_log_end(ab);       1782                         audit_log_end(ab);
1762                 }                                1783                 }
1763         }                                        1784         }
1764                                                  1785 
1765         if (context->sockaddr_len) {             1786         if (context->sockaddr_len) {
1766                 ab = audit_log_start(context,    1787                 ab = audit_log_start(context, GFP_KERNEL, AUDIT_SOCKADDR);
1767                 if (ab) {                        1788                 if (ab) {
1768                         audit_log_format(ab,     1789                         audit_log_format(ab, "saddr=");
1769                         audit_log_n_hex(ab, (    1790                         audit_log_n_hex(ab, (void *)context->sockaddr,
1770                                         conte    1791                                         context->sockaddr_len);
1771                         audit_log_end(ab);       1792                         audit_log_end(ab);
1772                 }                                1793                 }
1773         }                                        1794         }
1774                                                  1795 
1775         for (aux = context->aux_pids; aux; au    1796         for (aux = context->aux_pids; aux; aux = aux->next) {
1776                 struct audit_aux_data_pids *a    1797                 struct audit_aux_data_pids *axs = (void *)aux;
1777                                                  1798 
1778                 for (i = 0; i < axs->pid_coun    1799                 for (i = 0; i < axs->pid_count; i++)
1779                         if (audit_log_pid_con    1800                         if (audit_log_pid_context(context, axs->target_pid[i],
1780                                                  1801                                                   axs->target_auid[i],
1781                                                  1802                                                   axs->target_uid[i],
1782                                                  1803                                                   axs->target_sessionid[i],
1783                                                  1804                                                   axs->target_sid[i],
1784                                                  1805                                                   axs->target_comm[i]))
1785                                 call_panic =     1806                                 call_panic = 1;
1786         }                                        1807         }
1787                                                  1808 
1788         if (context->target_pid &&               1809         if (context->target_pid &&
1789             audit_log_pid_context(context, co    1810             audit_log_pid_context(context, context->target_pid,
1790                                   context->ta    1811                                   context->target_auid, context->target_uid,
1791                                   context->ta    1812                                   context->target_sessionid,
1792                                   context->ta    1813                                   context->target_sid, context->target_comm))
1793                         call_panic = 1;          1814                         call_panic = 1;
1794                                                  1815 
1795         if (context->pwd.dentry && context->p    1816         if (context->pwd.dentry && context->pwd.mnt) {
1796                 ab = audit_log_start(context,    1817                 ab = audit_log_start(context, GFP_KERNEL, AUDIT_CWD);
1797                 if (ab) {                        1818                 if (ab) {
1798                         audit_log_d_path(ab,     1819                         audit_log_d_path(ab, "cwd=", &context->pwd);
1799                         audit_log_end(ab);       1820                         audit_log_end(ab);
1800                 }                                1821                 }
1801         }                                        1822         }
1802                                                  1823 
1803         i = 0;                                   1824         i = 0;
1804         list_for_each_entry(n, &context->name    1825         list_for_each_entry(n, &context->names_list, list) {
1805                 if (n->hidden)                   1826                 if (n->hidden)
1806                         continue;                1827                         continue;
1807                 audit_log_name(context, n, NU    1828                 audit_log_name(context, n, NULL, i++, &call_panic);
1808         }                                        1829         }
1809                                                  1830 
1810         if (context->context == AUDIT_CTX_SYS    1831         if (context->context == AUDIT_CTX_SYSCALL)
1811                 audit_log_proctitle();           1832                 audit_log_proctitle();
1812                                                  1833 
1813         /* Send end of event record to help u    1834         /* Send end of event record to help user space know we are finished */
1814         ab = audit_log_start(context, GFP_KER    1835         ab = audit_log_start(context, GFP_KERNEL, AUDIT_EOE);
1815         if (ab)                                  1836         if (ab)
1816                 audit_log_end(ab);               1837                 audit_log_end(ab);
1817         if (call_panic)                          1838         if (call_panic)
1818                 audit_panic("error in audit_l    1839                 audit_panic("error in audit_log_exit()");
1819 }                                                1840 }
1820                                                  1841 
1821 /**                                              1842 /**
1822  * __audit_free - free a per-task audit conte    1843  * __audit_free - free a per-task audit context
1823  * @tsk: task whose audit context block to fr    1844  * @tsk: task whose audit context block to free
1824  *                                               1845  *
1825  * Called from copy_process, do_exit, and the    1846  * Called from copy_process, do_exit, and the io_uring code
1826  */                                              1847  */
1827 void __audit_free(struct task_struct *tsk)       1848 void __audit_free(struct task_struct *tsk)
1828 {                                                1849 {
1829         struct audit_context *context = tsk->    1850         struct audit_context *context = tsk->audit_context;
1830                                                  1851 
1831         if (!context)                            1852         if (!context)
1832                 return;                          1853                 return;
1833                                                  1854 
1834         /* this may generate CONFIG_CHANGE re    1855         /* this may generate CONFIG_CHANGE records */
1835         if (!list_empty(&context->killed_tree    1856         if (!list_empty(&context->killed_trees))
1836                 audit_kill_trees(context);       1857                 audit_kill_trees(context);
1837                                                  1858 
1838         /* We are called either by do_exit()     1859         /* We are called either by do_exit() or the fork() error handling code;
1839          * in the former case tsk == current     1860          * in the former case tsk == current and in the latter tsk is a
1840          * random task_struct that doesn't ha !! 1861          * random task_struct that doesn't doesn't have any meaningful data we
1841          * need to log via audit_log_exit().     1862          * need to log via audit_log_exit().
1842          */                                      1863          */
1843         if (tsk == current && !context->dummy    1864         if (tsk == current && !context->dummy) {
1844                 context->return_valid = AUDIT    1865                 context->return_valid = AUDITSC_INVALID;
1845                 context->return_code = 0;        1866                 context->return_code = 0;
1846                 if (context->context == AUDIT    1867                 if (context->context == AUDIT_CTX_SYSCALL) {
1847                         audit_filter_syscall(    1868                         audit_filter_syscall(tsk, context);
1848                         audit_filter_inodes(t    1869                         audit_filter_inodes(tsk, context);
1849                         if (context->current_    1870                         if (context->current_state == AUDIT_STATE_RECORD)
1850                                 audit_log_exi    1871                                 audit_log_exit();
1851                 } else if (context->context =    1872                 } else if (context->context == AUDIT_CTX_URING) {
1852                         /* TODO: verify this     1873                         /* TODO: verify this case is real and valid */
1853                         audit_filter_uring(ts    1874                         audit_filter_uring(tsk, context);
1854                         audit_filter_inodes(t    1875                         audit_filter_inodes(tsk, context);
1855                         if (context->current_    1876                         if (context->current_state == AUDIT_STATE_RECORD)
1856                                 audit_log_uri    1877                                 audit_log_uring(context);
1857                 }                                1878                 }
1858         }                                        1879         }
1859                                                  1880 
1860         audit_set_context(tsk, NULL);            1881         audit_set_context(tsk, NULL);
1861         audit_free_context(context);             1882         audit_free_context(context);
1862 }                                                1883 }
1863                                                  1884 
1864 /**                                              1885 /**
1865  * audit_return_fixup - fixup the return code    1886  * audit_return_fixup - fixup the return codes in the audit_context
1866  * @ctx: the audit_context                       1887  * @ctx: the audit_context
1867  * @success: true/false value to indicate if     1888  * @success: true/false value to indicate if the operation succeeded or not
1868  * @code: operation return code                  1889  * @code: operation return code
1869  *                                               1890  *
1870  * We need to fixup the return code in the au    1891  * We need to fixup the return code in the audit logs if the actual return
1871  * codes are later going to be fixed by the a    1892  * codes are later going to be fixed by the arch specific signal handlers.
1872  */                                              1893  */
1873 static void audit_return_fixup(struct audit_c    1894 static void audit_return_fixup(struct audit_context *ctx,
1874                                int success, l    1895                                int success, long code)
1875 {                                                1896 {
1876         /*                                       1897         /*
1877          * This is actually a test for:          1898          * This is actually a test for:
1878          * (rc == ERESTARTSYS ) || (rc == ERE    1899          * (rc == ERESTARTSYS ) || (rc == ERESTARTNOINTR) ||
1879          * (rc == ERESTARTNOHAND) || (rc == E    1900          * (rc == ERESTARTNOHAND) || (rc == ERESTART_RESTARTBLOCK)
1880          *                                       1901          *
1881          * but is faster than a bunch of ||      1902          * but is faster than a bunch of ||
1882          */                                      1903          */
1883         if (unlikely(code <= -ERESTARTSYS) &&    1904         if (unlikely(code <= -ERESTARTSYS) &&
1884             (code >= -ERESTART_RESTARTBLOCK)     1905             (code >= -ERESTART_RESTARTBLOCK) &&
1885             (code != -ENOIOCTLCMD))              1906             (code != -ENOIOCTLCMD))
1886                 ctx->return_code = -EINTR;       1907                 ctx->return_code = -EINTR;
1887         else                                     1908         else
1888                 ctx->return_code  = code;        1909                 ctx->return_code  = code;
1889         ctx->return_valid = (success ? AUDITS    1910         ctx->return_valid = (success ? AUDITSC_SUCCESS : AUDITSC_FAILURE);
1890 }                                                1911 }
1891                                                  1912 
1892 /**                                              1913 /**
1893  * __audit_uring_entry - prepare the kernel t    1914  * __audit_uring_entry - prepare the kernel task's audit context for io_uring
1894  * @op: the io_uring opcode                      1915  * @op: the io_uring opcode
1895  *                                               1916  *
1896  * This is similar to audit_syscall_entry() b    1917  * This is similar to audit_syscall_entry() but is intended for use by io_uring
1897  * operations.  This function should only eve    1918  * operations.  This function should only ever be called from
1898  * audit_uring_entry() as we rely on the audi    1919  * audit_uring_entry() as we rely on the audit context checking present in that
1899  * function.                                     1920  * function.
1900  */                                              1921  */
1901 void __audit_uring_entry(u8 op)                  1922 void __audit_uring_entry(u8 op)
1902 {                                                1923 {
1903         struct audit_context *ctx = audit_con    1924         struct audit_context *ctx = audit_context();
1904                                                  1925 
1905         if (ctx->state == AUDIT_STATE_DISABLE    1926         if (ctx->state == AUDIT_STATE_DISABLED)
1906                 return;                          1927                 return;
1907                                                  1928 
1908         /*                                       1929         /*
1909          * NOTE: It's possible that we can be    1930          * NOTE: It's possible that we can be called from the process' context
1910          *       before it returns to userspa    1931          *       before it returns to userspace, and before audit_syscall_exit()
1911          *       is called.  In this case the    1932          *       is called.  In this case there is not much to do, just record
1912          *       the io_uring details and ret    1933          *       the io_uring details and return.
1913          */                                      1934          */
1914         ctx->uring_op = op;                      1935         ctx->uring_op = op;
1915         if (ctx->context == AUDIT_CTX_SYSCALL    1936         if (ctx->context == AUDIT_CTX_SYSCALL)
1916                 return;                          1937                 return;
1917                                                  1938 
1918         ctx->dummy = !audit_n_rules;             1939         ctx->dummy = !audit_n_rules;
1919         if (!ctx->dummy && ctx->state == AUDI    1940         if (!ctx->dummy && ctx->state == AUDIT_STATE_BUILD)
1920                 ctx->prio = 0;                   1941                 ctx->prio = 0;
1921                                                  1942 
1922         ctx->context = AUDIT_CTX_URING;          1943         ctx->context = AUDIT_CTX_URING;
1923         ctx->current_state = ctx->state;         1944         ctx->current_state = ctx->state;
1924         ktime_get_coarse_real_ts64(&ctx->ctim    1945         ktime_get_coarse_real_ts64(&ctx->ctime);
1925 }                                                1946 }
1926                                                  1947 
1927 /**                                              1948 /**
1928  * __audit_uring_exit - wrap up the kernel ta    1949  * __audit_uring_exit - wrap up the kernel task's audit context after io_uring
1929  * @success: true/false value to indicate if     1950  * @success: true/false value to indicate if the operation succeeded or not
1930  * @code: operation return code                  1951  * @code: operation return code
1931  *                                               1952  *
1932  * This is similar to audit_syscall_exit() bu    1953  * This is similar to audit_syscall_exit() but is intended for use by io_uring
1933  * operations.  This function should only eve    1954  * operations.  This function should only ever be called from
1934  * audit_uring_exit() as we rely on the audit    1955  * audit_uring_exit() as we rely on the audit context checking present in that
1935  * function.                                     1956  * function.
1936  */                                              1957  */
1937 void __audit_uring_exit(int success, long cod    1958 void __audit_uring_exit(int success, long code)
1938 {                                                1959 {
1939         struct audit_context *ctx = audit_con    1960         struct audit_context *ctx = audit_context();
1940                                                  1961 
1941         if (ctx->dummy) {                        1962         if (ctx->dummy) {
1942                 if (ctx->context != AUDIT_CTX    1963                 if (ctx->context != AUDIT_CTX_URING)
1943                         return;                  1964                         return;
1944                 goto out;                        1965                 goto out;
1945         }                                        1966         }
1946                                                  1967 
1947         audit_return_fixup(ctx, success, code << 
1948         if (ctx->context == AUDIT_CTX_SYSCALL    1968         if (ctx->context == AUDIT_CTX_SYSCALL) {
1949                 /*                               1969                 /*
1950                  * NOTE: See the note in __au    1970                  * NOTE: See the note in __audit_uring_entry() about the case
1951                  *       where we may be call    1971                  *       where we may be called from process context before we
1952                  *       return to userspace     1972                  *       return to userspace via audit_syscall_exit().  In this
1953                  *       case we simply emit     1973                  *       case we simply emit a URINGOP record and bail, the
1954                  *       normal syscall exit     1974                  *       normal syscall exit handling will take care of
1955                  *       everything else.        1975                  *       everything else.
1956                  *       It is also worth men    1976                  *       It is also worth mentioning that when we are called,
1957                  *       the current process     1977                  *       the current process creds may differ from the creds
1958                  *       used during the norm    1978                  *       used during the normal syscall processing; keep that
1959                  *       in mind if/when we m    1979                  *       in mind if/when we move the record generation code.
1960                  */                              1980                  */
1961                                                  1981 
1962                 /*                               1982                 /*
1963                  * We need to filter on the s    1983                  * We need to filter on the syscall info here to decide if we
1964                  * should emit a URINGOP reco    1984                  * should emit a URINGOP record.  I know it seems odd but this
1965                  * solves the problem where u    1985                  * solves the problem where users have a filter to block *all*
1966                  * syscall records in the "ex    1986                  * syscall records in the "exit" filter; we want to preserve
1967                  * the behavior here.            1987                  * the behavior here.
1968                  */                              1988                  */
1969                 audit_filter_syscall(current,    1989                 audit_filter_syscall(current, ctx);
1970                 if (ctx->current_state != AUD    1990                 if (ctx->current_state != AUDIT_STATE_RECORD)
1971                         audit_filter_uring(cu    1991                         audit_filter_uring(current, ctx);
1972                 audit_filter_inodes(current,     1992                 audit_filter_inodes(current, ctx);
1973                 if (ctx->current_state != AUD    1993                 if (ctx->current_state != AUDIT_STATE_RECORD)
1974                         return;                  1994                         return;
1975                                                  1995 
1976                 audit_log_uring(ctx);            1996                 audit_log_uring(ctx);
1977                 return;                          1997                 return;
1978         }                                        1998         }
1979                                                  1999 
1980         /* this may generate CONFIG_CHANGE re    2000         /* this may generate CONFIG_CHANGE records */
1981         if (!list_empty(&ctx->killed_trees))     2001         if (!list_empty(&ctx->killed_trees))
1982                 audit_kill_trees(ctx);           2002                 audit_kill_trees(ctx);
1983                                                  2003 
1984         /* run through both filters to ensure    2004         /* run through both filters to ensure we set the filterkey properly */
1985         audit_filter_uring(current, ctx);        2005         audit_filter_uring(current, ctx);
1986         audit_filter_inodes(current, ctx);       2006         audit_filter_inodes(current, ctx);
1987         if (ctx->current_state != AUDIT_STATE    2007         if (ctx->current_state != AUDIT_STATE_RECORD)
1988                 goto out;                        2008                 goto out;
                                                   >> 2009         audit_return_fixup(ctx, success, code);
1989         audit_log_exit();                        2010         audit_log_exit();
1990                                                  2011 
1991 out:                                             2012 out:
1992         audit_reset_context(ctx);                2013         audit_reset_context(ctx);
1993 }                                                2014 }
1994                                                  2015 
1995 /**                                              2016 /**
1996  * __audit_syscall_entry - fill in an audit r    2017  * __audit_syscall_entry - fill in an audit record at syscall entry
1997  * @major: major syscall type (function)         2018  * @major: major syscall type (function)
1998  * @a1: additional syscall register 1            2019  * @a1: additional syscall register 1
1999  * @a2: additional syscall register 2            2020  * @a2: additional syscall register 2
2000  * @a3: additional syscall register 3            2021  * @a3: additional syscall register 3
2001  * @a4: additional syscall register 4            2022  * @a4: additional syscall register 4
2002  *                                               2023  *
2003  * Fill in audit context at syscall entry.  T    2024  * Fill in audit context at syscall entry.  This only happens if the
2004  * audit context was created when the task wa    2025  * audit context was created when the task was created and the state or
2005  * filters demand the audit context be built.    2026  * filters demand the audit context be built.  If the state from the
2006  * per-task filter or from the per-syscall fi    2027  * per-task filter or from the per-syscall filter is AUDIT_STATE_RECORD,
2007  * then the record will be written at syscall    2028  * then the record will be written at syscall exit time (otherwise, it
2008  * will only be written if another part of th    2029  * will only be written if another part of the kernel requests that it
2009  * be written).                                  2030  * be written).
2010  */                                              2031  */
2011 void __audit_syscall_entry(int major, unsigne    2032 void __audit_syscall_entry(int major, unsigned long a1, unsigned long a2,
2012                            unsigned long a3,     2033                            unsigned long a3, unsigned long a4)
2013 {                                                2034 {
2014         struct audit_context *context = audit    2035         struct audit_context *context = audit_context();
2015         enum audit_state     state;              2036         enum audit_state     state;
2016                                                  2037 
2017         if (!audit_enabled || !context)          2038         if (!audit_enabled || !context)
2018                 return;                          2039                 return;
2019                                                  2040 
2020         WARN_ON(context->context != AUDIT_CTX    2041         WARN_ON(context->context != AUDIT_CTX_UNUSED);
2021         WARN_ON(context->name_count);            2042         WARN_ON(context->name_count);
2022         if (context->context != AUDIT_CTX_UNU    2043         if (context->context != AUDIT_CTX_UNUSED || context->name_count) {
2023                 audit_panic("unrecoverable er    2044                 audit_panic("unrecoverable error in audit_syscall_entry()");
2024                 return;                          2045                 return;
2025         }                                        2046         }
2026                                                  2047 
2027         state = context->state;                  2048         state = context->state;
2028         if (state == AUDIT_STATE_DISABLED)       2049         if (state == AUDIT_STATE_DISABLED)
2029                 return;                          2050                 return;
2030                                                  2051 
2031         context->dummy = !audit_n_rules;         2052         context->dummy = !audit_n_rules;
2032         if (!context->dummy && state == AUDIT    2053         if (!context->dummy && state == AUDIT_STATE_BUILD) {
2033                 context->prio = 0;               2054                 context->prio = 0;
2034                 if (auditd_test_task(current)    2055                 if (auditd_test_task(current))
2035                         return;                  2056                         return;
2036         }                                        2057         }
2037                                                  2058 
2038         context->arch       = syscall_get_arc    2059         context->arch       = syscall_get_arch(current);
2039         context->major      = major;             2060         context->major      = major;
2040         context->argv[0]    = a1;                2061         context->argv[0]    = a1;
2041         context->argv[1]    = a2;                2062         context->argv[1]    = a2;
2042         context->argv[2]    = a3;                2063         context->argv[2]    = a3;
2043         context->argv[3]    = a4;                2064         context->argv[3]    = a4;
2044         context->context = AUDIT_CTX_SYSCALL;    2065         context->context = AUDIT_CTX_SYSCALL;
2045         context->current_state  = state;         2066         context->current_state  = state;
2046         ktime_get_coarse_real_ts64(&context->    2067         ktime_get_coarse_real_ts64(&context->ctime);
2047 }                                                2068 }
2048                                                  2069 
2049 /**                                              2070 /**
2050  * __audit_syscall_exit - deallocate audit co    2071  * __audit_syscall_exit - deallocate audit context after a system call
2051  * @success: success value of the syscall        2072  * @success: success value of the syscall
2052  * @return_code: return value of the syscall     2073  * @return_code: return value of the syscall
2053  *                                               2074  *
2054  * Tear down after system call.  If the audit    2075  * Tear down after system call.  If the audit context has been marked as
2055  * auditable (either because of the AUDIT_STA    2076  * auditable (either because of the AUDIT_STATE_RECORD state from
2056  * filtering, or because some other part of t    2077  * filtering, or because some other part of the kernel wrote an audit
2057  * message), then write out the syscall infor    2078  * message), then write out the syscall information.  In call cases,
2058  * free the names stored from getname().         2079  * free the names stored from getname().
2059  */                                              2080  */
2060 void __audit_syscall_exit(int success, long r    2081 void __audit_syscall_exit(int success, long return_code)
2061 {                                                2082 {
2062         struct audit_context *context = audit    2083         struct audit_context *context = audit_context();
2063                                                  2084 
2064         if (!context || context->dummy ||        2085         if (!context || context->dummy ||
2065             context->context != AUDIT_CTX_SYS    2086             context->context != AUDIT_CTX_SYSCALL)
2066                 goto out;                        2087                 goto out;
2067                                                  2088 
2068         /* this may generate CONFIG_CHANGE re    2089         /* this may generate CONFIG_CHANGE records */
2069         if (!list_empty(&context->killed_tree    2090         if (!list_empty(&context->killed_trees))
2070                 audit_kill_trees(context);       2091                 audit_kill_trees(context);
2071                                                  2092 
2072         audit_return_fixup(context, success,  << 
2073         /* run through both filters to ensure    2093         /* run through both filters to ensure we set the filterkey properly */
2074         audit_filter_syscall(current, context    2094         audit_filter_syscall(current, context);
2075         audit_filter_inodes(current, context)    2095         audit_filter_inodes(current, context);
2076         if (context->current_state != AUDIT_S !! 2096         if (context->current_state < AUDIT_STATE_RECORD)
2077                 goto out;                        2097                 goto out;
2078                                                  2098 
                                                   >> 2099         audit_return_fixup(context, success, return_code);
2079         audit_log_exit();                        2100         audit_log_exit();
2080                                                  2101 
2081 out:                                             2102 out:
2082         audit_reset_context(context);            2103         audit_reset_context(context);
2083 }                                                2104 }
2084                                                  2105 
2085 static inline void handle_one(const struct in    2106 static inline void handle_one(const struct inode *inode)
2086 {                                                2107 {
2087         struct audit_context *context;           2108         struct audit_context *context;
2088         struct audit_tree_refs *p;               2109         struct audit_tree_refs *p;
2089         struct audit_chunk *chunk;               2110         struct audit_chunk *chunk;
2090         int count;                               2111         int count;
2091                                                  2112 
2092         if (likely(!inode->i_fsnotify_marks))    2113         if (likely(!inode->i_fsnotify_marks))
2093                 return;                          2114                 return;
2094         context = audit_context();               2115         context = audit_context();
2095         p = context->trees;                      2116         p = context->trees;
2096         count = context->tree_count;             2117         count = context->tree_count;
2097         rcu_read_lock();                         2118         rcu_read_lock();
2098         chunk = audit_tree_lookup(inode);        2119         chunk = audit_tree_lookup(inode);
2099         rcu_read_unlock();                       2120         rcu_read_unlock();
2100         if (!chunk)                              2121         if (!chunk)
2101                 return;                          2122                 return;
2102         if (likely(put_tree_ref(context, chun    2123         if (likely(put_tree_ref(context, chunk)))
2103                 return;                          2124                 return;
2104         if (unlikely(!grow_tree_refs(context)    2125         if (unlikely(!grow_tree_refs(context))) {
2105                 pr_warn("out of memory, audit    2126                 pr_warn("out of memory, audit has lost a tree reference\n");
2106                 audit_set_auditable(context);    2127                 audit_set_auditable(context);
2107                 audit_put_chunk(chunk);          2128                 audit_put_chunk(chunk);
2108                 unroll_tree_refs(context, p,     2129                 unroll_tree_refs(context, p, count);
2109                 return;                          2130                 return;
2110         }                                        2131         }
2111         put_tree_ref(context, chunk);            2132         put_tree_ref(context, chunk);
2112 }                                                2133 }
2113                                                  2134 
2114 static void handle_path(const struct dentry *    2135 static void handle_path(const struct dentry *dentry)
2115 {                                                2136 {
2116         struct audit_context *context;           2137         struct audit_context *context;
2117         struct audit_tree_refs *p;               2138         struct audit_tree_refs *p;
2118         const struct dentry *d, *parent;         2139         const struct dentry *d, *parent;
2119         struct audit_chunk *drop;                2140         struct audit_chunk *drop;
2120         unsigned long seq;                       2141         unsigned long seq;
2121         int count;                               2142         int count;
2122                                                  2143 
2123         context = audit_context();               2144         context = audit_context();
2124         p = context->trees;                      2145         p = context->trees;
2125         count = context->tree_count;             2146         count = context->tree_count;
2126 retry:                                           2147 retry:
2127         drop = NULL;                             2148         drop = NULL;
2128         d = dentry;                              2149         d = dentry;
2129         rcu_read_lock();                         2150         rcu_read_lock();
2130         seq = read_seqbegin(&rename_lock);       2151         seq = read_seqbegin(&rename_lock);
2131         for (;;) {                            !! 2152         for(;;) {
2132                 struct inode *inode = d_backi    2153                 struct inode *inode = d_backing_inode(d);
2133                                                  2154 
2134                 if (inode && unlikely(inode->    2155                 if (inode && unlikely(inode->i_fsnotify_marks)) {
2135                         struct audit_chunk *c    2156                         struct audit_chunk *chunk;
2136                                                  2157 
2137                         chunk = audit_tree_lo    2158                         chunk = audit_tree_lookup(inode);
2138                         if (chunk) {             2159                         if (chunk) {
2139                                 if (unlikely(    2160                                 if (unlikely(!put_tree_ref(context, chunk))) {
2140                                         drop     2161                                         drop = chunk;
2141                                         break    2162                                         break;
2142                                 }                2163                                 }
2143                         }                        2164                         }
2144                 }                                2165                 }
2145                 parent = d->d_parent;            2166                 parent = d->d_parent;
2146                 if (parent == d)                 2167                 if (parent == d)
2147                         break;                   2168                         break;
2148                 d = parent;                      2169                 d = parent;
2149         }                                        2170         }
2150         if (unlikely(read_seqretry(&rename_lo    2171         if (unlikely(read_seqretry(&rename_lock, seq) || drop)) {  /* in this order */
2151                 rcu_read_unlock();               2172                 rcu_read_unlock();
2152                 if (!drop) {                     2173                 if (!drop) {
2153                         /* just a race with r    2174                         /* just a race with rename */
2154                         unroll_tree_refs(cont    2175                         unroll_tree_refs(context, p, count);
2155                         goto retry;              2176                         goto retry;
2156                 }                                2177                 }
2157                 audit_put_chunk(drop);           2178                 audit_put_chunk(drop);
2158                 if (grow_tree_refs(context))     2179                 if (grow_tree_refs(context)) {
2159                         /* OK, got more space    2180                         /* OK, got more space */
2160                         unroll_tree_refs(cont    2181                         unroll_tree_refs(context, p, count);
2161                         goto retry;              2182                         goto retry;
2162                 }                                2183                 }
2163                 /* too bad */                    2184                 /* too bad */
2164                 pr_warn("out of memory, audit    2185                 pr_warn("out of memory, audit has lost a tree reference\n");
2165                 unroll_tree_refs(context, p,     2186                 unroll_tree_refs(context, p, count);
2166                 audit_set_auditable(context);    2187                 audit_set_auditable(context);
2167                 return;                          2188                 return;
2168         }                                        2189         }
2169         rcu_read_unlock();                       2190         rcu_read_unlock();
2170 }                                                2191 }
2171                                                  2192 
2172 static struct audit_names *audit_alloc_name(s    2193 static struct audit_names *audit_alloc_name(struct audit_context *context,
2173                                                  2194                                                 unsigned char type)
2174 {                                                2195 {
2175         struct audit_names *aname;               2196         struct audit_names *aname;
2176                                                  2197 
2177         if (context->name_count < AUDIT_NAMES    2198         if (context->name_count < AUDIT_NAMES) {
2178                 aname = &context->preallocate    2199                 aname = &context->preallocated_names[context->name_count];
2179                 memset(aname, 0, sizeof(*anam    2200                 memset(aname, 0, sizeof(*aname));
2180         } else {                                 2201         } else {
2181                 aname = kzalloc(sizeof(*aname    2202                 aname = kzalloc(sizeof(*aname), GFP_NOFS);
2182                 if (!aname)                      2203                 if (!aname)
2183                         return NULL;             2204                         return NULL;
2184                 aname->should_free = true;       2205                 aname->should_free = true;
2185         }                                        2206         }
2186                                                  2207 
2187         aname->ino = AUDIT_INO_UNSET;            2208         aname->ino = AUDIT_INO_UNSET;
2188         aname->type = type;                      2209         aname->type = type;
2189         list_add_tail(&aname->list, &context-    2210         list_add_tail(&aname->list, &context->names_list);
2190                                                  2211 
2191         context->name_count++;                   2212         context->name_count++;
2192         if (!context->pwd.dentry)                2213         if (!context->pwd.dentry)
2193                 get_fs_pwd(current->fs, &cont    2214                 get_fs_pwd(current->fs, &context->pwd);
2194         return aname;                            2215         return aname;
2195 }                                                2216 }
2196                                                  2217 
2197 /**                                              2218 /**
2198  * __audit_reusename - fill out filename with    2219  * __audit_reusename - fill out filename with info from existing entry
2199  * @uptr: userland ptr to pathname               2220  * @uptr: userland ptr to pathname
2200  *                                               2221  *
2201  * Search the audit_names list for the curren    2222  * Search the audit_names list for the current audit context. If there is an
2202  * existing entry with a matching "uptr" then    2223  * existing entry with a matching "uptr" then return the filename
2203  * associated with that audit_name. If not, r    2224  * associated with that audit_name. If not, return NULL.
2204  */                                              2225  */
2205 struct filename *                                2226 struct filename *
2206 __audit_reusename(const __user char *uptr)       2227 __audit_reusename(const __user char *uptr)
2207 {                                                2228 {
2208         struct audit_context *context = audit    2229         struct audit_context *context = audit_context();
2209         struct audit_names *n;                   2230         struct audit_names *n;
2210                                                  2231 
2211         list_for_each_entry(n, &context->name    2232         list_for_each_entry(n, &context->names_list, list) {
2212                 if (!n->name)                    2233                 if (!n->name)
2213                         continue;                2234                         continue;
2214                 if (n->name->uptr == uptr) {     2235                 if (n->name->uptr == uptr) {
2215                         atomic_inc(&n->name-> !! 2236                         n->name->refcnt++;
2216                         return n->name;          2237                         return n->name;
2217                 }                                2238                 }
2218         }                                        2239         }
2219         return NULL;                             2240         return NULL;
2220 }                                                2241 }
2221                                                  2242 
2222 /**                                              2243 /**
2223  * __audit_getname - add a name to the list      2244  * __audit_getname - add a name to the list
2224  * @name: name to add                            2245  * @name: name to add
2225  *                                               2246  *
2226  * Add a name to the list of audit names for     2247  * Add a name to the list of audit names for this context.
2227  * Called from fs/namei.c:getname().             2248  * Called from fs/namei.c:getname().
2228  */                                              2249  */
2229 void __audit_getname(struct filename *name)      2250 void __audit_getname(struct filename *name)
2230 {                                                2251 {
2231         struct audit_context *context = audit    2252         struct audit_context *context = audit_context();
2232         struct audit_names *n;                   2253         struct audit_names *n;
2233                                                  2254 
2234         if (context->context == AUDIT_CTX_UNU    2255         if (context->context == AUDIT_CTX_UNUSED)
2235                 return;                          2256                 return;
2236                                                  2257 
2237         n = audit_alloc_name(context, AUDIT_T    2258         n = audit_alloc_name(context, AUDIT_TYPE_UNKNOWN);
2238         if (!n)                                  2259         if (!n)
2239                 return;                          2260                 return;
2240                                                  2261 
2241         n->name = name;                          2262         n->name = name;
2242         n->name_len = AUDIT_NAME_FULL;           2263         n->name_len = AUDIT_NAME_FULL;
2243         name->aname = n;                         2264         name->aname = n;
2244         atomic_inc(&name->refcnt);            !! 2265         name->refcnt++;
2245 }                                                2266 }
2246                                                  2267 
2247 static inline int audit_copy_fcaps(struct aud    2268 static inline int audit_copy_fcaps(struct audit_names *name,
2248                                    const stru    2269                                    const struct dentry *dentry)
2249 {                                                2270 {
2250         struct cpu_vfs_cap_data caps;            2271         struct cpu_vfs_cap_data caps;
2251         int rc;                                  2272         int rc;
2252                                                  2273 
2253         if (!dentry)                             2274         if (!dentry)
2254                 return 0;                        2275                 return 0;
2255                                                  2276 
2256         rc = get_vfs_caps_from_disk(&nop_mnt_ !! 2277         rc = get_vfs_caps_from_disk(&init_user_ns, dentry, &caps);
2257         if (rc)                                  2278         if (rc)
2258                 return rc;                       2279                 return rc;
2259                                                  2280 
2260         name->fcap.permitted = caps.permitted    2281         name->fcap.permitted = caps.permitted;
2261         name->fcap.inheritable = caps.inherit    2282         name->fcap.inheritable = caps.inheritable;
2262         name->fcap.fE = !!(caps.magic_etc & V    2283         name->fcap.fE = !!(caps.magic_etc & VFS_CAP_FLAGS_EFFECTIVE);
2263         name->fcap.rootid = caps.rootid;         2284         name->fcap.rootid = caps.rootid;
2264         name->fcap_ver = (caps.magic_etc & VF    2285         name->fcap_ver = (caps.magic_etc & VFS_CAP_REVISION_MASK) >>
2265                                 VFS_CAP_REVIS    2286                                 VFS_CAP_REVISION_SHIFT;
2266                                                  2287 
2267         return 0;                                2288         return 0;
2268 }                                                2289 }
2269                                                  2290 
2270 /* Copy inode data into an audit_names. */       2291 /* Copy inode data into an audit_names. */
2271 static void audit_copy_inode(struct audit_nam    2292 static void audit_copy_inode(struct audit_names *name,
2272                              const struct den    2293                              const struct dentry *dentry,
2273                              struct inode *in    2294                              struct inode *inode, unsigned int flags)
2274 {                                                2295 {
2275         name->ino   = inode->i_ino;              2296         name->ino   = inode->i_ino;
2276         name->dev   = inode->i_sb->s_dev;        2297         name->dev   = inode->i_sb->s_dev;
2277         name->mode  = inode->i_mode;             2298         name->mode  = inode->i_mode;
2278         name->uid   = inode->i_uid;              2299         name->uid   = inode->i_uid;
2279         name->gid   = inode->i_gid;              2300         name->gid   = inode->i_gid;
2280         name->rdev  = inode->i_rdev;             2301         name->rdev  = inode->i_rdev;
2281         security_inode_getsecid(inode, &name-    2302         security_inode_getsecid(inode, &name->osid);
2282         if (flags & AUDIT_INODE_NOEVAL) {        2303         if (flags & AUDIT_INODE_NOEVAL) {
2283                 name->fcap_ver = -1;             2304                 name->fcap_ver = -1;
2284                 return;                          2305                 return;
2285         }                                        2306         }
2286         audit_copy_fcaps(name, dentry);          2307         audit_copy_fcaps(name, dentry);
2287 }                                                2308 }
2288                                                  2309 
2289 /**                                              2310 /**
2290  * __audit_inode - store the inode and device    2311  * __audit_inode - store the inode and device from a lookup
2291  * @name: name being audited                     2312  * @name: name being audited
2292  * @dentry: dentry being audited                 2313  * @dentry: dentry being audited
2293  * @flags: attributes for this particular ent    2314  * @flags: attributes for this particular entry
2294  */                                              2315  */
2295 void __audit_inode(struct filename *name, con    2316 void __audit_inode(struct filename *name, const struct dentry *dentry,
2296                    unsigned int flags)           2317                    unsigned int flags)
2297 {                                                2318 {
2298         struct audit_context *context = audit    2319         struct audit_context *context = audit_context();
2299         struct inode *inode = d_backing_inode    2320         struct inode *inode = d_backing_inode(dentry);
2300         struct audit_names *n;                   2321         struct audit_names *n;
2301         bool parent = flags & AUDIT_INODE_PAR    2322         bool parent = flags & AUDIT_INODE_PARENT;
2302         struct audit_entry *e;                   2323         struct audit_entry *e;
2303         struct list_head *list = &audit_filte    2324         struct list_head *list = &audit_filter_list[AUDIT_FILTER_FS];
2304         int i;                                   2325         int i;
2305                                                  2326 
2306         if (context->context == AUDIT_CTX_UNU    2327         if (context->context == AUDIT_CTX_UNUSED)
2307                 return;                          2328                 return;
2308                                                  2329 
2309         rcu_read_lock();                         2330         rcu_read_lock();
2310         list_for_each_entry_rcu(e, list, list    2331         list_for_each_entry_rcu(e, list, list) {
2311                 for (i = 0; i < e->rule.field    2332                 for (i = 0; i < e->rule.field_count; i++) {
2312                         struct audit_field *f    2333                         struct audit_field *f = &e->rule.fields[i];
2313                                                  2334 
2314                         if (f->type == AUDIT_    2335                         if (f->type == AUDIT_FSTYPE
2315                             && audit_comparat    2336                             && audit_comparator(inode->i_sb->s_magic,
2316                                                  2337                                                 f->op, f->val)
2317                             && e->rule.action    2338                             && e->rule.action == AUDIT_NEVER) {
2318                                 rcu_read_unlo    2339                                 rcu_read_unlock();
2319                                 return;          2340                                 return;
2320                         }                        2341                         }
2321                 }                                2342                 }
2322         }                                        2343         }
2323         rcu_read_unlock();                       2344         rcu_read_unlock();
2324                                                  2345 
2325         if (!name)                               2346         if (!name)
2326                 goto out_alloc;                  2347                 goto out_alloc;
2327                                                  2348 
2328         /*                                       2349         /*
2329          * If we have a pointer to an audit_n    2350          * If we have a pointer to an audit_names entry already, then we can
2330          * just use it directly if the type i    2351          * just use it directly if the type is correct.
2331          */                                      2352          */
2332         n = name->aname;                         2353         n = name->aname;
2333         if (n) {                                 2354         if (n) {
2334                 if (parent) {                    2355                 if (parent) {
2335                         if (n->type == AUDIT_    2356                         if (n->type == AUDIT_TYPE_PARENT ||
2336                             n->type == AUDIT_    2357                             n->type == AUDIT_TYPE_UNKNOWN)
2337                                 goto out;        2358                                 goto out;
2338                 } else {                         2359                 } else {
2339                         if (n->type != AUDIT_    2360                         if (n->type != AUDIT_TYPE_PARENT)
2340                                 goto out;        2361                                 goto out;
2341                 }                                2362                 }
2342         }                                        2363         }
2343                                                  2364 
2344         list_for_each_entry_reverse(n, &conte    2365         list_for_each_entry_reverse(n, &context->names_list, list) {
2345                 if (n->ino) {                    2366                 if (n->ino) {
2346                         /* valid inode number    2367                         /* valid inode number, use that for the comparison */
2347                         if (n->ino != inode->    2368                         if (n->ino != inode->i_ino ||
2348                             n->dev != inode->    2369                             n->dev != inode->i_sb->s_dev)
2349                                 continue;        2370                                 continue;
2350                 } else if (n->name) {            2371                 } else if (n->name) {
2351                         /* inode number has n    2372                         /* inode number has not been set, check the name */
2352                         if (strcmp(n->name->n    2373                         if (strcmp(n->name->name, name->name))
2353                                 continue;        2374                                 continue;
2354                 } else                           2375                 } else
2355                         /* no inode and no na    2376                         /* no inode and no name (?!) ... this is odd ... */
2356                         continue;                2377                         continue;
2357                                                  2378 
2358                 /* match the correct record t    2379                 /* match the correct record type */
2359                 if (parent) {                    2380                 if (parent) {
2360                         if (n->type == AUDIT_    2381                         if (n->type == AUDIT_TYPE_PARENT ||
2361                             n->type == AUDIT_    2382                             n->type == AUDIT_TYPE_UNKNOWN)
2362                                 goto out;        2383                                 goto out;
2363                 } else {                         2384                 } else {
2364                         if (n->type != AUDIT_    2385                         if (n->type != AUDIT_TYPE_PARENT)
2365                                 goto out;        2386                                 goto out;
2366                 }                                2387                 }
2367         }                                        2388         }
2368                                                  2389 
2369 out_alloc:                                       2390 out_alloc:
2370         /* unable to find an entry with both     2391         /* unable to find an entry with both a matching name and type */
2371         n = audit_alloc_name(context, AUDIT_T    2392         n = audit_alloc_name(context, AUDIT_TYPE_UNKNOWN);
2372         if (!n)                                  2393         if (!n)
2373                 return;                          2394                 return;
2374         if (name) {                              2395         if (name) {
2375                 n->name = name;                  2396                 n->name = name;
2376                 atomic_inc(&name->refcnt);    !! 2397                 name->refcnt++;
2377         }                                        2398         }
2378                                                  2399 
2379 out:                                             2400 out:
2380         if (parent) {                            2401         if (parent) {
2381                 n->name_len = n->name ? paren    2402                 n->name_len = n->name ? parent_len(n->name->name) : AUDIT_NAME_FULL;
2382                 n->type = AUDIT_TYPE_PARENT;     2403                 n->type = AUDIT_TYPE_PARENT;
2383                 if (flags & AUDIT_INODE_HIDDE    2404                 if (flags & AUDIT_INODE_HIDDEN)
2384                         n->hidden = true;        2405                         n->hidden = true;
2385         } else {                                 2406         } else {
2386                 n->name_len = AUDIT_NAME_FULL    2407                 n->name_len = AUDIT_NAME_FULL;
2387                 n->type = AUDIT_TYPE_NORMAL;     2408                 n->type = AUDIT_TYPE_NORMAL;
2388         }                                        2409         }
2389         handle_path(dentry);                     2410         handle_path(dentry);
2390         audit_copy_inode(n, dentry, inode, fl    2411         audit_copy_inode(n, dentry, inode, flags & AUDIT_INODE_NOEVAL);
2391 }                                                2412 }
2392                                                  2413 
2393 void __audit_file(const struct file *file)       2414 void __audit_file(const struct file *file)
2394 {                                                2415 {
2395         __audit_inode(NULL, file->f_path.dent    2416         __audit_inode(NULL, file->f_path.dentry, 0);
2396 }                                                2417 }
2397                                                  2418 
2398 /**                                              2419 /**
2399  * __audit_inode_child - collect inode info f    2420  * __audit_inode_child - collect inode info for created/removed objects
2400  * @parent: inode of dentry parent               2421  * @parent: inode of dentry parent
2401  * @dentry: dentry being audited                 2422  * @dentry: dentry being audited
2402  * @type:   AUDIT_TYPE_* value that we're loo    2423  * @type:   AUDIT_TYPE_* value that we're looking for
2403  *                                               2424  *
2404  * For syscalls that create or remove filesys    2425  * For syscalls that create or remove filesystem objects, audit_inode
2405  * can only collect information for the files    2426  * can only collect information for the filesystem object's parent.
2406  * This call updates the audit context with t    2427  * This call updates the audit context with the child's information.
2407  * Syscalls that create a new filesystem obje    2428  * Syscalls that create a new filesystem object must be hooked after
2408  * the object is created.  Syscalls that remo    2429  * the object is created.  Syscalls that remove a filesystem object
2409  * must be hooked prior, in order to capture     2430  * must be hooked prior, in order to capture the target inode during
2410  * unsuccessful attempts.                        2431  * unsuccessful attempts.
2411  */                                              2432  */
2412 void __audit_inode_child(struct inode *parent    2433 void __audit_inode_child(struct inode *parent,
2413                          const struct dentry     2434                          const struct dentry *dentry,
2414                          const unsigned char     2435                          const unsigned char type)
2415 {                                                2436 {
2416         struct audit_context *context = audit    2437         struct audit_context *context = audit_context();
2417         struct inode *inode = d_backing_inode    2438         struct inode *inode = d_backing_inode(dentry);
2418         const struct qstr *dname = &dentry->d    2439         const struct qstr *dname = &dentry->d_name;
2419         struct audit_names *n, *found_parent     2440         struct audit_names *n, *found_parent = NULL, *found_child = NULL;
2420         struct audit_entry *e;                   2441         struct audit_entry *e;
2421         struct list_head *list = &audit_filte    2442         struct list_head *list = &audit_filter_list[AUDIT_FILTER_FS];
2422         int i;                                   2443         int i;
2423                                                  2444 
2424         if (context->context == AUDIT_CTX_UNU    2445         if (context->context == AUDIT_CTX_UNUSED)
2425                 return;                          2446                 return;
2426                                                  2447 
2427         rcu_read_lock();                         2448         rcu_read_lock();
2428         list_for_each_entry_rcu(e, list, list    2449         list_for_each_entry_rcu(e, list, list) {
2429                 for (i = 0; i < e->rule.field    2450                 for (i = 0; i < e->rule.field_count; i++) {
2430                         struct audit_field *f    2451                         struct audit_field *f = &e->rule.fields[i];
2431                                                  2452 
2432                         if (f->type == AUDIT_    2453                         if (f->type == AUDIT_FSTYPE
2433                             && audit_comparat    2454                             && audit_comparator(parent->i_sb->s_magic,
2434                                                  2455                                                 f->op, f->val)
2435                             && e->rule.action    2456                             && e->rule.action == AUDIT_NEVER) {
2436                                 rcu_read_unlo    2457                                 rcu_read_unlock();
2437                                 return;          2458                                 return;
2438                         }                        2459                         }
2439                 }                                2460                 }
2440         }                                        2461         }
2441         rcu_read_unlock();                       2462         rcu_read_unlock();
2442                                                  2463 
2443         if (inode)                               2464         if (inode)
2444                 handle_one(inode);               2465                 handle_one(inode);
2445                                                  2466 
2446         /* look for a parent entry first */      2467         /* look for a parent entry first */
2447         list_for_each_entry(n, &context->name    2468         list_for_each_entry(n, &context->names_list, list) {
2448                 if (!n->name ||                  2469                 if (!n->name ||
2449                     (n->type != AUDIT_TYPE_PA    2470                     (n->type != AUDIT_TYPE_PARENT &&
2450                      n->type != AUDIT_TYPE_UN    2471                      n->type != AUDIT_TYPE_UNKNOWN))
2451                         continue;                2472                         continue;
2452                                                  2473 
2453                 if (n->ino == parent->i_ino &    2474                 if (n->ino == parent->i_ino && n->dev == parent->i_sb->s_dev &&
2454                     !audit_compare_dname_path    2475                     !audit_compare_dname_path(dname,
2455                                                  2476                                               n->name->name, n->name_len)) {
2456                         if (n->type == AUDIT_    2477                         if (n->type == AUDIT_TYPE_UNKNOWN)
2457                                 n->type = AUD    2478                                 n->type = AUDIT_TYPE_PARENT;
2458                         found_parent = n;        2479                         found_parent = n;
2459                         break;                   2480                         break;
2460                 }                                2481                 }
2461         }                                        2482         }
2462                                                  2483 
2463         cond_resched();                       << 
2464                                               << 
2465         /* is there a matching child entry? *    2484         /* is there a matching child entry? */
2466         list_for_each_entry(n, &context->name    2485         list_for_each_entry(n, &context->names_list, list) {
2467                 /* can only match entries tha    2486                 /* can only match entries that have a name */
2468                 if (!n->name ||                  2487                 if (!n->name ||
2469                     (n->type != type && n->ty    2488                     (n->type != type && n->type != AUDIT_TYPE_UNKNOWN))
2470                         continue;                2489                         continue;
2471                                                  2490 
2472                 if (!strcmp(dname->name, n->n    2491                 if (!strcmp(dname->name, n->name->name) ||
2473                     !audit_compare_dname_path    2492                     !audit_compare_dname_path(dname, n->name->name,
2474                                                  2493                                                 found_parent ?
2475                                                  2494                                                 found_parent->name_len :
2476                                                  2495                                                 AUDIT_NAME_FULL)) {
2477                         if (n->type == AUDIT_    2496                         if (n->type == AUDIT_TYPE_UNKNOWN)
2478                                 n->type = typ    2497                                 n->type = type;
2479                         found_child = n;         2498                         found_child = n;
2480                         break;                   2499                         break;
2481                 }                                2500                 }
2482         }                                        2501         }
2483                                                  2502 
2484         if (!found_parent) {                     2503         if (!found_parent) {
2485                 /* create a new, "anonymous"     2504                 /* create a new, "anonymous" parent record */
2486                 n = audit_alloc_name(context,    2505                 n = audit_alloc_name(context, AUDIT_TYPE_PARENT);
2487                 if (!n)                          2506                 if (!n)
2488                         return;                  2507                         return;
2489                 audit_copy_inode(n, NULL, par    2508                 audit_copy_inode(n, NULL, parent, 0);
2490         }                                        2509         }
2491                                                  2510 
2492         if (!found_child) {                      2511         if (!found_child) {
2493                 found_child = audit_alloc_nam    2512                 found_child = audit_alloc_name(context, type);
2494                 if (!found_child)                2513                 if (!found_child)
2495                         return;                  2514                         return;
2496                                                  2515 
2497                 /* Re-use the name belonging     2516                 /* Re-use the name belonging to the slot for a matching parent
2498                  * directory. All names for t    2517                  * directory. All names for this context are relinquished in
2499                  * audit_free_names() */         2518                  * audit_free_names() */
2500                 if (found_parent) {              2519                 if (found_parent) {
2501                         found_child->name = f    2520                         found_child->name = found_parent->name;
2502                         found_child->name_len    2521                         found_child->name_len = AUDIT_NAME_FULL;
2503                         atomic_inc(&found_chi !! 2522                         found_child->name->refcnt++;
2504                 }                                2523                 }
2505         }                                        2524         }
2506                                                  2525 
2507         if (inode)                               2526         if (inode)
2508                 audit_copy_inode(found_child,    2527                 audit_copy_inode(found_child, dentry, inode, 0);
2509         else                                     2528         else
2510                 found_child->ino = AUDIT_INO_    2529                 found_child->ino = AUDIT_INO_UNSET;
2511 }                                                2530 }
2512 EXPORT_SYMBOL_GPL(__audit_inode_child);          2531 EXPORT_SYMBOL_GPL(__audit_inode_child);
2513                                                  2532 
2514 /**                                              2533 /**
2515  * auditsc_get_stamp - get local copies of au    2534  * auditsc_get_stamp - get local copies of audit_context values
2516  * @ctx: audit_context for the task              2535  * @ctx: audit_context for the task
2517  * @t: timespec64 to store time recorded in t    2536  * @t: timespec64 to store time recorded in the audit_context
2518  * @serial: serial value that is recorded in     2537  * @serial: serial value that is recorded in the audit_context
2519  *                                               2538  *
2520  * Also sets the context as auditable.           2539  * Also sets the context as auditable.
2521  */                                              2540  */
2522 int auditsc_get_stamp(struct audit_context *c    2541 int auditsc_get_stamp(struct audit_context *ctx,
2523                        struct timespec64 *t,     2542                        struct timespec64 *t, unsigned int *serial)
2524 {                                                2543 {
2525         if (ctx->context == AUDIT_CTX_UNUSED)    2544         if (ctx->context == AUDIT_CTX_UNUSED)
2526                 return 0;                        2545                 return 0;
2527         if (!ctx->serial)                        2546         if (!ctx->serial)
2528                 ctx->serial = audit_serial();    2547                 ctx->serial = audit_serial();
2529         t->tv_sec  = ctx->ctime.tv_sec;          2548         t->tv_sec  = ctx->ctime.tv_sec;
2530         t->tv_nsec = ctx->ctime.tv_nsec;         2549         t->tv_nsec = ctx->ctime.tv_nsec;
2531         *serial    = ctx->serial;                2550         *serial    = ctx->serial;
2532         if (!ctx->prio) {                        2551         if (!ctx->prio) {
2533                 ctx->prio = 1;                   2552                 ctx->prio = 1;
2534                 ctx->current_state = AUDIT_ST    2553                 ctx->current_state = AUDIT_STATE_RECORD;
2535         }                                        2554         }
2536         return 1;                                2555         return 1;
2537 }                                                2556 }
2538                                                  2557 
2539 /**                                              2558 /**
2540  * __audit_mq_open - record audit data for a     2559  * __audit_mq_open - record audit data for a POSIX MQ open
2541  * @oflag: open flag                             2560  * @oflag: open flag
2542  * @mode: mode bits                              2561  * @mode: mode bits
2543  * @attr: queue attributes                       2562  * @attr: queue attributes
2544  *                                               2563  *
2545  */                                              2564  */
2546 void __audit_mq_open(int oflag, umode_t mode,    2565 void __audit_mq_open(int oflag, umode_t mode, struct mq_attr *attr)
2547 {                                                2566 {
2548         struct audit_context *context = audit    2567         struct audit_context *context = audit_context();
2549                                                  2568 
2550         if (attr)                                2569         if (attr)
2551                 memcpy(&context->mq_open.attr    2570                 memcpy(&context->mq_open.attr, attr, sizeof(struct mq_attr));
2552         else                                     2571         else
2553                 memset(&context->mq_open.attr    2572                 memset(&context->mq_open.attr, 0, sizeof(struct mq_attr));
2554                                                  2573 
2555         context->mq_open.oflag = oflag;          2574         context->mq_open.oflag = oflag;
2556         context->mq_open.mode = mode;            2575         context->mq_open.mode = mode;
2557                                                  2576 
2558         context->type = AUDIT_MQ_OPEN;           2577         context->type = AUDIT_MQ_OPEN;
2559 }                                                2578 }
2560                                                  2579 
2561 /**                                              2580 /**
2562  * __audit_mq_sendrecv - record audit data fo    2581  * __audit_mq_sendrecv - record audit data for a POSIX MQ timed send/receive
2563  * @mqdes: MQ descriptor                         2582  * @mqdes: MQ descriptor
2564  * @msg_len: Message length                      2583  * @msg_len: Message length
2565  * @msg_prio: Message priority                   2584  * @msg_prio: Message priority
2566  * @abs_timeout: Message timeout in absolute     2585  * @abs_timeout: Message timeout in absolute time
2567  *                                               2586  *
2568  */                                              2587  */
2569 void __audit_mq_sendrecv(mqd_t mqdes, size_t     2588 void __audit_mq_sendrecv(mqd_t mqdes, size_t msg_len, unsigned int msg_prio,
2570                         const struct timespec    2589                         const struct timespec64 *abs_timeout)
2571 {                                                2590 {
2572         struct audit_context *context = audit    2591         struct audit_context *context = audit_context();
2573         struct timespec64 *p = &context->mq_s    2592         struct timespec64 *p = &context->mq_sendrecv.abs_timeout;
2574                                                  2593 
2575         if (abs_timeout)                         2594         if (abs_timeout)
2576                 memcpy(p, abs_timeout, sizeof    2595                 memcpy(p, abs_timeout, sizeof(*p));
2577         else                                     2596         else
2578                 memset(p, 0, sizeof(*p));        2597                 memset(p, 0, sizeof(*p));
2579                                                  2598 
2580         context->mq_sendrecv.mqdes = mqdes;      2599         context->mq_sendrecv.mqdes = mqdes;
2581         context->mq_sendrecv.msg_len = msg_le    2600         context->mq_sendrecv.msg_len = msg_len;
2582         context->mq_sendrecv.msg_prio = msg_p    2601         context->mq_sendrecv.msg_prio = msg_prio;
2583                                                  2602 
2584         context->type = AUDIT_MQ_SENDRECV;       2603         context->type = AUDIT_MQ_SENDRECV;
2585 }                                                2604 }
2586                                                  2605 
2587 /**                                              2606 /**
2588  * __audit_mq_notify - record audit data for     2607  * __audit_mq_notify - record audit data for a POSIX MQ notify
2589  * @mqdes: MQ descriptor                         2608  * @mqdes: MQ descriptor
2590  * @notification: Notification event             2609  * @notification: Notification event
2591  *                                               2610  *
2592  */                                              2611  */
2593                                                  2612 
2594 void __audit_mq_notify(mqd_t mqdes, const str    2613 void __audit_mq_notify(mqd_t mqdes, const struct sigevent *notification)
2595 {                                                2614 {
2596         struct audit_context *context = audit    2615         struct audit_context *context = audit_context();
2597                                                  2616 
2598         if (notification)                        2617         if (notification)
2599                 context->mq_notify.sigev_sign    2618                 context->mq_notify.sigev_signo = notification->sigev_signo;
2600         else                                     2619         else
2601                 context->mq_notify.sigev_sign    2620                 context->mq_notify.sigev_signo = 0;
2602                                                  2621 
2603         context->mq_notify.mqdes = mqdes;        2622         context->mq_notify.mqdes = mqdes;
2604         context->type = AUDIT_MQ_NOTIFY;         2623         context->type = AUDIT_MQ_NOTIFY;
2605 }                                                2624 }
2606                                                  2625 
2607 /**                                              2626 /**
2608  * __audit_mq_getsetattr - record audit data     2627  * __audit_mq_getsetattr - record audit data for a POSIX MQ get/set attribute
2609  * @mqdes: MQ descriptor                         2628  * @mqdes: MQ descriptor
2610  * @mqstat: MQ flags                             2629  * @mqstat: MQ flags
2611  *                                               2630  *
2612  */                                              2631  */
2613 void __audit_mq_getsetattr(mqd_t mqdes, struc    2632 void __audit_mq_getsetattr(mqd_t mqdes, struct mq_attr *mqstat)
2614 {                                                2633 {
2615         struct audit_context *context = audit    2634         struct audit_context *context = audit_context();
2616                                                  2635 
2617         context->mq_getsetattr.mqdes = mqdes;    2636         context->mq_getsetattr.mqdes = mqdes;
2618         context->mq_getsetattr.mqstat = *mqst    2637         context->mq_getsetattr.mqstat = *mqstat;
2619         context->type = AUDIT_MQ_GETSETATTR;     2638         context->type = AUDIT_MQ_GETSETATTR;
2620 }                                                2639 }
2621                                                  2640 
2622 /**                                              2641 /**
2623  * __audit_ipc_obj - record audit data for ip    2642  * __audit_ipc_obj - record audit data for ipc object
2624  * @ipcp: ipc permissions                        2643  * @ipcp: ipc permissions
2625  *                                               2644  *
2626  */                                              2645  */
2627 void __audit_ipc_obj(struct kern_ipc_perm *ip    2646 void __audit_ipc_obj(struct kern_ipc_perm *ipcp)
2628 {                                                2647 {
2629         struct audit_context *context = audit    2648         struct audit_context *context = audit_context();
2630                                                  2649 
2631         context->ipc.uid = ipcp->uid;            2650         context->ipc.uid = ipcp->uid;
2632         context->ipc.gid = ipcp->gid;            2651         context->ipc.gid = ipcp->gid;
2633         context->ipc.mode = ipcp->mode;          2652         context->ipc.mode = ipcp->mode;
2634         context->ipc.has_perm = 0;               2653         context->ipc.has_perm = 0;
2635         security_ipc_getsecid(ipcp, &context-    2654         security_ipc_getsecid(ipcp, &context->ipc.osid);
2636         context->type = AUDIT_IPC;               2655         context->type = AUDIT_IPC;
2637 }                                                2656 }
2638                                                  2657 
2639 /**                                              2658 /**
2640  * __audit_ipc_set_perm - record audit data f    2659  * __audit_ipc_set_perm - record audit data for new ipc permissions
2641  * @qbytes: msgq bytes                           2660  * @qbytes: msgq bytes
2642  * @uid: msgq user id                            2661  * @uid: msgq user id
2643  * @gid: msgq group id                           2662  * @gid: msgq group id
2644  * @mode: msgq mode (permissions)                2663  * @mode: msgq mode (permissions)
2645  *                                               2664  *
2646  * Called only after audit_ipc_obj().            2665  * Called only after audit_ipc_obj().
2647  */                                              2666  */
2648 void __audit_ipc_set_perm(unsigned long qbyte    2667 void __audit_ipc_set_perm(unsigned long qbytes, uid_t uid, gid_t gid, umode_t mode)
2649 {                                                2668 {
2650         struct audit_context *context = audit    2669         struct audit_context *context = audit_context();
2651                                                  2670 
2652         context->ipc.qbytes = qbytes;            2671         context->ipc.qbytes = qbytes;
2653         context->ipc.perm_uid = uid;             2672         context->ipc.perm_uid = uid;
2654         context->ipc.perm_gid = gid;             2673         context->ipc.perm_gid = gid;
2655         context->ipc.perm_mode = mode;           2674         context->ipc.perm_mode = mode;
2656         context->ipc.has_perm = 1;               2675         context->ipc.has_perm = 1;
2657 }                                                2676 }
2658                                                  2677 
2659 void __audit_bprm(struct linux_binprm *bprm)     2678 void __audit_bprm(struct linux_binprm *bprm)
2660 {                                                2679 {
2661         struct audit_context *context = audit    2680         struct audit_context *context = audit_context();
2662                                                  2681 
2663         context->type = AUDIT_EXECVE;            2682         context->type = AUDIT_EXECVE;
2664         context->execve.argc = bprm->argc;       2683         context->execve.argc = bprm->argc;
2665 }                                                2684 }
2666                                                  2685 
2667                                                  2686 
2668 /**                                              2687 /**
2669  * __audit_socketcall - record audit data for    2688  * __audit_socketcall - record audit data for sys_socketcall
2670  * @nargs: number of args, which should not b    2689  * @nargs: number of args, which should not be more than AUDITSC_ARGS.
2671  * @args: args array                             2690  * @args: args array
2672  *                                               2691  *
2673  */                                              2692  */
2674 int __audit_socketcall(int nargs, unsigned lo    2693 int __audit_socketcall(int nargs, unsigned long *args)
2675 {                                                2694 {
2676         struct audit_context *context = audit    2695         struct audit_context *context = audit_context();
2677                                                  2696 
2678         if (nargs <= 0 || nargs > AUDITSC_ARG    2697         if (nargs <= 0 || nargs > AUDITSC_ARGS || !args)
2679                 return -EINVAL;                  2698                 return -EINVAL;
2680         context->type = AUDIT_SOCKETCALL;        2699         context->type = AUDIT_SOCKETCALL;
2681         context->socketcall.nargs = nargs;       2700         context->socketcall.nargs = nargs;
2682         memcpy(context->socketcall.args, args    2701         memcpy(context->socketcall.args, args, nargs * sizeof(unsigned long));
2683         return 0;                                2702         return 0;
2684 }                                                2703 }
2685                                                  2704 
2686 /**                                              2705 /**
2687  * __audit_fd_pair - record audit data for pi    2706  * __audit_fd_pair - record audit data for pipe and socketpair
2688  * @fd1: the first file descriptor               2707  * @fd1: the first file descriptor
2689  * @fd2: the second file descriptor              2708  * @fd2: the second file descriptor
2690  *                                               2709  *
2691  */                                              2710  */
2692 void __audit_fd_pair(int fd1, int fd2)           2711 void __audit_fd_pair(int fd1, int fd2)
2693 {                                                2712 {
2694         struct audit_context *context = audit    2713         struct audit_context *context = audit_context();
2695                                                  2714 
2696         context->fds[0] = fd1;                   2715         context->fds[0] = fd1;
2697         context->fds[1] = fd2;                   2716         context->fds[1] = fd2;
2698 }                                                2717 }
2699                                                  2718 
2700 /**                                              2719 /**
2701  * __audit_sockaddr - record audit data for s    2720  * __audit_sockaddr - record audit data for sys_bind, sys_connect, sys_sendto
2702  * @len: data length in user space               2721  * @len: data length in user space
2703  * @a: data address in kernel space              2722  * @a: data address in kernel space
2704  *                                               2723  *
2705  * Returns 0 for success or NULL context or <    2724  * Returns 0 for success or NULL context or < 0 on error.
2706  */                                              2725  */
2707 int __audit_sockaddr(int len, void *a)           2726 int __audit_sockaddr(int len, void *a)
2708 {                                                2727 {
2709         struct audit_context *context = audit    2728         struct audit_context *context = audit_context();
2710                                                  2729 
2711         if (!context->sockaddr) {                2730         if (!context->sockaddr) {
2712                 void *p = kmalloc(sizeof(stru    2731                 void *p = kmalloc(sizeof(struct sockaddr_storage), GFP_KERNEL);
2713                                                  2732 
2714                 if (!p)                          2733                 if (!p)
2715                         return -ENOMEM;          2734                         return -ENOMEM;
2716                 context->sockaddr = p;           2735                 context->sockaddr = p;
2717         }                                        2736         }
2718                                                  2737 
2719         context->sockaddr_len = len;             2738         context->sockaddr_len = len;
2720         memcpy(context->sockaddr, a, len);       2739         memcpy(context->sockaddr, a, len);
2721         return 0;                                2740         return 0;
2722 }                                                2741 }
2723                                                  2742 
2724 void __audit_ptrace(struct task_struct *t)       2743 void __audit_ptrace(struct task_struct *t)
2725 {                                                2744 {
2726         struct audit_context *context = audit    2745         struct audit_context *context = audit_context();
2727                                                  2746 
2728         context->target_pid = task_tgid_nr(t)    2747         context->target_pid = task_tgid_nr(t);
2729         context->target_auid = audit_get_logi    2748         context->target_auid = audit_get_loginuid(t);
2730         context->target_uid = task_uid(t);       2749         context->target_uid = task_uid(t);
2731         context->target_sessionid = audit_get    2750         context->target_sessionid = audit_get_sessionid(t);
2732         security_task_getsecid_obj(t, &contex    2751         security_task_getsecid_obj(t, &context->target_sid);
2733         memcpy(context->target_comm, t->comm,    2752         memcpy(context->target_comm, t->comm, TASK_COMM_LEN);
2734 }                                                2753 }
2735                                                  2754 
2736 /**                                              2755 /**
2737  * audit_signal_info_syscall - record signal     2756  * audit_signal_info_syscall - record signal info for syscalls
2738  * @t: task being signaled                       2757  * @t: task being signaled
2739  *                                               2758  *
2740  * If the audit subsystem is being terminated    2759  * If the audit subsystem is being terminated, record the task (pid)
2741  * and uid that is doing that.                   2760  * and uid that is doing that.
2742  */                                              2761  */
2743 int audit_signal_info_syscall(struct task_str    2762 int audit_signal_info_syscall(struct task_struct *t)
2744 {                                                2763 {
2745         struct audit_aux_data_pids *axp;         2764         struct audit_aux_data_pids *axp;
2746         struct audit_context *ctx = audit_con    2765         struct audit_context *ctx = audit_context();
2747         kuid_t t_uid = task_uid(t);              2766         kuid_t t_uid = task_uid(t);
2748                                                  2767 
2749         if (!audit_signals || audit_dummy_con    2768         if (!audit_signals || audit_dummy_context())
2750                 return 0;                        2769                 return 0;
2751                                                  2770 
2752         /* optimize the common case by puttin    2771         /* optimize the common case by putting first signal recipient directly
2753          * in audit_context */                   2772          * in audit_context */
2754         if (!ctx->target_pid) {                  2773         if (!ctx->target_pid) {
2755                 ctx->target_pid = task_tgid_n    2774                 ctx->target_pid = task_tgid_nr(t);
2756                 ctx->target_auid = audit_get_    2775                 ctx->target_auid = audit_get_loginuid(t);
2757                 ctx->target_uid = t_uid;         2776                 ctx->target_uid = t_uid;
2758                 ctx->target_sessionid = audit    2777                 ctx->target_sessionid = audit_get_sessionid(t);
2759                 security_task_getsecid_obj(t,    2778                 security_task_getsecid_obj(t, &ctx->target_sid);
2760                 memcpy(ctx->target_comm, t->c    2779                 memcpy(ctx->target_comm, t->comm, TASK_COMM_LEN);
2761                 return 0;                        2780                 return 0;
2762         }                                        2781         }
2763                                                  2782 
2764         axp = (void *)ctx->aux_pids;             2783         axp = (void *)ctx->aux_pids;
2765         if (!axp || axp->pid_count == AUDIT_A    2784         if (!axp || axp->pid_count == AUDIT_AUX_PIDS) {
2766                 axp = kzalloc(sizeof(*axp), G    2785                 axp = kzalloc(sizeof(*axp), GFP_ATOMIC);
2767                 if (!axp)                        2786                 if (!axp)
2768                         return -ENOMEM;          2787                         return -ENOMEM;
2769                                                  2788 
2770                 axp->d.type = AUDIT_OBJ_PID;     2789                 axp->d.type = AUDIT_OBJ_PID;
2771                 axp->d.next = ctx->aux_pids;     2790                 axp->d.next = ctx->aux_pids;
2772                 ctx->aux_pids = (void *)axp;     2791                 ctx->aux_pids = (void *)axp;
2773         }                                        2792         }
2774         BUG_ON(axp->pid_count >= AUDIT_AUX_PI    2793         BUG_ON(axp->pid_count >= AUDIT_AUX_PIDS);
2775                                                  2794 
2776         axp->target_pid[axp->pid_count] = tas    2795         axp->target_pid[axp->pid_count] = task_tgid_nr(t);
2777         axp->target_auid[axp->pid_count] = au    2796         axp->target_auid[axp->pid_count] = audit_get_loginuid(t);
2778         axp->target_uid[axp->pid_count] = t_u    2797         axp->target_uid[axp->pid_count] = t_uid;
2779         axp->target_sessionid[axp->pid_count]    2798         axp->target_sessionid[axp->pid_count] = audit_get_sessionid(t);
2780         security_task_getsecid_obj(t, &axp->t    2799         security_task_getsecid_obj(t, &axp->target_sid[axp->pid_count]);
2781         memcpy(axp->target_comm[axp->pid_coun    2800         memcpy(axp->target_comm[axp->pid_count], t->comm, TASK_COMM_LEN);
2782         axp->pid_count++;                        2801         axp->pid_count++;
2783                                                  2802 
2784         return 0;                                2803         return 0;
2785 }                                                2804 }
2786                                                  2805 
2787 /**                                              2806 /**
2788  * __audit_log_bprm_fcaps - store information    2807  * __audit_log_bprm_fcaps - store information about a loading bprm and relevant fcaps
2789  * @bprm: pointer to the bprm being processed    2808  * @bprm: pointer to the bprm being processed
2790  * @new: the proposed new credentials            2809  * @new: the proposed new credentials
2791  * @old: the old credentials                     2810  * @old: the old credentials
2792  *                                               2811  *
2793  * Simply check if the proc already has the c    2812  * Simply check if the proc already has the caps given by the file and if not
2794  * store the priv escalation info for later a    2813  * store the priv escalation info for later auditing at the end of the syscall
2795  *                                               2814  *
2796  * -Eric                                         2815  * -Eric
2797  */                                              2816  */
2798 int __audit_log_bprm_fcaps(struct linux_binpr    2817 int __audit_log_bprm_fcaps(struct linux_binprm *bprm,
2799                            const struct cred     2818                            const struct cred *new, const struct cred *old)
2800 {                                                2819 {
2801         struct audit_aux_data_bprm_fcaps *ax;    2820         struct audit_aux_data_bprm_fcaps *ax;
2802         struct audit_context *context = audit    2821         struct audit_context *context = audit_context();
2803         struct cpu_vfs_cap_data vcaps;           2822         struct cpu_vfs_cap_data vcaps;
2804                                                  2823 
2805         ax = kmalloc(sizeof(*ax), GFP_KERNEL)    2824         ax = kmalloc(sizeof(*ax), GFP_KERNEL);
2806         if (!ax)                                 2825         if (!ax)
2807                 return -ENOMEM;                  2826                 return -ENOMEM;
2808                                                  2827 
2809         ax->d.type = AUDIT_BPRM_FCAPS;           2828         ax->d.type = AUDIT_BPRM_FCAPS;
2810         ax->d.next = context->aux;               2829         ax->d.next = context->aux;
2811         context->aux = (void *)ax;               2830         context->aux = (void *)ax;
2812                                                  2831 
2813         get_vfs_caps_from_disk(&nop_mnt_idmap !! 2832         get_vfs_caps_from_disk(&init_user_ns,
2814                                bprm->file->f_    2833                                bprm->file->f_path.dentry, &vcaps);
2815                                                  2834 
2816         ax->fcap.permitted = vcaps.permitted;    2835         ax->fcap.permitted = vcaps.permitted;
2817         ax->fcap.inheritable = vcaps.inherita    2836         ax->fcap.inheritable = vcaps.inheritable;
2818         ax->fcap.fE = !!(vcaps.magic_etc & VF    2837         ax->fcap.fE = !!(vcaps.magic_etc & VFS_CAP_FLAGS_EFFECTIVE);
2819         ax->fcap.rootid = vcaps.rootid;          2838         ax->fcap.rootid = vcaps.rootid;
2820         ax->fcap_ver = (vcaps.magic_etc & VFS    2839         ax->fcap_ver = (vcaps.magic_etc & VFS_CAP_REVISION_MASK) >> VFS_CAP_REVISION_SHIFT;
2821                                                  2840 
2822         ax->old_pcap.permitted   = old->cap_p    2841         ax->old_pcap.permitted   = old->cap_permitted;
2823         ax->old_pcap.inheritable = old->cap_i    2842         ax->old_pcap.inheritable = old->cap_inheritable;
2824         ax->old_pcap.effective   = old->cap_e    2843         ax->old_pcap.effective   = old->cap_effective;
2825         ax->old_pcap.ambient     = old->cap_a    2844         ax->old_pcap.ambient     = old->cap_ambient;
2826                                                  2845 
2827         ax->new_pcap.permitted   = new->cap_p    2846         ax->new_pcap.permitted   = new->cap_permitted;
2828         ax->new_pcap.inheritable = new->cap_i    2847         ax->new_pcap.inheritable = new->cap_inheritable;
2829         ax->new_pcap.effective   = new->cap_e    2848         ax->new_pcap.effective   = new->cap_effective;
2830         ax->new_pcap.ambient     = new->cap_a    2849         ax->new_pcap.ambient     = new->cap_ambient;
2831         return 0;                                2850         return 0;
2832 }                                                2851 }
2833                                                  2852 
2834 /**                                              2853 /**
2835  * __audit_log_capset - store information abo    2854  * __audit_log_capset - store information about the arguments to the capset syscall
2836  * @new: the new credentials                     2855  * @new: the new credentials
2837  * @old: the old (current) credentials           2856  * @old: the old (current) credentials
2838  *                                               2857  *
2839  * Record the arguments userspace sent to sys    2858  * Record the arguments userspace sent to sys_capset for later printing by the
2840  * audit system if applicable                    2859  * audit system if applicable
2841  */                                              2860  */
2842 void __audit_log_capset(const struct cred *ne    2861 void __audit_log_capset(const struct cred *new, const struct cred *old)
2843 {                                                2862 {
2844         struct audit_context *context = audit    2863         struct audit_context *context = audit_context();
2845                                                  2864 
2846         context->capset.pid = task_tgid_nr(cu    2865         context->capset.pid = task_tgid_nr(current);
2847         context->capset.cap.effective   = new    2866         context->capset.cap.effective   = new->cap_effective;
2848         context->capset.cap.inheritable = new    2867         context->capset.cap.inheritable = new->cap_effective;
2849         context->capset.cap.permitted   = new    2868         context->capset.cap.permitted   = new->cap_permitted;
2850         context->capset.cap.ambient     = new    2869         context->capset.cap.ambient     = new->cap_ambient;
2851         context->type = AUDIT_CAPSET;            2870         context->type = AUDIT_CAPSET;
2852 }                                                2871 }
2853                                                  2872 
2854 void __audit_mmap_fd(int fd, int flags)          2873 void __audit_mmap_fd(int fd, int flags)
2855 {                                                2874 {
2856         struct audit_context *context = audit    2875         struct audit_context *context = audit_context();
2857                                                  2876 
2858         context->mmap.fd = fd;                   2877         context->mmap.fd = fd;
2859         context->mmap.flags = flags;             2878         context->mmap.flags = flags;
2860         context->type = AUDIT_MMAP;              2879         context->type = AUDIT_MMAP;
2861 }                                                2880 }
2862                                                  2881 
2863 void __audit_openat2_how(struct open_how *how    2882 void __audit_openat2_how(struct open_how *how)
2864 {                                                2883 {
2865         struct audit_context *context = audit    2884         struct audit_context *context = audit_context();
2866                                                  2885 
2867         context->openat2.flags = how->flags;     2886         context->openat2.flags = how->flags;
2868         context->openat2.mode = how->mode;       2887         context->openat2.mode = how->mode;
2869         context->openat2.resolve = how->resol    2888         context->openat2.resolve = how->resolve;
2870         context->type = AUDIT_OPENAT2;           2889         context->type = AUDIT_OPENAT2;
2871 }                                                2890 }
2872                                                  2891 
2873 void __audit_log_kern_module(char *name)         2892 void __audit_log_kern_module(char *name)
2874 {                                                2893 {
2875         struct audit_context *context = audit    2894         struct audit_context *context = audit_context();
2876                                                  2895 
2877         context->module.name = kstrdup(name,     2896         context->module.name = kstrdup(name, GFP_KERNEL);
2878         if (!context->module.name)               2897         if (!context->module.name)
2879                 audit_log_lost("out of memory    2898                 audit_log_lost("out of memory in __audit_log_kern_module");
2880         context->type = AUDIT_KERN_MODULE;       2899         context->type = AUDIT_KERN_MODULE;
2881 }                                                2900 }
2882                                                  2901 
2883 void __audit_fanotify(u32 response, struct fa !! 2902 void __audit_fanotify(unsigned int response)
2884 {                                                2903 {
2885         /* {subj,obj}_trust values are {0,1,2 !! 2904         audit_log(audit_context(), GFP_KERNEL,
2886         switch (friar->hdr.type) {            !! 2905                 AUDIT_FANOTIFY, "resp=%u", response);
2887         case FAN_RESPONSE_INFO_NONE:          << 
2888                 audit_log(audit_context(), GF << 
2889                           "resp=%u fan_type=% << 
2890                           response, FAN_RESPO << 
2891                 break;                        << 
2892         case FAN_RESPONSE_INFO_AUDIT_RULE:    << 
2893                 audit_log(audit_context(), GF << 
2894                           "resp=%u fan_type=% << 
2895                           response, friar->hd << 
2896                           friar->subj_trust,  << 
2897         }                                     << 
2898 }                                                2906 }
2899                                                  2907 
2900 void __audit_tk_injoffset(struct timespec64 o    2908 void __audit_tk_injoffset(struct timespec64 offset)
2901 {                                                2909 {
2902         struct audit_context *context = audit    2910         struct audit_context *context = audit_context();
2903                                                  2911 
2904         /* only set type if not already set b    2912         /* only set type if not already set by NTP */
2905         if (!context->type)                      2913         if (!context->type)
2906                 context->type = AUDIT_TIME_IN    2914                 context->type = AUDIT_TIME_INJOFFSET;
2907         memcpy(&context->time.tk_injoffset, &    2915         memcpy(&context->time.tk_injoffset, &offset, sizeof(offset));
2908 }                                                2916 }
2909                                                  2917 
2910 void __audit_ntp_log(const struct audit_ntp_d    2918 void __audit_ntp_log(const struct audit_ntp_data *ad)
2911 {                                                2919 {
2912         struct audit_context *context = audit    2920         struct audit_context *context = audit_context();
2913         int type;                                2921         int type;
2914                                                  2922 
2915         for (type = 0; type < AUDIT_NTP_NVALS    2923         for (type = 0; type < AUDIT_NTP_NVALS; type++)
2916                 if (ad->vals[type].newval !=     2924                 if (ad->vals[type].newval != ad->vals[type].oldval) {
2917                         /* unconditionally se    2925                         /* unconditionally set type, overwriting TK */
2918                         context->type = AUDIT    2926                         context->type = AUDIT_TIME_ADJNTPVAL;
2919                         memcpy(&context->time    2927                         memcpy(&context->time.ntp_data, ad, sizeof(*ad));
2920                         break;                   2928                         break;
2921                 }                                2929                 }
2922 }                                                2930 }
2923                                                  2931 
2924 void __audit_log_nfcfg(const char *name, u8 a    2932 void __audit_log_nfcfg(const char *name, u8 af, unsigned int nentries,
2925                        enum audit_nfcfgop op,    2933                        enum audit_nfcfgop op, gfp_t gfp)
2926 {                                                2934 {
2927         struct audit_buffer *ab;                 2935         struct audit_buffer *ab;
2928         char comm[sizeof(current->comm)];        2936         char comm[sizeof(current->comm)];
2929                                                  2937 
2930         ab = audit_log_start(audit_context(),    2938         ab = audit_log_start(audit_context(), gfp, AUDIT_NETFILTER_CFG);
2931         if (!ab)                                 2939         if (!ab)
2932                 return;                          2940                 return;
2933         audit_log_format(ab, "table=%s family    2941         audit_log_format(ab, "table=%s family=%u entries=%u op=%s",
2934                          name, af, nentries,     2942                          name, af, nentries, audit_nfcfgs[op].s);
2935                                                  2943 
2936         audit_log_format(ab, " pid=%u", task_    2944         audit_log_format(ab, " pid=%u", task_pid_nr(current));
2937         audit_log_task_context(ab); /* subj=     2945         audit_log_task_context(ab); /* subj= */
2938         audit_log_format(ab, " comm=");          2946         audit_log_format(ab, " comm=");
2939         audit_log_untrustedstring(ab, get_tas    2947         audit_log_untrustedstring(ab, get_task_comm(comm, current));
2940         audit_log_end(ab);                       2948         audit_log_end(ab);
2941 }                                                2949 }
2942 EXPORT_SYMBOL_GPL(__audit_log_nfcfg);            2950 EXPORT_SYMBOL_GPL(__audit_log_nfcfg);
2943                                                  2951 
2944 static void audit_log_task(struct audit_buffe    2952 static void audit_log_task(struct audit_buffer *ab)
2945 {                                                2953 {
2946         kuid_t auid, uid;                        2954         kuid_t auid, uid;
2947         kgid_t gid;                              2955         kgid_t gid;
2948         unsigned int sessionid;                  2956         unsigned int sessionid;
2949         char comm[sizeof(current->comm)];        2957         char comm[sizeof(current->comm)];
2950                                                  2958 
2951         auid = audit_get_loginuid(current);      2959         auid = audit_get_loginuid(current);
2952         sessionid = audit_get_sessionid(curre    2960         sessionid = audit_get_sessionid(current);
2953         current_uid_gid(&uid, &gid);             2961         current_uid_gid(&uid, &gid);
2954                                                  2962 
2955         audit_log_format(ab, "auid=%u uid=%u     2963         audit_log_format(ab, "auid=%u uid=%u gid=%u ses=%u",
2956                          from_kuid(&init_user    2964                          from_kuid(&init_user_ns, auid),
2957                          from_kuid(&init_user    2965                          from_kuid(&init_user_ns, uid),
2958                          from_kgid(&init_user    2966                          from_kgid(&init_user_ns, gid),
2959                          sessionid);             2967                          sessionid);
2960         audit_log_task_context(ab);              2968         audit_log_task_context(ab);
2961         audit_log_format(ab, " pid=%d comm=",    2969         audit_log_format(ab, " pid=%d comm=", task_tgid_nr(current));
2962         audit_log_untrustedstring(ab, get_tas    2970         audit_log_untrustedstring(ab, get_task_comm(comm, current));
2963         audit_log_d_path_exe(ab, current->mm)    2971         audit_log_d_path_exe(ab, current->mm);
2964 }                                                2972 }
2965                                                  2973 
2966 /**                                              2974 /**
2967  * audit_core_dumps - record information abou    2975  * audit_core_dumps - record information about processes that end abnormally
2968  * @signr: signal value                          2976  * @signr: signal value
2969  *                                               2977  *
2970  * If a process ends with a core dump, someth    2978  * If a process ends with a core dump, something fishy is going on and we
2971  * should record the event for investigation.    2979  * should record the event for investigation.
2972  */                                              2980  */
2973 void audit_core_dumps(long signr)                2981 void audit_core_dumps(long signr)
2974 {                                                2982 {
2975         struct audit_buffer *ab;                 2983         struct audit_buffer *ab;
2976                                                  2984 
2977         if (!audit_enabled)                      2985         if (!audit_enabled)
2978                 return;                          2986                 return;
2979                                                  2987 
2980         if (signr == SIGQUIT)   /* don't care    2988         if (signr == SIGQUIT)   /* don't care for those */
2981                 return;                          2989                 return;
2982                                                  2990 
2983         ab = audit_log_start(audit_context(),    2991         ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_ANOM_ABEND);
2984         if (unlikely(!ab))                       2992         if (unlikely(!ab))
2985                 return;                          2993                 return;
2986         audit_log_task(ab);                      2994         audit_log_task(ab);
2987         audit_log_format(ab, " sig=%ld res=1"    2995         audit_log_format(ab, " sig=%ld res=1", signr);
2988         audit_log_end(ab);                       2996         audit_log_end(ab);
2989 }                                                2997 }
2990                                                  2998 
2991 /**                                              2999 /**
2992  * audit_seccomp - record information about a    3000  * audit_seccomp - record information about a seccomp action
2993  * @syscall: syscall number                      3001  * @syscall: syscall number
2994  * @signr: signal value                          3002  * @signr: signal value
2995  * @code: the seccomp action                     3003  * @code: the seccomp action
2996  *                                               3004  *
2997  * Record the information associated with a s    3005  * Record the information associated with a seccomp action. Event filtering for
2998  * seccomp actions that are not to be logged     3006  * seccomp actions that are not to be logged is done in seccomp_log().
2999  * Therefore, this function forces auditing i    3007  * Therefore, this function forces auditing independent of the audit_enabled
3000  * and dummy context state because seccomp ac    3008  * and dummy context state because seccomp actions should be logged even when
3001  * audit is not in use.                          3009  * audit is not in use.
3002  */                                              3010  */
3003 void audit_seccomp(unsigned long syscall, lon    3011 void audit_seccomp(unsigned long syscall, long signr, int code)
3004 {                                                3012 {
3005         struct audit_buffer *ab;                 3013         struct audit_buffer *ab;
3006                                                  3014 
3007         ab = audit_log_start(audit_context(),    3015         ab = audit_log_start(audit_context(), GFP_KERNEL, AUDIT_SECCOMP);
3008         if (unlikely(!ab))                       3016         if (unlikely(!ab))
3009                 return;                          3017                 return;
3010         audit_log_task(ab);                      3018         audit_log_task(ab);
3011         audit_log_format(ab, " sig=%ld arch=%    3019         audit_log_format(ab, " sig=%ld arch=%x syscall=%ld compat=%d ip=0x%lx code=0x%x",
3012                          signr, syscall_get_a    3020                          signr, syscall_get_arch(current), syscall,
3013                          in_compat_syscall(),    3021                          in_compat_syscall(), KSTK_EIP(current), code);
3014         audit_log_end(ab);                       3022         audit_log_end(ab);
3015 }                                                3023 }
3016                                                  3024 
3017 void audit_seccomp_actions_logged(const char     3025 void audit_seccomp_actions_logged(const char *names, const char *old_names,
3018                                   int res)       3026                                   int res)
3019 {                                                3027 {
3020         struct audit_buffer *ab;                 3028         struct audit_buffer *ab;
3021                                                  3029 
3022         if (!audit_enabled)                      3030         if (!audit_enabled)
3023                 return;                          3031                 return;
3024                                                  3032 
3025         ab = audit_log_start(audit_context(),    3033         ab = audit_log_start(audit_context(), GFP_KERNEL,
3026                              AUDIT_CONFIG_CHA    3034                              AUDIT_CONFIG_CHANGE);
3027         if (unlikely(!ab))                       3035         if (unlikely(!ab))
3028                 return;                          3036                 return;
3029                                                  3037 
3030         audit_log_format(ab,                     3038         audit_log_format(ab,
3031                          "op=seccomp-logging     3039                          "op=seccomp-logging actions=%s old-actions=%s res=%d",
3032                          names, old_names, re    3040                          names, old_names, res);
3033         audit_log_end(ab);                       3041         audit_log_end(ab);
3034 }                                                3042 }
3035                                                  3043 
3036 struct list_head *audit_killed_trees(void)       3044 struct list_head *audit_killed_trees(void)
3037 {                                                3045 {
3038         struct audit_context *ctx = audit_con    3046         struct audit_context *ctx = audit_context();
3039         if (likely(!ctx || ctx->context == AU    3047         if (likely(!ctx || ctx->context == AUDIT_CTX_UNUSED))
3040                 return NULL;                     3048                 return NULL;
3041         return &ctx->killed_trees;               3049         return &ctx->killed_trees;
3042 }                                                3050 }
3043                                                  3051 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php