PERFORCE change 93588 for review

Robert Watson rwatson at FreeBSD.org
Sun Mar 19 19:21:04 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=93588

Change 93588 by rwatson at rwatson_peppercorn on 2006/03/19 19:20:12

	Assert audit mtx in audit_worker_drain().
	
	Break out logic to call audit_record_write() and handle error
	conditions into audit_worker_process_record().  This will be the
	future home of some logic now present in audit_record_write()
	also.

Affected files ...

.. //depot/projects/trustedbsd/audit3/sys/security/audit/audit_worker.c#6 edit

Differences ...

==== //depot/projects/trustedbsd/audit3/sys/security/audit/audit_worker.c#6 (text+ko) ====

@@ -376,6 +376,8 @@
 {
 	struct kaudit_record *ar;
 
+	mtx_assert(&audit_mtx, MA_OWNED);
+
 	while ((ar = TAILQ_FIRST(&audit_q))) {
 		TAILQ_REMOVE(&audit_q, ar, k_q);
 		audit_free(ar);
@@ -384,6 +386,31 @@
 }
 
 /*
+ * Given a kernel audit record, process as required.  Currently, that means
+ * passing it to audit_record_write(), but in the future it will mean
+ * converting it to BSM and then routing it to various possible output
+ * streams, including the audit trail and audit pipes.  The caller will free
+ * the record.
+ */
+static void
+audit_worker_process_record(struct vnode *audit_vp, struct ucred *audit_cred,
+    struct thread *audit_td, struct kaudit_record *ar)
+{
+	int error;
+
+	if (audit_vp == NULL)
+		return;
+
+	error = audit_record_write(audit_vp, ar, audit_cred, audit_td);
+	if (error) {
+		if (audit_panic_on_write_fail)
+			panic("audit_worker: write error %d\n", error);
+		else
+			printf("audit_worker: write error %d\n", error);
+	}
+}
+
+/*
  * The audit_worker thread is responsible for watching the event queue,
  * dequeueing records, converting them to BSM format, and committing them to
  * disk.  In order to minimize lock thrashing, records are dequeued in sets
@@ -399,7 +426,7 @@
 	struct ucred *audit_cred;
 	struct thread *audit_td;
 	struct vnode *audit_vp;
-	int error, lowater_signal;
+	int lowater_signal;
 
 	AUDIT_PRINTF(("audit_worker starting\n"));
 
@@ -465,16 +492,8 @@
 		mtx_unlock(&audit_mtx);
 		while ((ar = TAILQ_FIRST(&ar_worklist))) {
 			TAILQ_REMOVE(&ar_worklist, ar, k_q);
-			if (audit_vp != NULL) {
-				error = audit_record_write(audit_vp, ar,
-				    audit_cred, audit_td);
-				if (error && audit_panic_on_write_fail)
-					panic("audit_worker: write error %d\n",
-					    error);
-				else if (error)
-					printf("audit_worker: write error %d\n",
-					    error);
-			}
+			audit_worker_process_record(audit_vp, audit_cred,
+			    audit_td, ar);
 			audit_free(ar);
 		}
 		mtx_lock(&audit_mtx);


More information about the p4-projects mailing list