PERFORCE change 20089 for review

Brian Feldman green at freebsd.org
Thu Oct 24 22:43:00 GMT 2002


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

Change 20089 by green at green_laptop_2 on 2002/10/24 15:42:47

	* For mac_lomac, assume "equal" labels for ttyv*.
	* When demoting, don't blindly set all parts of the label to
	  the single target.  Demote "rangehigh" and "single" the
	  object label's single, and "rangelow" to the single if it
	  would in fact be demoting it to do so (i.e. don't raise it).
	
	I can successfully use the range behavior to temporarily lower
	my integrity level to be able to observe objects that would
	otherwise demote me, and then raise it again.  Also, I can
	successfully modify my label in all the normal Biba-like ways
	and then be demoted each time I observe a non-dominant object,
	like a many-level ratchet instead of a... two-level ratchet :-)

Affected files ...

.. //depot/projects/trustedbsd/mac/sys/security/mac_lomac/mac_lomac.c#18 edit

Differences ...

==== //depot/projects/trustedbsd/mac/sys/security/mac_lomac/mac_lomac.c#18 (text+ko) ====

@@ -443,10 +443,20 @@
 			goto out;
 	}
 	bzero(&subj->mac_lomac, sizeof(subj->mac_lomac));
+	/*
+	 * Always demote the single label.
+	 */
 	mac_lomac_copy_single(objlabel, &subj->mac_lomac);
-	mac_lomac_set_range(&subj->mac_lomac,
-	    objlabel->ml_single.mle_type, objlabel->ml_single.mle_grade,
-	    objlabel->ml_single.mle_type, objlabel->ml_single.mle_grade);
+	/*
+	 * Start with the original range, then minimize each side of
+	 * the range to the point of not dominating the object.  The
+	 * high side will always be demoted, of course.
+	 */
+	mac_lomac_copy_range(subjlabel, &subj->mac_lomac);
+	if (!mac_lomac_dominate_element(&objlabel->ml_single,
+	    &subj->mac_lomac.ml_rangelow))
+		subj->mac_lomac.ml_rangelow = objlabel->ml_single;
+	subj->mac_lomac.ml_rangehigh = objlabel->ml_single;
 	subj->mac_lomac.ml_flags |= MAC_LOMAC_FLAG_UPDATE;
 	mtx_lock_spin(&sched_lock);
 	curthread->td_kse->ke_flags |= KEF_ASTPENDING;
@@ -773,7 +783,8 @@
 	if (strcmp(dev->si_name, "null") == 0 ||
 	    strcmp(dev->si_name, "zero") == 0 ||
 	    strcmp(dev->si_name, "random") == 0 ||
-	    strncmp(dev->si_name, "fd/", strlen("fd/")) == 0)
+	    strncmp(dev->si_name, "fd/", strlen("fd/")) == 0 ||
+	    strncmp(dev->si_name, "ttyv", strlen("ttyv")) == 0)
 		lomac_type = MAC_LOMAC_TYPE_EQUAL;
 	else if (ptys_equal &&
 	    (strncmp(dev->si_name, "ttyp", strlen("ttyp")) == 0 ||
To Unsubscribe: send mail to majordomo at trustedbsd.org
with "unsubscribe trustedbsd-cvs" in the body of the message



More information about the trustedbsd-cvs mailing list