Gustavo A. R. Silva
2022-Sep-02 23:59 UTC
[Ocfs2-devel] [PATCH][next] ocfs2: Replace zero-length arrays with DECLARE_FLEX_ARRAY() helper
Zero-length arrays are deprecated and we are moving towards adopting C99 flexible-array members, instead. So, replace zero-length array declarations in a couple of structures and unions with the new DECLARE_FLEX_ARRAY() helper macro. This helper allows for a flexible-array member in a union and as only member in a structure. Also, this addresses multiple warnings reported when building with Clang-15 and -Wzero-length-array. Lastly, this will also help memcpy (in a coming hardening update) execute proper bounds-checking on variable length object i_symlink at fs/ocfs2/namei.c:1973: fs/ocfs2/namei.c: 1973 memcpy((char *) fe->id2.i_symlink, symname, l); Link: https://github.com/KSPP/linux/issues/21 Link: https://github.com/KSPP/linux/issues/193 Link: https://github.com/KSPP/linux/issues/197 Link: https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html Signed-off-by: Gustavo A. R. Silva <gustavoars at kernel.org> --- fs/ocfs2/ocfs2_fs.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/fs/ocfs2/ocfs2_fs.h b/fs/ocfs2/ocfs2_fs.h index 638d875eccc7..7aebdbf5cc0a 100644 --- a/fs/ocfs2/ocfs2_fs.h +++ b/fs/ocfs2/ocfs2_fs.h @@ -527,7 +527,7 @@ struct ocfs2_extent_block * value -1 (0xFFFF) is OCFS2_INVALID_SLOT. This marks a slot empty. */ struct ocfs2_slot_map { -/*00*/ __le16 sm_slots[0]; +/*00*/ DECLARE_FLEX_ARRAY(__le16, sm_slots); /* * Actual on-disk size is one block. OCFS2_MAX_SLOTS is 255, * 255 * sizeof(__le16) == 512B, within the 512B block minimum blocksize. @@ -548,7 +548,7 @@ struct ocfs2_extended_slot { * i_size. */ struct ocfs2_slot_map_extended { -/*00*/ struct ocfs2_extended_slot se_slots[0]; +/*00*/ DECLARE_FLEX_ARRAY(struct ocfs2_extended_slot, se_slots); /* * Actual size is i_size of the slot_map system file. It should * match s_max_slots * sizeof(struct ocfs2_extended_slot) @@ -727,7 +727,7 @@ struct ocfs2_dinode { struct ocfs2_extent_list i_list; struct ocfs2_truncate_log i_dealloc; struct ocfs2_inline_data i_data; - __u8 i_symlink[0]; + DECLARE_FLEX_ARRAY(__u8, i_symlink); } id2; /* Actual on-disk size is one block */ }; @@ -892,7 +892,7 @@ struct ocfs2_group_desc /*30*/ struct ocfs2_block_check bg_check; /* Error checking */ __le64 bg_reserved2; /*40*/ union { - __u8 bg_bitmap[0]; + DECLARE_FLEX_ARRAY(__u8, bg_bitmap); struct { /* * Block groups may be discontiguous when -- 2.34.1
Kees Cook
2022-Sep-03 05:12 UTC
[Ocfs2-devel] [PATCH][next] ocfs2: Replace zero-length arrays with DECLARE_FLEX_ARRAY() helper
On Sat, Sep 03, 2022 at 12:59:36AM +0100, Gustavo A. R. Silva wrote:> Zero-length arrays are deprecated and we are moving towards adopting > C99 flexible-array members, instead. So, replace zero-length array > declarations in a couple of structures and unions with the new > DECLARE_FLEX_ARRAY() helper macro. > > This helper allows for a flexible-array member in a union and as > only member in a structure. > > Also, this addresses multiple warnings reported when building with > Clang-15 and -Wzero-length-array. > > Lastly, this will also help memcpy (in a coming hardening update) > execute proper bounds-checking on variable length object i_symlink > at fs/ocfs2/namei.c:1973: > > fs/ocfs2/namei.c: > 1973 memcpy((char *) fe->id2.i_symlink, symname, l); > > Link: https://github.com/KSPP/linux/issues/21 > Link: https://github.com/KSPP/linux/issues/193 > Link: https://github.com/KSPP/linux/issues/197 > Link: https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html > Signed-off-by: Gustavo A. R. Silva <gustavoars at kernel.org>Reviewed-by: Kees Cook <keescook at chromium.org> -- Kees Cook
Joseph Qi
2022-Sep-03 11:48 UTC
[Ocfs2-devel] [PATCH][next] ocfs2: Replace zero-length arrays with DECLARE_FLEX_ARRAY() helper
On 9/3/22 7:59 AM, Gustavo A. R. Silva wrote:> Zero-length arrays are deprecated and we are moving towards adopting > C99 flexible-array members, instead. So, replace zero-length array > declarations in a couple of structures and unions with the new > DECLARE_FLEX_ARRAY() helper macro. > > This helper allows for a flexible-array member in a union and as > only member in a structure. > > Also, this addresses multiple warnings reported when building with > Clang-15 and -Wzero-length-array. > > Lastly, this will also help memcpy (in a coming hardening update) > execute proper bounds-checking on variable length object i_symlink > at fs/ocfs2/namei.c:1973: > > fs/ocfs2/namei.c: > 1973 memcpy((char *) fe->id2.i_symlink, symname, l); > > Link: https://github.com/KSPP/linux/issues/21 > Link: https://github.com/KSPP/linux/issues/193 > Link: https://github.com/KSPP/linux/issues/197 > Link: https://gcc.gnu.org/onlinedocs/gcc/Zero-Length.html > Signed-off-by: Gustavo A. R. Silva <gustavoars at kernel.org>Looks good. Reviewed-by: Joseph Qi <joseph.qi at linux.alibaba.com>