[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <CUV5FU612TVH.3U5BOWZR013CD@suppilovahvero>
Date: Fri, 18 Aug 2023 00:48:24 +0300
From: "Jarkko Sakkinen" <jarkko@...nel.org>
To: "Kees Cook" <keescook@...omium.org>,
"Mimi Zohar" <zohar@...ux.ibm.com>
Cc: "Dmitry Kasatkin" <dmitry.kasatkin@...il.com>,
"Paul Moore" <paul@...l-moore.com>,
"James Morris" <jmorris@...ei.org>,
"Serge E. Hallyn" <serge@...lyn.com>,
<linux-integrity@...r.kernel.org>,
<linux-security-module@...r.kernel.org>,
"Nathan Chancellor" <nathan@...nel.org>,
"Nick Desaulniers" <ndesaulniers@...gle.com>,
"Tom Rix" <trix@...hat.com>, <linux-kernel@...r.kernel.org>,
<llvm@...ts.linux.dev>, <linux-hardening@...r.kernel.org>
Subject: Re: [PATCH] integrity: Annotate struct ima_rule_opt_list with
__counted_by
On Fri Aug 18, 2023 at 12:03 AM EEST, 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@...ux.ibm.com>
> Cc: Dmitry Kasatkin <dmitry.kasatkin@...il.com>
> Cc: Paul Moore <paul@...l-moore.com>
> Cc: James Morris <jmorris@...ei.org>
> Cc: "Serge E. Hallyn" <serge@...lyn.com>
> Cc: linux-integrity@...r.kernel.org
> Cc: linux-security-module@...r.kernel.org
> Signed-off-by: Kees Cook <keescook@...omium.org>
> ---
> 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;
> }
> --
> 2.34.1
Acked-by: Jarkko Sakkinen <jarkko@...nel.org>
BR, Jarkko
Powered by blists - more mailing lists