On Fri, Jan 27, 2023 at 07:10:28AM -0600, Nathan Lynch wrote: > Andrew Donnellan <a...@linux.ibm.com> writes: > > Using a one-element array as a fake flexible array is deprecated. > > > > Replace the one-element flexible arrays in rtas-types.h with C99 standard > > flexible array members instead. > > > > This helps us move towards enabling -fstrict-flex-arrays=3 in future. > > > > Found using scripts/coccinelle/misc/flexible_array.cocci. > > > > Cc: Nathan Lynch <nath...@linux.ibm.com> > > Cc: Leonardo Bras <leobra...@gmail.com> > > Cc: linux-harden...@vger.kernel.org > > Link: https://github.com/KSPP/linux/issues/21 > > Link: https://github.com/KSPP/linux/issues/79 > > Signed-off-by: Andrew Donnellan <a...@linux.ibm.com> > > --- > > arch/powerpc/include/asm/rtas-types.h | 4 ++-- > > 1 file changed, 2 insertions(+), 2 deletions(-) > > > > diff --git a/arch/powerpc/include/asm/rtas-types.h > > b/arch/powerpc/include/asm/rtas-types.h > > index 8df6235d64d1..40ec03a05c0b 100644 > > --- a/arch/powerpc/include/asm/rtas-types.h > > +++ b/arch/powerpc/include/asm/rtas-types.h > > @@ -44,7 +44,7 @@ struct rtas_error_log { > > */ > > u8 byte3; /* General event or error*/ > > __be32 extended_log_length; /* length in bytes */ > > - unsigned char buffer[1]; /* Start of extended log */ > > + unsigned char buffer[]; /* Start of extended log */ > > /* Variable length. */ > > }; > > > > @@ -85,7 +85,7 @@ struct rtas_ext_event_log_v6 { > > /* that defines the format for */ > > /* the vendor specific log type */ > > /* Byte 16-end of log */ > > - u8 vendor_log[1]; /* Start of vendor specific log */ > > + u8 vendor_log[]; /* Start of vendor specific log */ > > /* Variable length. */ > > }; > > I see at least one place that consults the size of one of these structs, > in get_pseries_errorlog(): > > /* Check that we understand the format */ > if (ext_log_length < sizeof(struct rtas_ext_event_log_v6) || ... > > Don't all such sites need to be audited/adjusted for changes like this?
Yeah, I'd expect a binary comparison[1] before/after to catch things like this. E.g. the following C files mention those structs: arch/powerpc/platforms/pseries/io_event_irq.c arch/powerpc/platforms/pseries/ras.c arch/powerpc/kernel/rtasd.c arch/powerpc/kernel/rtas.c -Kees [1] https://outflux.net/blog/archives/2022/06/24/finding-binary-differences/ -- Kees Cook