mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 06:02:05 +00:00
integrity: Annotate struct ima_rule_opt_list with __counted_by
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@linux.ibm.com> Cc: Dmitry Kasatkin <dmitry.kasatkin@gmail.com> Cc: Paul Moore <paul@paul-moore.com> Cc: James Morris <jmorris@namei.org> Cc: "Serge E. Hallyn" <serge@hallyn.com> Cc: linux-integrity@vger.kernel.org Cc: linux-security-module@vger.kernel.org Acked-by: Mimi Zohar <zohar@linux.ibm.com> Reviewed-by: "Gustavo A. R. Silva" <gustavoars@kernel.org> Acked-by: Jarkko Sakkinen <jarkko@kernel.org> Link: https://lore.kernel.org/r/20230817210327.never.598-kees@kernel.org Signed-off-by: Kees Cook <keescook@chromium.org>
This commit is contained in:
parent
5d207e83ca
commit
a4b35d4d05
@ -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;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user