Re: [PATCH] powerpc/rtas: Replace one-element arrays with flexible arrays
From: Kees Cook <hidden>
Date: 2023-01-27 19:25:03
Also in:
linux-hardening
On Fri, Jan 27, 2023 at 07:10:28AM -0600, Nathan Lynch wrote:
Andrew Donnellan [off-list ref] writes:quoted
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 <redacted> Cc: Leonardo Bras <redacted> Cc: linux-hardening@vger.kernel.org Link: https://github.com/KSPP/linux/issues/21 Link: https://github.com/KSPP/linux/issues/79 Signed-off-by: Andrew Donnellan <redacted> --- 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