[PATCH] integrity: Annotate struct ima_rule_opt_list with __counted_by

Gustavo A. R. Silva gustavo at embeddedor.com
Thu Aug 17 21:20:49 UTC 2023



On 8/17/23 15:03, Kees Cook wrote:
> Prepare for the coming implementation by GCC and Clang of the __counted_by
> attribute. Flexible array members annotated with __counted_by can have
> their accesses bounds-checked at run-time checking via CONFIG_UBSAN_BOUNDS
> (for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family
> functions).
> 
> As found with Coccinelle[1], add __counted_by for struct ima_rule_opt_list.
> Additionally, since the element count member must be set before accessing
> the annotated flexible array member, move its initialization earlier.
> 
> [1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci
> 
> Cc: Mimi Zohar <zohar at linux.ibm.com>
> Cc: Dmitry Kasatkin <dmitry.kasatkin at gmail.com>
> Cc: Paul Moore <paul at paul-moore.com>
> Cc: James Morris <jmorris at namei.org>
> Cc: "Serge E. Hallyn" <serge at hallyn.com>
> Cc: linux-integrity at vger.kernel.org
> Cc: linux-security-module at vger.kernel.org
> Signed-off-by: Kees Cook <keescook at chromium.org>

Reviewed-by: Gustavo A. R. Silva <gustavoars at kernel.org>

Thanks
--
Gustavo

> ---
>   security/integrity/ima/ima_policy.c | 4 ++--
>   1 file changed, 2 insertions(+), 2 deletions(-)
> 
> diff --git a/security/integrity/ima/ima_policy.c b/security/integrity/ima/ima_policy.c
> index 69452b79686b..f69062617754 100644
> --- a/security/integrity/ima/ima_policy.c
> +++ b/security/integrity/ima/ima_policy.c
> @@ -68,7 +68,7 @@ enum policy_rule_list { IMA_DEFAULT_POLICY = 1, IMA_CUSTOM_POLICY };
>   
>   struct ima_rule_opt_list {
>   	size_t count;
> -	char *items[];
> +	char *items[] __counted_by(count);
>   };
>   
>   /*
> @@ -342,6 +342,7 @@ static struct ima_rule_opt_list *ima_alloc_rule_opt_list(const substring_t *src)
>   		kfree(src_copy);
>   		return ERR_PTR(-ENOMEM);
>   	}
> +	opt_list->count = count;
>   
>   	/*
>   	 * strsep() has already replaced all instances of '|' with '\0',
> @@ -357,7 +358,6 @@ static struct ima_rule_opt_list *ima_alloc_rule_opt_list(const substring_t *src)
>   		opt_list->items[i] = cur;
>   		cur = strchr(cur, '\0') + 1;
>   	}
> -	opt_list->count = count;
>   
>   	return opt_list;
>   }



More information about the Linux-security-module-archive mailing list