mirror of
https://github.com/torvalds/linux.git
synced 2026-03-08 01:24:47 +01:00
compiler_types.h: Attributes: Add __counted_by_ptr macro
Introduce __counted_by_ptr(), which works like __counted_by(), but for
pointer struct members.
struct foo {
int a, b, c;
char *buffer __counted_by_ptr(bytes);
short nr_bars;
struct bar *bars __counted_by_ptr(nr_bars);
size_t bytes;
};
Because "counted_by" can only be applied to pointer members in very
recent compiler versions, its application ends up needing to be distinct
from flexibe array "counted_by" annotations, hence a separate macro.
This is a reworking of Kees' previous patch [1].
Link: https://lore.kernel.org/all/20251020220118.1226740-1-kees@kernel.org/ [1]
Co-developed-by: Kees Cook <kees@kernel.org>
Signed-off-by: Bill Wendling <morbo@google.com>
Link: https://patch.msgid.link/20260116005838.2419118-1-morbo@google.com
Signed-off-by: Kees Cook <kees@kernel.org>
This commit is contained in:
parent
9f54ab83cb
commit
150a04d817
4 changed files with 34 additions and 1 deletions
|
|
@ -143,6 +143,13 @@ config CC_HAS_COUNTED_BY
|
|||
# https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108896
|
||||
default y if CC_IS_GCC && GCC_VERSION >= 150100
|
||||
|
||||
config CC_HAS_COUNTED_BY_PTR
|
||||
bool
|
||||
# supported since clang 22
|
||||
default y if CC_IS_CLANG && CLANG_VERSION >= 220000
|
||||
# supported since gcc 16.0.0
|
||||
default y if CC_IS_GCC && GCC_VERSION >= 160000
|
||||
|
||||
config CC_HAS_MULTIDIMENSIONAL_NONSTRING
|
||||
def_bool $(success,echo 'char tag[][4] __attribute__((__nonstring__)) = { };' | $(CC) $(CLANG_FLAGS) -x c - -c -o /dev/null -Werror)
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue