Skip to content

Commit

Permalink
autofs: use flexible array in ioctl structure
Browse files Browse the repository at this point in the history
Commit df8fc4e ("kbuild: Enable -fstrict-flex-arrays=3") introduced a warning
for the autofs_dev_ioctl structure:

In function 'check_name',
    inlined from 'validate_dev_ioctl' at fs/autofs/dev-ioctl.c:131:9,
    inlined from '_autofs_dev_ioctl' at fs/autofs/dev-ioctl.c:624:8:
fs/autofs/dev-ioctl.c:33:14: error: 'strchr' reading 1 or more bytes from a region of size 0 [-Werror=stringop-overread]
   33 |         if (!strchr(name, '/'))
      |              ^~~~~~~~~~~~~~~~~
In file included from include/linux/auto_dev-ioctl.h:10,
                 from fs/autofs/autofs_i.h:10,
                 from fs/autofs/dev-ioctl.c:14:
include/uapi/linux/auto_dev-ioctl.h: In function '_autofs_dev_ioctl':
include/uapi/linux/auto_dev-ioctl.h:112:14: note: source object 'path' of size 0
  112 |         char path[0];
      |              ^~~~

This is easily fixed by changing the gnu 0-length array into a c99
flexible array. Since this is a uapi structure, we have to be careful
about possible regressions but this one should be fine as they are
equivalent here. While it would break building with ancient gcc versions
that predate c99, it helps building with --std=c99 and -Wpedantic builds
in user space, as well as non-gnu compilers. This means we probably
also want it fixed in stable kernels.

Cc: stable@vger.kernel.org
Cc: Kees Cook <keescook@chromium.org>
Cc: Gustavo A. R. Silva" <gustavoars@kernel.org>
Signed-off-by: Arnd Bergmann <arnd@arndb.de>
Signed-off-by: Kees Cook <keescook@chromium.org>
Link: https://lore.kernel.org/r/20230523081944.581710-1-arnd@kernel.org
  • Loading branch information
arndb authored and kees committed May 30, 2023
1 parent b45861e commit e910c8e
Show file tree
Hide file tree
Showing 3 changed files with 3 additions and 3 deletions.
2 changes: 1 addition & 1 deletion Documentation/filesystems/autofs-mount-control.rst
Original file line number Diff line number Diff line change
Expand Up @@ -196,7 +196,7 @@ information and return operation results::
struct args_ismountpoint ismountpoint;
};

char path[0];
char path[];
};

The ioctlfd field is a mount point file descriptor of an autofs mount
Expand Down
2 changes: 1 addition & 1 deletion Documentation/filesystems/autofs.rst
Original file line number Diff line number Diff line change
Expand Up @@ -467,7 +467,7 @@ Each ioctl is passed a pointer to an `autofs_dev_ioctl` structure::
struct args_ismountpoint ismountpoint;
};

char path[0];
char path[];
};

For the **OPEN_MOUNT** and **IS_MOUNTPOINT** commands, the target
Expand Down
2 changes: 1 addition & 1 deletion include/uapi/linux/auto_dev-ioctl.h
Original file line number Diff line number Diff line change
Expand Up @@ -109,7 +109,7 @@ struct autofs_dev_ioctl {
struct args_ismountpoint ismountpoint;
};

char path[0];
char path[];
};

static inline void init_autofs_dev_ioctl(struct autofs_dev_ioctl *in)
Expand Down

0 comments on commit e910c8e

Please sign in to comment.