|
|
71cd55 |
From e978e7692e16d6d8b801700d1dc5129ca31dfbad Mon Sep 17 00:00:00 2001
|
|
|
71cd55 |
From: James Carter <jwcart2@gmail.com>
|
|
|
71cd55 |
Date: Thu, 8 Apr 2021 13:32:11 -0400
|
|
|
71cd55 |
Subject: [PATCH] libsepol/cil: More strict verification of constraint leaf
|
|
|
71cd55 |
expressions
|
|
|
71cd55 |
|
|
|
71cd55 |
In constraint expressions u1, u3, r1, r3, t1, and t3 are never
|
|
|
71cd55 |
allowed on the right side of an expression, but there were no checks
|
|
|
71cd55 |
to verify that they were not used on the right side. The result was
|
|
|
71cd55 |
that the expression "(eq t1 t1)" would be silently turned into
|
|
|
71cd55 |
"(eq t1 t2)" when the binary policy was created.
|
|
|
71cd55 |
|
|
|
71cd55 |
Verify that u1, u3, r1, r3, t1, and t3 are not used on the right
|
|
|
71cd55 |
side of a constraint expression.
|
|
|
71cd55 |
|
|
|
71cd55 |
Signed-off-by: James Carter <jwcart2@gmail.com>
|
|
|
71cd55 |
---
|
|
|
71cd55 |
libsepol/cil/src/cil_verify.c | 8 +++++++-
|
|
|
71cd55 |
1 file changed, 7 insertions(+), 1 deletion(-)
|
|
|
71cd55 |
|
|
|
71cd55 |
diff --git a/libsepol/cil/src/cil_verify.c b/libsepol/cil/src/cil_verify.c
|
|
|
71cd55 |
index 09e3daf94cc7..2707b6c97d15 100644
|
|
|
71cd55 |
--- a/libsepol/cil/src/cil_verify.c
|
|
|
71cd55 |
+++ b/libsepol/cil/src/cil_verify.c
|
|
|
71cd55 |
@@ -227,7 +227,13 @@ int cil_verify_constraint_leaf_expr_syntax(enum cil_flavor l_flavor, enum cil_fl
|
|
|
71cd55 |
}
|
|
|
71cd55 |
}
|
|
|
71cd55 |
} else {
|
|
|
71cd55 |
- if (r_flavor == CIL_CONS_U2) {
|
|
|
71cd55 |
+ if (r_flavor == CIL_CONS_U1 || r_flavor == CIL_CONS_R1 || r_flavor == CIL_CONS_T1) {
|
|
|
71cd55 |
+ cil_log(CIL_ERR, "u1, r1, and t1 are not allowed on the right side\n");
|
|
|
71cd55 |
+ goto exit;
|
|
|
71cd55 |
+ } else if (r_flavor == CIL_CONS_U3 || r_flavor == CIL_CONS_R3 || r_flavor == CIL_CONS_T3) {
|
|
|
71cd55 |
+ cil_log(CIL_ERR, "u3, r3, and t3 are not allowed on the right side\n");
|
|
|
71cd55 |
+ goto exit;
|
|
|
71cd55 |
+ } else if (r_flavor == CIL_CONS_U2) {
|
|
|
71cd55 |
if (op != CIL_EQ && op != CIL_NEQ) {
|
|
|
71cd55 |
cil_log(CIL_ERR, "u2 on the right side must be used with eq or neq as the operator\n");
|
|
|
71cd55 |
goto exit;
|
|
|
71cd55 |
--
|
|
|
71cd55 |
2.32.0
|
|
|
71cd55 |
|