Date: Tue, 18 Oct 2005 13:03:17 GMT From: Robert Watson <rwatson@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 85492 for review Message-ID: <200510181303.j9ID3HLx075725@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=85492 Change 85492 by rwatson@rwatson_zoo on 2005/10/18 13:02:25 Two more cases of ARG_SET_VALID(), and use ARG_IS_VALID() when testing for bits. Affected files ... .. //depot/projects/trustedbsd/audit3/sys/security/audit/audit_arg.c#6 edit .. //depot/projects/trustedbsd/audit3/sys/security/audit/kern_bsm_audit.c#24 edit Differences ... ==== //depot/projects/trustedbsd/audit3/sys/security/audit/audit_arg.c#6 (text+ko) ==== @@ -771,9 +771,9 @@ } if (flags & ARG_VNODE1) - ar->k_ar.ar_valid_arg |= ARG_KPATH1; + ARG_SET_VALID(ar, ARG_KPATH1); else - ar->k_ar.ar_valid_arg |= ARG_KPATH2; + ARG_SET_VALID(ar, ARG_KPATH2); error = VOP_GETATTR(vp, &vattr, td->td_ucred, td); if (error) { ==== //depot/projects/trustedbsd/audit3/sys/security/audit/kern_bsm_audit.c#24 (text+ko) ==== @@ -159,61 +159,64 @@ /* * XXX May want turn some (or all) of these macros into functions in order * to reduce the generated code sized. + * + * XXXAUDIT: These macros assume that 'kar', 'ar', 'rec', and 'tok' in the + * caller are OK with this. */ #define UPATH1_TOKENS do { \ - if (ar->ar_valid_arg & ARG_UPATH1) { \ + if (ARG_IS_VALID(kar, ARG_UPATH1)) { \ tok = au_to_path(ar->ar_arg_upath1); \ kau_write(rec, tok); \ } \ } while (0) #define UPATH2_TOKENS do { \ - if (ar->ar_valid_arg & ARG_UPATH2) { \ + if (ARG_IS_VALID(kar, ARG_UPATH2)) { \ tok = au_to_path(ar->ar_arg_upath2); \ kau_write(rec, tok); \ } \ } while (0) #define KPATH1_VNODE1_TOKENS do { \ - if (ar->ar_valid_arg & ARG_KPATH1) { \ + if (ARG_IS_VALID(kar, ARG_KPATH1)) { \ tok = au_to_path(ar->ar_arg_kpath1); \ kau_write(rec, tok); \ } \ - if (ar->ar_valid_arg & ARG_VNODE1) { \ + if (ARG_IS_VALID(kar, ARG_VNODE1)) { \ tok = au_to_attr32(&ar->ar_arg_vnode1); \ kau_write(rec, tok); \ } \ } while (0) #define KPATH1_VNODE1_OR_UPATH1_TOKENS do { \ - if (ar->ar_valid_arg & ARG_KPATH1) { \ + if (ARG_IS_VALID(kar, ARG_KPATH1)) { \ tok = au_to_path(ar->ar_arg_kpath1); \ kau_write(rec, tok); \ } else { \ UPATH1_TOKENS; \ } \ - if (ar->ar_valid_arg & ARG_VNODE1) { \ + if (ARG_IS_VALID(kar, ARG_VNODE1)) { \ tok = au_to_attr32(&ar->ar_arg_vnode1); \ kau_write(rec, tok); \ } \ } while (0) #define KPATH2_VNODE2_TOKENS do { \ - if (ar->ar_valid_arg & ARG_KPATH2) { \ + if (ARG_IS_VALID(kar, ARG_KPATH2)) { \ tok = au_to_path(ar->ar_arg_kpath2); \ kau_write(rec, tok); \ } \ - if (ar->ar_valid_arg & ARG_VNODE2) { \ + if (ARG_IS_VALID(kar, ARG_VNODE2)) { \ tok = au_to_attr32(&ar->ar_arg_vnode2); \ kau_write(rec, tok); \ } \ } while (0) #define FD_KPATH1_VNODE1_TOKENS do { \ - if (ar->ar_valid_arg & ARG_KPATH1) { \ + if (ARG_IS_VALID(kar, ARG_KPATH1)) { \ tok = au_to_path(ar->ar_arg_kpath1); \ kau_write(rec, tok); \ - if (ar->ar_valid_arg & ARG_VNODE1) { \ + if (ARG_IS_VALID(kar, ARG_VNODE1)) { \ tok = au_to_attr32(&ar->ar_arg_vnode1); \ kau_write(rec, tok); \ } \ @@ -223,9 +226,12 @@ } \ } while (0) +/* + * XXXAUDIT: We read ar_arg_pid without testing that it is valid first. + */ #define PROCESS_PID_TOKENS(argn) do { \ if ((ar->ar_arg_pid > 0) /* Kill a single process */ \ - && (ar->ar_valid_arg & ARG_PROCESS)) { \ + && (ARG_IS_VALID(kar, ARG_PROCESS))) { \ tok = au_to_process(ar->ar_arg_auid, \ ar->ar_arg_euid, ar->ar_arg_egid, \ ar->ar_arg_ruid, ar->ar_arg_rgid, \ @@ -399,12 +405,12 @@ case AUE_SENDTO: tok = au_to_arg32(1, "fd", ar->ar_arg_fd); kau_write(rec, tok); - if (ar->ar_valid_arg & ARG_SADDRINET) { + if (ARG_IS_VALID(kar, ARG_SADDRINET)) { tok = au_to_sock_inet( (struct sockaddr_in *)&ar->ar_arg_sockaddr); kau_write(rec, tok); } - if (ar->ar_valid_arg & ARG_SADDRUNIX) { + if (ARG_IS_VALID(kar, ARG_SADDRUNIX)) { tok = au_to_sock_unix( (struct sockaddr_un *)&ar->ar_arg_sockaddr); kau_write(rec, tok); @@ -430,7 +436,7 @@ break; case AUE_ACCT: - if (ar->ar_valid_arg & (ARG_KPATH1 | ARG_UPATH1)) { + if (ARG_IS_VALID(kar, ARG_KPATH1 | ARG_UPATH1)) { KPATH1_VNODE1_OR_UPATH1_TOKENS; } else { tok = au_to_arg32(1, "accounting off", 0); @@ -444,7 +450,7 @@ break; case AUE_SETAUDIT: - if (ar->ar_valid_arg & ARG_AUID) { + if (ARG_IS_VALID(kar, ARG_AUID)) { tok = au_to_arg32(1, "setaudit:auid", ar->ar_arg_auid); kau_write(rec, tok); tok = au_to_arg32(1, "setaudit:port", @@ -489,7 +495,7 @@ case AUE_AUDITON_SETUMASK: case AUE_AUDITON_SPOLICY: case AUE_AUDITON_SQCTRL: - if (ar->ar_valid_arg & ARG_AUDITON) { + if (ARG_IS_VALID(kar, ARG_AUDITON)) { audit_sys_auditon(ar, rec); } break; @@ -636,10 +642,10 @@ kau_write(rec, tok); tok = au_to_arg32(1, "arg", (u_int32_t)ar->ar_arg_addr); kau_write(rec, tok); - if (ar->ar_valid_arg & ARG_VNODE1) { + if (ARG_IS_VALID(kar, ARG_VNODE1)) { FD_KPATH1_VNODE1_TOKENS; } else { - if (ar->ar_valid_arg & ARG_SOCKINFO) { + if (ARG_IS_VALID(kar, ARG_SOCKINFO)) { tok = kau_to_socket(&ar->ar_arg_sockinfo); kau_write(rec, tok); } else { @@ -716,7 +722,7 @@ /* XXX Need to handle NFS mounts */ tok = au_to_arg32(3, "flags", ar->ar_arg_fflags); kau_write(rec, tok); - if (ar->ar_valid_arg & ARG_TEXT) { + if (ARG_IS_VALID(kar, ARG_TEXT)) { tok = au_to_text(ar->ar_arg_text); kau_write(rec, tok); } @@ -858,7 +864,7 @@ kau_write(rec, tok); break; case AUE_SETGROUPS: - if (ar->ar_valid_arg & ARG_GROUPSET) { + if (ARG_IS_VALID(kar, ARG_GROUPSET)) { for(ctr = 0; ctr < ar->ar_arg_groups.gidset_size; ctr++) { tok = au_to_arg32(1, "setgroups", ar->ar_arg_groups.gidset[ctr]); @@ -868,7 +874,7 @@ break; case AUE_SETLOGIN: - if (ar->ar_valid_arg & ARG_TEXT) { + if (ARG_IS_VALID(kar, ARG_TEXT)) { tok = au_to_text(ar->ar_arg_text); kau_write(rec, tok); } @@ -894,7 +900,7 @@ kau_write(rec, tok); tok = au_to_arg32(2, "shmaddr", (int)ar->ar_arg_svipc_addr); kau_write(rec, tok); - if (ar->ar_valid_arg & ARG_SVIPC_PERM) { + if (ARG_IS_VALID(kar, ARG_SVIPC_PERM)) { tok = au_to_ipc(AT_IPC_SHM, ar->ar_arg_svipc_id); kau_write(rec, tok); tok = au_to_ipc_perm(&ar->ar_arg_svipc_perm); @@ -908,7 +914,7 @@ switch (ar->ar_arg_svipc_cmd) { case IPC_STAT: ar->ar_event = AUE_SHMCTL_STAT; - if (ar->ar_valid_arg & ARG_SVIPC_PERM) { + if (ARG_IS_VALID(kar, ARG_SVIPC_PERM)) { tok = au_to_ipc(AT_IPC_SHM, ar->ar_arg_svipc_id); kau_write(rec, tok); @@ -916,7 +922,7 @@ break; case IPC_RMID: ar->ar_event = AUE_SHMCTL_RMID; - if (ar->ar_valid_arg & ARG_SVIPC_PERM) { + if (ARG_IS_VALID(kar, ARG_SVIPC_PERM)) { tok = au_to_ipc(AT_IPC_SHM, ar->ar_arg_svipc_id); kau_write(rec, tok); @@ -924,7 +930,7 @@ break; case IPC_SET: ar->ar_event = AUE_SHMCTL_SET; - if (ar->ar_valid_arg & ARG_SVIPC_PERM) { + if (ARG_IS_VALID(kar, ARG_SVIPC_PERM)) { tok = au_to_ipc(AT_IPC_SHM, ar->ar_arg_svipc_id); kau_write(rec, tok); @@ -946,7 +952,7 @@ /* This is unusual; the return value is in an argument token */ tok = au_to_arg32(0, "shmid", ar->ar_arg_svipc_id); kau_write(rec, tok); - if (ar->ar_valid_arg & ARG_SVIPC_PERM) { + if (ARG_IS_VALID(kar, ARG_SVIPC_PERM)) { tok = au_to_ipc(AT_IPC_SHM, ar->ar_arg_svipc_id); kau_write(rec, tok); tok = au_to_ipc_perm(&ar->ar_arg_svipc_perm); @@ -962,11 +968,11 @@ tok = au_to_arg32(3, "mode", ar->ar_arg_mode); kau_write(rec, tok); case AUE_SHMUNLINK: - if (ar->ar_valid_arg & ARG_TEXT) { + if (ARG_IS_VALID(kar, ARG_TEXT)) { tok = au_to_text(ar->ar_arg_text); kau_write(rec, tok); } - if (ar->ar_valid_arg & ARG_POSIX_IPC_PERM) { + if (ARG_IS_VALID(kar, ARG_POSIX_IPC_PERM)) { /* Create an ipc_perm token */ struct ipc_perm perm; perm.uid = ar->ar_arg_pipc_perm.pipc_uid; @@ -990,11 +996,11 @@ kau_write(rec, tok); /* fall through */ case AUE_SEMUNLINK: - if (ar->ar_valid_arg & ARG_TEXT) { + if (ARG_IS_VALID(kar, ARG_TEXT)) { tok = au_to_text(ar->ar_arg_text); kau_write(rec, tok); } - if (ar->ar_valid_arg & ARG_POSIX_IPC_PERM) { + if (ARG_IS_VALID(kar, ARG_POSIX_IPC_PERM)) { /* Create an ipc_perm token */ struct ipc_perm perm; perm.uid = ar->ar_arg_pipc_perm.pipc_uid; @@ -1015,7 +1021,7 @@ break; case AUE_SYMLINK: - if (ar->ar_valid_arg & ARG_TEXT) { + if (ARG_IS_VALID(kar, ARG_TEXT)) { tok = au_to_text(ar->ar_arg_text); kau_write(rec, tok); } @@ -1023,17 +1029,17 @@ break; case AUE_SYSCTL: - if (ar->ar_valid_arg & (ARG_CTLNAME | ARG_LEN)) { + if (ARG_IS_VALID(kar, ARG_CTLNAME | ARG_LEN)) { for (ctr = 0; ctr < ar->ar_arg_len; ctr++) { tok = au_to_arg32(1, "name", ar->ar_arg_ctlname[ctr]); kau_write(rec, tok); } } - if (ar->ar_valid_arg & ARG_VALUE) { + if (ARG_IS_VALID(kar, ARG_VALUE)) { tok = au_to_arg32(5, "newval", ar->ar_arg_value); kau_write(rec, tok); } - if (ar->ar_valid_arg & ARG_TEXT) { + if (ARG_IS_VALID(kar, ARG_TEXT)) { tok = au_to_text(ar->ar_arg_text); kau_write(rec, tok); }
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200510181303.j9ID3HLx075725>