xen/xsm: Generate the permission in a spec-compliant way
authorJulien Grall <julien.grall@linaro.org>
Fri, 20 Feb 2015 15:58:28 +0000 (15:58 +0000)
committerIan Campbell <ian.campbell@citrix.com>
Tue, 24 Feb 2015 15:54:08 +0000 (15:54 +0000)
Each class can contains 32 permisions which are encoded on a word (one
bit per permission).

Currently the awk script will generate an hexadecimal value for each
permission. This may result to generate an invalid value on some version
of awk.

For instance debian jessie is using a version of mawk where (1 << 31)
will result to 0x7fffffff.

This is because the awk specification requires to do the arithmetic with
float. So the resulting integer may vary following the implementation.

As the generated headers are only used by C code, generate the
permission define via "1UL << n".

Signed-off-by: Julien Grall <julien.grall@linaro.org>
Acked-by: Daniel De Graaf <dgdegra@tycho.nsa.gov>
xen/xsm/flask/policy/mkaccess_vector.sh

index 8ec87f7b8c4a7dcd6e2f120390845eaba98e39e4..7fa4aaf638a7ece934d078956bd45abb5f365a23 100644 (file)
@@ -42,7 +42,7 @@ $1 == "class" {
                        } 
                        av_defined[tclass] = 1;
 
-                       permission = 1;
+                       permission = 0;
 
                        nextstate = "INHERITS_OR_CLASS-OPENBRACKET";
                        next;
@@ -108,8 +108,8 @@ $1 == "{"   {
 
                        for (i = 0; i < spaces; i++) 
                                printf(" ") > outfile; 
-                       printf("0x%08xUL\n", permission) > outfile; 
-                       permission = permission * 2;
+                       printf("(1UL << %u)\n", permission) > outfile;
+                       permission = permission + 1;
                }
 $1 == "}"      {
                        if (nextstate != "CLASS-CLOSEBRACKET" &&