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