diff options
Diffstat (limited to 'include/linux/string.h')
-rw-r--r-- | include/linux/string.h | 28 |
1 files changed, 20 insertions, 8 deletions
diff --git a/include/linux/string.h b/include/linux/string.h index 86d5d352068b..0403a4ca4c11 100644 --- a/include/linux/string.h +++ b/include/linux/string.h @@ -414,8 +414,11 @@ void memcpy_and_pad(void *dest, size_t dest_len, const void *src, size_t count, * must be discoverable by the compiler. */ #define strtomem_pad(dest, src, pad) do { \ - const size_t _dest_len = __builtin_object_size(dest, 1); \ - const size_t _src_len = __builtin_object_size(src, 1); \ + const size_t _dest_len = __must_be_byte_array(dest) + \ + __must_be_noncstr(dest) + \ + ARRAY_SIZE(dest); \ + const size_t _src_len = __must_be_cstr(src) + \ + __builtin_object_size(src, 1); \ \ BUILD_BUG_ON(!__builtin_constant_p(_dest_len) || \ _dest_len == (size_t)-1); \ @@ -437,8 +440,11 @@ void memcpy_and_pad(void *dest, size_t dest_len, const void *src, size_t count, * must be discoverable by the compiler. */ #define strtomem(dest, src) do { \ - const size_t _dest_len = __builtin_object_size(dest, 1); \ - const size_t _src_len = __builtin_object_size(src, 1); \ + const size_t _dest_len = __must_be_byte_array(dest) + \ + __must_be_noncstr(dest) + \ + ARRAY_SIZE(dest); \ + const size_t _src_len = __must_be_cstr(src) + \ + __builtin_object_size(src, 1); \ \ BUILD_BUG_ON(!__builtin_constant_p(_dest_len) || \ _dest_len == (size_t)-1); \ @@ -456,8 +462,11 @@ void memcpy_and_pad(void *dest, size_t dest_len, const void *src, size_t count, * Note that sizes of @dest and @src must be known at compile-time. */ #define memtostr(dest, src) do { \ - const size_t _dest_len = __builtin_object_size(dest, 1); \ - const size_t _src_len = __builtin_object_size(src, 1); \ + const size_t _dest_len = __must_be_byte_array(dest) + \ + __must_be_cstr(dest) + \ + ARRAY_SIZE(dest); \ + const size_t _src_len = __must_be_noncstr(src) + \ + __builtin_object_size(src, 1); \ const size_t _src_chars = strnlen(src, _src_len); \ const size_t _copy_len = min(_dest_len - 1, _src_chars); \ \ @@ -481,8 +490,11 @@ void memcpy_and_pad(void *dest, size_t dest_len, const void *src, size_t count, * Note that sizes of @dest and @src must be known at compile-time. */ #define memtostr_pad(dest, src) do { \ - const size_t _dest_len = __builtin_object_size(dest, 1); \ - const size_t _src_len = __builtin_object_size(src, 1); \ + const size_t _dest_len = __must_be_byte_array(dest) + \ + __must_be_cstr(dest) + \ + ARRAY_SIZE(dest); \ + const size_t _src_len = __must_be_noncstr(src) + \ + __builtin_object_size(src, 1); \ const size_t _src_chars = strnlen(src, _src_len); \ const size_t _copy_len = min(_dest_len - 1, _src_chars); \ \ |