[apparmor] [PATCH 2/6] parser: parser clean up add_named_transition()

John Johansen john.johansen at canonical.com
Fri Mar 4 16:24:19 UTC 2016


On 03/04/2016 12:16 AM, Tyler Hicks wrote:
> The add_named_transition function was written in a way that is difficult
> to understand while attempting to read the function. This patch attempts
> to clean it up.
> 
> First, this patch removes this confusing code flow issue:
> 
>   if (!entry->ns) { ... }
>   if (entry->ns) { ... } else { ... }
> 
> It then unifies the way that the ns and nt_name strings of the cod_entry
> struct are handled prior to calling add_entry_to_x_table() and/or
> returning. ns and nt_name are now guaranteed to be NULL before
> performing either of those actions.
> 
> Signed-off-by: Tyler Hicks <tyhicks at canonical.com>

Acked-by: John Johansen <john.johansen at canonical.com>

> ---
>  parser/parser_policy.c | 16 +++++++++-------
>  1 file changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/parser/parser_policy.c b/parser/parser_policy.c
> index 5e4add6..292abff 100644
> --- a/parser/parser_policy.c
> +++ b/parser/parser_policy.c
> @@ -118,10 +118,16 @@ static int add_named_transition(Profile *prof, struct cod_entry *entry)
>  			}
>  			sprintf(name, "%s//%s", prof->name, entry->nt_name);
>  			free(entry->nt_name);
> -			entry->nt_name = name;
> +			entry->nt_name = NULL;
> +		} else {
> +			/**
> +			 * pass control of the memory pointed to by nt_name
> +			 * from entry to add_entry_to_x_table()
> +			 */
> +			name = entry->nt_name;
> +			entry->nt_name = NULL;
>  		}
> -	}
> -	if (entry->ns) {
> +	} else {
>  	  name = (char *) malloc(strlen(entry->ns) + strlen(entry->nt_name) + 3);
>  		if (!name) {
>  			PERROR("Memory allocation error\n");
> @@ -132,8 +138,6 @@ static int add_named_transition(Profile *prof, struct cod_entry *entry)
>  		free(entry->nt_name);
>  		entry->ns = NULL;
>  		entry->nt_name = NULL;
> -	} else {
> -		name = entry->nt_name;
>  	}
>  
>  	return add_entry_to_x_table(prof, name);
> @@ -164,8 +168,6 @@ void post_process_file_entries(Profile *prof)
>  				mode |= SHIFT_MODE(n << 10, AA_OTHER_SHIFT);
>  			entry->mode = ((entry->mode & ~AA_ALL_EXEC_MODIFIERS) |
>  				       (mode & AA_ALL_EXEC_MODIFIERS));
> -			entry->ns = NULL;
> -			entry->nt_name = NULL;
>  		}
>  		/* FIXME: currently change_profile also implies onexec */
>  		cp_mode |= entry->mode & (AA_CHANGE_PROFILE);
> 




More information about the AppArmor mailing list