Commit 98b76994 authored by Linus Torvalds's avatar Linus Torvalds

Merge tag 'overflow-v5.8-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux

Pull flex-array size helper from Kees Cook:
 "During the treewide clean-ups of zero-length "flexible arrays", the
  struct_size() helper was heavily used, but it was noticed that many
  times it would have been nice to have an additional helper to get the
  size of just the flexible array itself.

  This need appears to be even more common when cleaning up the 1-byte
  array "flexible arrays", so Gustavo implemented it.

  I'd love to get this landed early so it can be used during the v5.9
  dev cycle to ease the 1-byte array cleanups."

* tag 'overflow-v5.8-rc2' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux:
  overflow.h: Add flex_array_size() helper
parents 98d7e741 b19d57d0
...@@ -304,16 +304,33 @@ static inline __must_check size_t __ab_c_size(size_t a, size_t b, size_t c) ...@@ -304,16 +304,33 @@ static inline __must_check size_t __ab_c_size(size_t a, size_t b, size_t c)
* struct_size() - Calculate size of structure with trailing array. * struct_size() - Calculate size of structure with trailing array.
* @p: Pointer to the structure. * @p: Pointer to the structure.
* @member: Name of the array member. * @member: Name of the array member.
* @n: Number of elements in the array. * @count: Number of elements in the array.
* *
* Calculates size of memory needed for structure @p followed by an * Calculates size of memory needed for structure @p followed by an
* array of @n @member elements. * array of @count number of @member elements.
* *
* Return: number of bytes needed or SIZE_MAX on overflow. * Return: number of bytes needed or SIZE_MAX on overflow.
*/ */
#define struct_size(p, member, n) \ #define struct_size(p, member, count) \
__ab_c_size(n, \ __ab_c_size(count, \
sizeof(*(p)->member) + __must_be_array((p)->member),\ sizeof(*(p)->member) + __must_be_array((p)->member),\
sizeof(*(p))) sizeof(*(p)))
/**
* flex_array_size() - Calculate size of a flexible array member
* within an enclosing structure.
*
* @p: Pointer to the structure.
* @member: Name of the flexible array member.
* @count: Number of elements in the array.
*
* Calculates size of a flexible array of @count number of @member
* elements, at the end of structure @p.
*
* Return: number of bytes needed or SIZE_MAX on overflow.
*/
#define flex_array_size(p, member, count) \
array_size(count, \
sizeof(*(p)->member) + __must_be_array((p)->member))
#endif /* __LINUX_OVERFLOW_H */ #endif /* __LINUX_OVERFLOW_H */
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment