diff options
-rw-r--r-- | include/linux/overflow.h | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/include/linux/overflow.h b/include/linux/overflow.h index 0e33b5cbdb9f..9d3fffc39bec 100644 --- a/include/linux/overflow.h +++ b/include/linux/overflow.h @@ -289,8 +289,11 @@ static inline size_t __must_check size_sub(size_t minuend, size_t subtrahend) * Return: number of bytes needed or SIZE_MAX on overflow. */ #define struct_size(p, member, count) \ - __builtin_choose_expr(__is_constexpr(count), \ - sizeof(*(p)) + flex_array_size(p, member, count), \ - size_add(sizeof(*(p)), flex_array_size(p, member, count))) + max(sizeof(*(p)), \ + __builtin_choose_expr(__is_constexpr(count), \ + offsetof(typeof(*(p)), member) + \ + flex_array_size(p, member, count), \ + size_add(offsetof(typeof(*(p)), member), \ + flex_array_size(p, member, count)))) #endif /* __LINUX_OVERFLOW_H */ |