Re: [PATCH 0/3 v2] Create secil2tree to write CIL AST

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Tue, Apr 20, 2021 at 7:08 PM James Carter <jwcart2@xxxxxxxxx> wrote:
>
> As an example of how it can be used, I have been using secil2tree
> recently to make secilc fuzzing test cases readable.
>
> Running:
> secil2tree -A build -o fuzz_613136.cil
> clusterfuzz-testcase-minimized-secilc-fuzzer-6131368317812736
>
> The attached files shows the original and the output of secil2tree.
>
> Jim
>
> On Mon, Apr 19, 2021 at 11:27 AM James Carter <jwcart2@xxxxxxxxx> wrote:
> >
> > For debugging purposes it would be useful to be able to write out
> > the CIL AST at various points in the build process.
> >
> > This patch set creates secil2tree which can write the CIL parse tree,
> > the CIL AST after the build phase, or the CIL AST after the resolve
> > phase (with names fully-qualified).
> >
> > Within CIL the function cil_print_tree() has existed from early in
> > CIL's development, but it was not exported in libsepol and there was no
> > way to use it except by adding a call to it where you wanted to print
> > out the CIL AST and then recompiling everything. It also used cil_log()
> > as its output, so other messages could be mixed in with the output. This
> > patch set moves all of this code to its own file, updates it, renames it
> > as cil_write_ast(), and adds libsepol functions that can be used to call
> > it after each one of the phases mentioned above.
> >
> > Both the parse and build CIL AST are valid CIL policies that can be
> > compiled with secilc, but the resolve CIL AST is not always a valid CIL
> > policy. The biggest problem is that fully-qualified names can contain
> > dots and CIL does not allow dots in declaration names. There are other
> > problems as well. It would be nice to get to the point where the output
> > for all of the trees are valid CIL, but that is a goal for the future.
> >
> > v2:
> > - Remove whitespace errors in cil_write_ast.h
> > - Use "const char*" instead of just "char*" when dealing with string
> > literals to satisfy clang.
> >
> > James Carter (3):
> >   libsepol/cil: Create functions to write the CIL AST
> >   libsepol/cil: Add functions to make use of cil_write_ast()
> >   secilc: Create the new program called secil2tree to write out CIL AST
> >
> >  libsepol/cil/include/cil/cil.h   |    3 +
> >  libsepol/cil/src/cil.c           |   92 ++
> >  libsepol/cil/src/cil_tree.c      | 1471 ----------------------------
> >  libsepol/cil/src/cil_tree.h      |    2 -
> >  libsepol/cil/src/cil_write_ast.c | 1573 ++++++++++++++++++++++++++++++
> >  libsepol/cil/src/cil_write_ast.h |   46 +
> >  libsepol/src/libsepol.map.in     |    3 +
> >  secilc/.gitignore                |    2 +
> >  secilc/Makefile                  |   20 +-
> >  secilc/secil2tree.8.xml          |   81 ++
> >  secilc/secil2tree.c              |  206 ++++
> >  11 files changed, 2024 insertions(+), 1475 deletions(-)
> >  create mode 100644 libsepol/cil/src/cil_write_ast.c
> >  create mode 100644 libsepol/cil/src/cil_write_ast.h
> >  create mode 100644 secilc/secil2tree.8.xml
> >  create mode 100644 secilc/secil2tree.c
> >
> > --
> > 2.26.3
> >

Hello,
Thanks for this tool! It looks great and it seems to work quite well.

Anyway, while building with some warning flags, gcc reported issues
about using non-const pointers to hold literal strings. For example:

../cil/src/cil_write_ast.c: In function ‘datum_to_str’:
../cil/src/cil_write_ast.c:51:28: error: return discards ‘const’
qualifier from pointer target type [-Werror=discarded-qualifiers]
   51 |  return datum ? datum->fqn : "<?DATUM>";
      |         ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~
../cil/src/cil_write_ast.c: In function ‘write_expr’:
../cil/src/cil_write_ast.c:122:12: error: assignment discards ‘const’
qualifier from pointer target type [-Werror=discarded-qualifiers]
  122 |     op_str = "<?OP>";
      |            ^

With the attached patch, the code compiles fine. Feel free to directly
modify the first patch with these fixes.

Thanks,
Nicolas
From 509affa0373b784a726f51ef1f1846f1efa2327e Mon Sep 17 00:00:00 2001
From: Nicolas Iooss <nicolas.iooss@xxxxxxx>
Date: Tue, 20 Apr 2021 16:33:01 +0200
Subject: [PATCH] Fix -Wdiscarded-qualifiers issues
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

Buils with 'gcc -Wdiscarded-qualifiers' leads to errors such as:

    ../cil/src/cil_write_ast.c: In function ‘datum_to_str’:
    ../cil/src/cil_write_ast.c:51:28: error: return discards ‘const’
    qualifier from pointer target type [-Werror=discarded-qualifiers]
       51 |  return datum ? datum->fqn : "<?DATUM>";
          |         ~~~~~~~~~~~~~~~~~~~^~~~~~~~~~~~

    ../cil/src/cil_write_ast.c: In function ‘write_expr’:
    ../cil/src/cil_write_ast.c:122:12: error: assignment discards
    ‘const’ qualifier from pointer target type
    [-Werror=discarded-qualifiers]
      122 |     op_str = "<?OP>";
          |            ^

Signed-off-by: Nicolas Iooss <nicolas.iooss@xxxxxxx>
---
 libsepol/cil/src/cil_write_ast.c | 12 ++++++------
 1 file changed, 6 insertions(+), 6 deletions(-)

diff --git a/libsepol/cil/src/cil_write_ast.c b/libsepol/cil/src/cil_write_ast.c
index 6cb567a69d5b..62faefe31dee 100644
--- a/libsepol/cil/src/cil_write_ast.c
+++ b/libsepol/cil/src/cil_write_ast.c
@@ -41,12 +41,12 @@
 #include "cil_write_ast.h"
 
 
-static inline char *datum_or_str(struct cil_symtab_datum *datum, char *str)
+static inline const char *datum_or_str(struct cil_symtab_datum *datum, const char *str)
 {
 	return datum ? datum->fqn : str;
 }
 
-static inline char *datum_to_str(struct cil_symtab_datum *datum)
+static inline const char *datum_to_str(struct cil_symtab_datum *datum)
 {
 	return datum ? datum->fqn : "<?DATUM>";
 }
@@ -82,7 +82,7 @@ static void write_expr(FILE *out, struct cil_list *expr)
 			fprintf(out, "%s", datum_to_str(curr->data));
 			break;
 		case CIL_OP: {
-			char *op_str = NULL;
+			const char *op_str = NULL;
 			enum cil_flavor op_flavor = (enum cil_flavor)curr->data;
 			switch (op_flavor) {
 			case CIL_AND:
@@ -126,7 +126,7 @@ static void write_expr(FILE *out, struct cil_list *expr)
 			break;
 		}
 		case CIL_CONS_OPERAND: {
-			char *operand_str = NULL;
+			const char *operand_str = NULL;
 			enum cil_flavor operand_flavor = (enum cil_flavor)curr->data;
 			switch (operand_flavor) {
 			case CIL_CONS_U1:
@@ -490,9 +490,9 @@ static void write_call_args_tree(FILE *out, struct cil_tree_node *arg_node)
 	}
 }
 
-static char *__macro_param_flavor_to_string(enum cil_flavor flavor)
+static const char *__macro_param_flavor_to_string(enum cil_flavor flavor)
 {
-	char *str = NULL;
+	const char *str = NULL;
 	switch(flavor) {
 	case CIL_TYPE:
 		str = CIL_KEY_TYPE;
-- 
2.31.0


[Index of Archives]     [Selinux Refpolicy]     [Linux SGX]     [Fedora Users]     [Fedora Desktop]     [Yosemite Photos]     [Yosemite Camping]     [Yosemite Campsites]     [KDE Users]     [Gnome Users]

  Powered by Linux