Re: [PATCH] aliases for the boundry format

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

 



-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Joshua Brindle wrote:
> Caleb Case wrote:
>> The boundry format mapped the primary field to a boolean in the
>> properties bitmap. This is appropriate for the kernel policy, but in
>> modular policy the primary field may be an integer that indicates the
>> primary type that is being aliased. In this case, the primary value
>> cannot
>> be assumed to be boolean.
>>
>> This patch creates a new module format that writes out the primary value
>> as was done before the boundry format.
>>
>> Signed-off-by: Caleb Case <ccase@xxxxxxxxxx>
> 
> I Guess noone else wants to look at this patch. I already acked it
> before it was sent to the list so if noone has objections I'll apply it
> later today.
> 
> We need to be sure this will make it into F11, is that possible?
>
yes

>>
>> ---
>>  
>>  checkpolicy/module_compiler.c              |    2 +-
>>  checkpolicy/policy_define.c                |   13 +++++++-
>>  libsepol/include/sepol/policydb/policydb.h |   19 +++++-----
>>  libsepol/src/policydb.c                    |   50
>> +++++++++++++++++++++------
>>  libsepol/src/write.c                       |    5 +++
>>  5 files changed, 67 insertions(+), 22 deletions(-)
>>
>> diff --git a/checkpolicy/module_compiler.c
>> b/checkpolicy/module_compiler.c
>> index 36d20be..d6ebd78 100644
>> --- a/checkpolicy/module_compiler.c
>> +++ b/checkpolicy/module_compiler.c
>> @@ -136,7 +136,7 @@ int declare_symbol(uint32_t symbol_type,
>>      }
>>      retval = symtab_insert(policydbp, symbol_type, key, datum,
>>                     SCOPE_DECL, decl->decl_id, dest_value);
>> -    if (retval == 1) {
>> +    if (retval == 1 && dest_value) {
>>          symtab_datum_t *s =
>>              (symtab_datum_t *) hashtab_search(policydbp->
>>                                symtab[symbol_type].table,
>> diff --git a/checkpolicy/policy_define.c b/checkpolicy/policy_define.c
>> index 25b06c1..17b84ce 100644
>> --- a/checkpolicy/policy_define.c
>> +++ b/checkpolicy/policy_define.c
>> @@ -1015,8 +1015,19 @@ static int add_aliases_to_type(type_datum_t *
>> type)
>>                  yyerror("could not declare alias here");
>>                  goto cleanup;
>>              }
>> -        case 0:
>> +        case 0:         break;
>>          case 1:{
>> +                /* ret == 1 means the alias was required and
>> therefore already
>> +                 * has a value. Set it up as an alias with a
>> different primary. */
>> +                type_datum_destroy(aliasdatum);
>> +                free(aliasdatum);
>> +
>> +                aliasdatum =
>> hashtab_search(policydbp->symtab[SYM_TYPES].table, id);
>> +                assert(aliasdatum);
>> +
>> +                aliasdatum->primary = type->s.value;
>> +                aliasdatum->flavor = TYPE_ALIAS;
>> +
>>                  break;
>>              }
>>          default:{
>> diff --git a/libsepol/include/sepol/policydb/policydb.h
>> b/libsepol/include/sepol/policydb/policydb.h
>> index eede389..0105cf4 100644
>> --- a/libsepol/include/sepol/policydb/policydb.h
>> +++ b/libsepol/include/sepol/policydb/policydb.h
>> @@ -614,17 +614,18 @@ extern int policydb_write(struct policydb *p,
>> struct policy_file *pf);
>>  #define POLICYDB_VERSION_MAX    POLICYDB_VERSION_BOUNDARY
>>  
>>  /* Module versions and specific changes*/
>> -#define MOD_POLICYDB_VERSION_BASE       4
>> -#define MOD_POLICYDB_VERSION_VALIDATETRANS 5
>> -#define MOD_POLICYDB_VERSION_MLS       5
>> -#define MOD_POLICYDB_VERSION_RANGETRANS       6
>> -#define MOD_POLICYDB_VERSION_MLS_USERS       6
>> -#define MOD_POLICYDB_VERSION_POLCAP       7
>> -#define MOD_POLICYDB_VERSION_PERMISSIVE       8
>> -#define MOD_POLICYDB_VERSION_BOUNDARY      9
>> +#define MOD_POLICYDB_VERSION_BASE        4
>> +#define MOD_POLICYDB_VERSION_VALIDATETRANS    5
>> +#define MOD_POLICYDB_VERSION_MLS        5
>> +#define MOD_POLICYDB_VERSION_RANGETRANS     6
>> +#define MOD_POLICYDB_VERSION_MLS_USERS        6
>> +#define MOD_POLICYDB_VERSION_POLCAP        7
>> +#define MOD_POLICYDB_VERSION_PERMISSIVE        8
>> +#define MOD_POLICYDB_VERSION_BOUNDARY        9
>> +#define MOD_POLICYDB_VERSION_BOUNDARY_ALIAS    10
>>  
>>  #define MOD_POLICYDB_VERSION_MIN MOD_POLICYDB_VERSION_BASE
>> -#define MOD_POLICYDB_VERSION_MAX MOD_POLICYDB_VERSION_BOUNDARY
>> +#define MOD_POLICYDB_VERSION_MAX MOD_POLICYDB_VERSION_BOUNDARY_ALIAS
>>  
>>  #define POLICYDB_CONFIG_MLS    1
>>  
>> diff --git a/libsepol/src/policydb.c b/libsepol/src/policydb.c
>> index d623343..85ddefc 100644
>> --- a/libsepol/src/policydb.c
>> +++ b/libsepol/src/policydb.c
>> @@ -153,6 +153,12 @@ static struct policydb_compat_info
>> policydb_compat[] = {
>>       .ocon_num = OCON_NODE6 + 1,
>>      },
>>      {
>> +     .type = POLICY_BASE,
>> +     .version = MOD_POLICYDB_VERSION_BOUNDARY_ALIAS,
>> +     .sym_num = SYM_NUM,
>> +     .ocon_num = OCON_NODE6 + 1,
>> +    },
>> +    {
>>       .type = POLICY_MOD,
>>       .version = MOD_POLICYDB_VERSION_BASE,
>>       .sym_num = SYM_NUM,
>> @@ -188,6 +194,12 @@ static struct policydb_compat_info
>> policydb_compat[] = {
>>       .sym_num = SYM_NUM,
>>       .ocon_num = 0
>>      },
>> +    {
>> +     .type = POLICY_MOD,
>> +     .version = MOD_POLICYDB_VERSION_BOUNDARY_ALIAS,
>> +     .sym_num = SYM_NUM,
>> +     .ocon_num = 0
>> +    },
>>  };
>>  
>>  #if 0
>> @@ -1942,13 +1954,19 @@ static int type_read(policydb_t * p
>>      uint32_t buf[5];
>>      size_t len;
>>      int rc, to_read;
>> +    int pos = 0;
>>  
>>      typdatum = calloc(1, sizeof(type_datum_t));
>>      if (!typdatum)
>>          return -1;
>>  
>> -    if (policydb_has_boundary_feature(p))
>> -        to_read = 4;
>> +    if (policydb_has_boundary_feature(p)) {
>> +        if (p->policy_type != POLICY_KERN
>> +            && p->policyvers >= MOD_POLICYDB_VERSION_BOUNDARY_ALIAS)
>> +            to_read = 5;
>> +        else
>> +            to_read = 4;
>> +    }
>>      else if (p->policy_type == POLICY_KERN)
>>          to_read = 3;
>>      else if (p->policyvers >= MOD_POLICYDB_VERSION_PERMISSIVE)
>> @@ -1960,13 +1978,23 @@ static int type_read(policydb_t * p
>>      if (rc < 0)
>>          goto bad;
>>  
>> -    len = le32_to_cpu(buf[0]);
>> -    typdatum->s.value = le32_to_cpu(buf[1]);
>> +    len = le32_to_cpu(buf[pos]);
>> +    typdatum->s.value = le32_to_cpu(buf[++pos]);
>>      if (policydb_has_boundary_feature(p)) {
>> -        uint32_t properties = le32_to_cpu(buf[2]);
>> +        uint32_t properties;
>> +
>> +        if (p->policy_type != POLICY_KERN
>> +            && p->policyvers >= MOD_POLICYDB_VERSION_BOUNDARY_ALIAS) {
>> +            typdatum->primary = le32_to_cpu(buf[++pos]);
>> +            properties = le32_to_cpu(buf[++pos]);
>> +        }
>> +        else {
>> +            properties = le32_to_cpu(buf[++pos]);
>> +
>> +            if (properties & TYPEDATUM_PROPERTY_PRIMARY)
>> +                typdatum->primary = 1;
>> +        }
>>  
>> -        if (properties & TYPEDATUM_PROPERTY_PRIMARY)
>> -            typdatum->primary = 1;
>>          if (properties & TYPEDATUM_PROPERTY_ATTRIBUTE)
>>              typdatum->flavor = TYPE_ATTRIB;
>>          if (properties & TYPEDATUM_PROPERTY_ALIAS
>> @@ -1976,13 +2004,13 @@ static int type_read(policydb_t * p
>>              && p->policy_type != POLICY_KERN)
>>              typdatum->flags |= TYPE_FLAGS_PERMISSIVE;
>>  
>> -        typdatum->bounds = le32_to_cpu(buf[3]);
>> +        typdatum->bounds = le32_to_cpu(buf[++pos]);
>>      } else {
>> -        typdatum->primary = le32_to_cpu(buf[2]);
>> +        typdatum->primary = le32_to_cpu(buf[++pos]);
>>          if (p->policy_type != POLICY_KERN) {
>> -            typdatum->flavor = le32_to_cpu(buf[3]);
>> +            typdatum->flavor = le32_to_cpu(buf[++pos]);
>>              if (p->policyvers >= MOD_POLICYDB_VERSION_PERMISSIVE)
>> -                typdatum->flags = le32_to_cpu(buf[4]);
>> +                typdatum->flags = le32_to_cpu(buf[++pos]);
>>          }
>>      }
>>  
>> diff --git a/libsepol/src/write.c b/libsepol/src/write.c
>> index bffadcf..66b35ec 100644
>> --- a/libsepol/src/write.c
>> +++ b/libsepol/src/write.c
>> @@ -970,6 +970,11 @@ static int type_write(hashtab_key_t key,
>> hashtab_datum_t datum, void *ptr)
>>      if (policydb_has_boundary_feature(p)) {
>>          uint32_t properties = 0;
>>  
>> +        if (p->policy_type != POLICY_KERN
>> +            && p->policyvers >= MOD_POLICYDB_VERSION_BOUNDARY_ALIAS) {
>> +            buf[items++] = cpu_to_le32(typdatum->primary);
>> +        }
>> +
>>          if (typdatum->primary)
>>              properties |= TYPEDATUM_PROPERTY_PRIMARY;
>>  
>>
>> -- 
>> This message was distributed to subscribers of the selinux mailing list.
>> If you no longer wish to subscribe, send mail to
>> majordomo@xxxxxxxxxxxxx with
>> the words "unsubscribe selinux" without quotes as the message.
>>
> 

-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.4.9 (GNU/Linux)
Comment: Using GnuPG with Fedora - http://enigmail.mozdev.org

iEYEARECAAYFAkmVuW8ACgkQrlYvE4MpobORDgCeL5T28gzWVYzpZcwcfyIghsTm
kwEAoNJdgcgOlQVZjzyF+CZ8UjD8uNp0
=o7Yo
-----END PGP SIGNATURE-----

--
This message was distributed to subscribers of the selinux mailing list.
If you no longer wish to subscribe, send mail to majordomo@xxxxxxxxxxxxx with
the words "unsubscribe selinux" without quotes as the message.

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

  Powered by Linux