MCPcopy Create free account
hub / github.com/F-Stack/f-stack / mls_valid

Function mls_valid

freebsd/security/mac_mls/mac_mls.c:322–392  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

320}
321
322static int
323mls_valid(struct mac_mls *mm)
324{
325
326 if (mm->mm_flags & MAC_MLS_FLAG_EFFECTIVE) {
327 switch (mm->mm_effective.mme_type) {
328 case MAC_MLS_TYPE_LEVEL:
329 break;
330
331 case MAC_MLS_TYPE_EQUAL:
332 case MAC_MLS_TYPE_HIGH:
333 case MAC_MLS_TYPE_LOW:
334 if (mm->mm_effective.mme_level != 0 ||
335 !MAC_MLS_BIT_SET_EMPTY(
336 mm->mm_effective.mme_compartments))
337 return (EINVAL);
338 break;
339
340 default:
341 return (EINVAL);
342 }
343 } else {
344 if (mm->mm_effective.mme_type != MAC_MLS_TYPE_UNDEF)
345 return (EINVAL);
346 }
347
348 if (mm->mm_flags & MAC_MLS_FLAG_RANGE) {
349 switch (mm->mm_rangelow.mme_type) {
350 case MAC_MLS_TYPE_LEVEL:
351 break;
352
353 case MAC_MLS_TYPE_EQUAL:
354 case MAC_MLS_TYPE_HIGH:
355 case MAC_MLS_TYPE_LOW:
356 if (mm->mm_rangelow.mme_level != 0 ||
357 !MAC_MLS_BIT_SET_EMPTY(
358 mm->mm_rangelow.mme_compartments))
359 return (EINVAL);
360 break;
361
362 default:
363 return (EINVAL);
364 }
365
366 switch (mm->mm_rangehigh.mme_type) {
367 case MAC_MLS_TYPE_LEVEL:
368 break;
369
370 case MAC_MLS_TYPE_EQUAL:
371 case MAC_MLS_TYPE_HIGH:
372 case MAC_MLS_TYPE_LOW:
373 if (mm->mm_rangehigh.mme_level != 0 ||
374 !MAC_MLS_BIT_SET_EMPTY(
375 mm->mm_rangehigh.mme_compartments))
376 return (EINVAL);
377 break;
378
379 default:

Callers 2

mls_parseFunction · 0.85

Calls 1

mls_dominate_elementFunction · 0.85

Tested by

no test coverage detected