-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 This patch looks good to me. acked. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.11 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org/ iEYEARECAAYFAk5yV8kACgkQrlYvE4MpobMNywCgzNTFktfzYNhr27DFJcSxIpwc NxkAoMA0eHpYWP7l4F/I4EPJAXdXyyq8 =x30k -----END PGP SIGNATURE-----
>From e5098ecf9de73cffab73daf1f43ac7e0de9a340b Mon Sep 17 00:00:00 2001 From: Harry Ciao <qingtao.cao@xxxxxxxxxxxxx> Date: Thu, 1 Sep 2011 11:29:45 +0800 Subject: [PATCH 49/67] libsepol: Skip tunable identifier and cond_node_t in expansion. The effective branch of a tunable has been appended to its home decl->avrules list during link, in expansion we should just skip tunables from expanding their rules into te_cond_avtab hashtab and adding to the out->cond_list queue. Signed-off-by: Harry Ciao <qingtao.cao@xxxxxxxxxxxxx> Signed-off-by: Eric Paris <eparis@xxxxxxxxxx> --- libsepol/src/expand.c | 13 +++++++++++++ 1 files changed, 13 insertions(+), 0 deletions(-) diff --git a/libsepol/src/expand.c b/libsepol/src/expand.c index be41243..33dc60b 100644 --- a/libsepol/src/expand.c +++ b/libsepol/src/expand.c @@ -1014,6 +1014,11 @@ static int bool_copy_callback(hashtab_key_t key, hashtab_datum_t datum, return 0; } + if (bool->flags & COND_BOOL_FLAGS_TUNABLE) { + /* Skip tunables */ + return 0; + } + if (state->verbose) INFO(state->handle, "copying boolean %s", id); @@ -1046,6 +1051,7 @@ static int bool_copy_callback(hashtab_key_t key, hashtab_datum_t datum, state->boolmap[bool->s.value - 1] = new_bool->s.value; new_bool->state = bool->state; + new_bool->flags = bool->flags; return 0; } @@ -1940,6 +1946,13 @@ static int cond_node_copy(expand_state_t * state, cond_node_t * cn) if (cond_node_copy(state, cn->next)) { return -1; } + + /* If current cond_node_t is of tunable, its effective branch + * has been appended to its home decl->avrules list during link + * and now we should just skip it. */ + if (cn->flags & COND_NODE_FLAGS_TUNABLE) + return 0; + if (cond_normalize_expr(state->base, cn)) { ERR(state->handle, "Error while normalizing conditional"); return -1; -- 1.7.6.2