On Fri, Feb 21, 2025 at 06:26:27PM +0000, Gabriel de Perthuis wrote:
> A fake d_name[0]/d_names[0] flexible array tickled UBSAN.
>
> Use DECLARE_FLEX_ARRAY to work around a compiler restriction on flex
> arrays in unions:
> https://people.kernel.org/kees/bounded-flexible-arrays-in-c
>
> Fixes: "bcachefs: bcachefs_metadata_version_casefolding"
> Closes: https://github.com/koverstreet/bcachefs/issues/824
>
> Signed-off-by: Gabriel de Perthuis <[email protected]>
Applied
> ---
> fs/bcachefs/dirent_format.h | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
> diff --git a/fs/bcachefs/dirent_format.h b/fs/bcachefs/dirent_format.h
> index 2e766032e1e91..a46dbddd21aad 100644
> --- a/fs/bcachefs/dirent_format.h
> +++ b/fs/bcachefs/dirent_format.h
> @@ -42,13 +42,13 @@ struct bch_dirent {
> union {
> struct {
> __u8 d_pad;
> __le16 d_name_len;
> __le16 d_cf_name_len;
> - __u8 d_names[0];
> + __u8 d_names[];
> } d_cf_name_block __packed;
> - __u8 d_name[0];
> + __DECLARE_FLEX_ARRAY(__u8, d_name);
> } __packed;
> } __packed __aligned(8);
>
> #define DT_SUBVOL 16
> #define BCH_DT_MAX 17
> --
> 2.45.2
>