• Gustavo A. R. Silva's avatar
    bcachefs: Replace zero-length array with flex-array member and use __counted_by · 4c26dea1
    Gustavo A. R. Silva authored
    Fake flexible arrays (zero-length and one-element arrays) are
    deprecated, and should be replaced by flexible-array members.
    So, replace zero-length array with a flexible-array member in
    `struct bch_ioctl_fsck_offline`.
    
    Also annotate array `devs` with `__counted_by()` to prepare for the
    coming implementation by GCC and Clang of the `__counted_by` attribute.
    Flexible array members annotated with `__counted_by` can have their
    accesses bounds-checked at run-time via `CONFIG_UBSAN_BOUNDS` (for
    array indexing) and `CONFIG_FORTIFY_SOURCE` (for strcpy/memcpy-family
    functions).
    
    This fixes the following -Warray-bounds warnings:
    fs/bcachefs/chardev.c: In function 'bch2_ioctl_fsck_offline':
    fs/bcachefs/chardev.c:363:34: warning: array subscript 0 is outside array bounds of '__u64[0]' {aka 'long long unsigned int[]'} [-Warray-bounds=]
      363 |         if (copy_from_user(devs, &user_arg->devs[0], sizeof(user_arg->devs[0]) * arg.nr_devs)) {
          |                                  ^~~~~~~~~~~~~~~~~~
    In file included from fs/bcachefs/chardev.c:5:
    fs/bcachefs/bcachefs_ioctl.h:400:33: note: while referencing 'devs'
      400 |         __u64                   devs[0];
    
    This results in no differences in binary output.
    Signed-off-by: default avatarGustavo A. R. Silva <gustavoars@kernel.org>
    Signed-off-by: default avatarKent Overstreet <kent.overstreet@linux.dev>
    4c26dea1
bcachefs_ioctl.h 10.5 KB