With the coming support for the __counted_by struct member attribute, we will need a way to add such annotations to the places where DECLARE_FLEX_ARRAY() is used. Add an optional 3rd argument that can be used for including attributes in the flexible array definition.
Cc: Rasmus Villemoes <[email protected]> Cc: Dan Williams <[email protected]> Cc: Keith Packard <[email protected]> Cc: Miguel Ojeda <[email protected]> Cc: Alexey Dobriyan <[email protected]> Cc: Dmitry Antipov <[email protected]> Reviewed-by: Gustavo A. R. Silva <[email protected]> Signed-off-by: Kees Cook <[email protected]> --- include/linux/stddef.h | 6 +++--- include/uapi/linux/stddef.h | 10 +++++----- 2 files changed, 8 insertions(+), 8 deletions(-) diff --git a/include/linux/stddef.h b/include/linux/stddef.h index 929d67710cc5..176bfe8c0bd7 100644 --- a/include/linux/stddef.h +++ b/include/linux/stddef.h @@ -82,15 +82,15 @@ enum { /** * DECLARE_FLEX_ARRAY() - Declare a flexible array usable in a union - * * @TYPE: The type of each flexible array element * @NAME: The name of the flexible array member + * @...: The list of member attributes to apply (optional) * * In order to have a flexible array member in a union or alone in a * struct, it needs to be wrapped in an anonymous struct with at least 1 * named member, but that member can be empty. */ -#define DECLARE_FLEX_ARRAY(TYPE, NAME) \ - __DECLARE_FLEX_ARRAY(TYPE, NAME) +#define DECLARE_FLEX_ARRAY(TYPE, NAME, ...) \ + __DECLARE_FLEX_ARRAY(TYPE, NAME, __VA_ARGS__) #endif diff --git a/include/uapi/linux/stddef.h b/include/uapi/linux/stddef.h index 2ec6f35cda32..028aeec3d7f1 100644 --- a/include/uapi/linux/stddef.h +++ b/include/uapi/linux/stddef.h @@ -31,23 +31,23 @@ #ifdef __cplusplus /* sizeof(struct{}) is 1 in C++, not 0, can't use C version of the macro. */ -#define __DECLARE_FLEX_ARRAY(T, member) \ - T member[0] +#define __DECLARE_FLEX_ARRAY(TYPE, NAME, ...) \ + TYPE NAME[0] __VA_ARGS__ #else /** * __DECLARE_FLEX_ARRAY() - Declare a flexible array usable in a union - * * @TYPE: The type of each flexible array element * @NAME: The name of the flexible array member + * @...: The list of member attributes to apply (optional) * * In order to have a flexible array member in a union or alone in a * struct, it needs to be wrapped in an anonymous struct with at least 1 * named member, but that member can be empty. */ -#define __DECLARE_FLEX_ARRAY(TYPE, NAME) \ +#define __DECLARE_FLEX_ARRAY(TYPE, NAME, ...) \ struct { \ struct { } __empty_ ## NAME; \ - TYPE NAME[]; \ + TYPE NAME[] __VA_ARGS__; \ } #endif -- 2.34.1
