[PATCH] ARM: ixp4xx: Replace 0-length arrays with flexible arrays

Kees Cook posted 1 patch 2 years, 8 months ago
drivers/soc/ixp4xx/ixp4xx-npe.c | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
[PATCH] ARM: ixp4xx: Replace 0-length arrays with flexible arrays
Posted by Kees Cook 2 years, 8 months ago
Zero-length arrays are deprecated[1]. Replace npe_load_firmware's
union of 0-length arrays with flexible arrays. Detected with GCC 13,
using -fstrict-flex-arrays=3:

drivers/soc/ixp4xx/ixp4xx-npe.c: In function 'npe_load_firmware':
drivers/soc/ixp4xx/ixp4xx-npe.c:570:60: warning: array subscript i is outside array bounds of 'u32[0]' {aka 'unsigned int[]'} [-Warray-bounds=]
  570 |                         image->data[i] = swab32(image->data[i]);
include/uapi/linux/swab.h:115:54: note: in definition of macro '__swab32'
  115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
      |                                                      ^
drivers/soc/ixp4xx/ixp4xx-npe.c:570:42: note: in expansion of macro 'swab32'
  570 |                         image->data[i] = swab32(image->data[i]);
      |                                          ^~~~~~
drivers/soc/ixp4xx/ixp4xx-npe.c:522:29: note: while referencing 'data'
  522 |                         u32 data[0];
      |                             ^~~~

[1] https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays

Cc: Krzysztof Halasa <khalasa@piap.pl>
Cc: Linus Walleij <linus.walleij@linaro.org>
Cc: Arnd Bergmann <arnd@arndb.de>
Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Cc: linux-arm-kernel@lists.infradead.org
Signed-off-by: Kees Cook <keescook@chromium.org>
---
 drivers/soc/ixp4xx/ixp4xx-npe.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/soc/ixp4xx/ixp4xx-npe.c b/drivers/soc/ixp4xx/ixp4xx-npe.c
index 58240e320c13..5be9988f30ce 100644
--- a/drivers/soc/ixp4xx/ixp4xx-npe.c
+++ b/drivers/soc/ixp4xx/ixp4xx-npe.c
@@ -519,15 +519,15 @@ int npe_load_firmware(struct npe *npe, const char *name, struct device *dev)
 		u32 id;
 		u32 size;
 		union {
-			u32 data[0];
-			struct dl_block blocks[0];
+			DECLARE_FLEX_ARRAY(u32, data);
+			DECLARE_FLEX_ARRAY(struct dl_block, blocks);
 		};
 	} *image;
 
 	struct dl_codeblock {
 		u32 npe_addr;
 		u32 size;
-		u32 data[0];
+		u32 data[];
 	} *cb;
 
 	int i, j, err, data_size, instr_size, blocks, table_end;
-- 
2.34.1
Re: [PATCH] ARM: ixp4xx: Replace 0-length arrays with flexible arrays
Posted by Linus Walleij 2 years, 8 months ago
On Thu, Jan 5, 2023 at 10:57 PM Kees Cook <keescook@chromium.org> wrote:

> Zero-length arrays are deprecated[1]. Replace npe_load_firmware's
> union of 0-length arrays with flexible arrays. Detected with GCC 13,
> using -fstrict-flex-arrays=3:
>
> drivers/soc/ixp4xx/ixp4xx-npe.c: In function 'npe_load_firmware':
> drivers/soc/ixp4xx/ixp4xx-npe.c:570:60: warning: array subscript i is outside array bounds of 'u32[0]' {aka 'unsigned int[]'} [-Warray-bounds=]
>   570 |                         image->data[i] = swab32(image->data[i]);
> include/uapi/linux/swab.h:115:54: note: in definition of macro '__swab32'
>   115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
>       |                                                      ^
> drivers/soc/ixp4xx/ixp4xx-npe.c:570:42: note: in expansion of macro 'swab32'
>   570 |                         image->data[i] = swab32(image->data[i]);
>       |                                          ^~~~~~
> drivers/soc/ixp4xx/ixp4xx-npe.c:522:29: note: while referencing 'data'
>   522 |                         u32 data[0];
>       |                             ^~~~
>
> [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays
>
> Cc: Krzysztof Halasa <khalasa@piap.pl>
> Cc: Linus Walleij <linus.walleij@linaro.org>
> Cc: Arnd Bergmann <arnd@arndb.de>
> Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
> Cc: linux-arm-kernel@lists.infradead.org
> Signed-off-by: Kees Cook <keescook@chromium.org>

Looks good to me:
Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Do you need me to funnel this to the SoC tree or do you have
some quickpath for fixes like this?

Yours,
Linus Walleij
Re: [PATCH] ARM: ixp4xx: Replace 0-length arrays with flexible arrays
Posted by Kees Cook 2 years, 8 months ago
On Sun, Jan 08, 2023 at 12:58:37AM +0100, Linus Walleij wrote:
> On Thu, Jan 5, 2023 at 10:57 PM Kees Cook <keescook@chromium.org> wrote:
> 
> > Zero-length arrays are deprecated[1]. Replace npe_load_firmware's
> > union of 0-length arrays with flexible arrays. Detected with GCC 13,
> > using -fstrict-flex-arrays=3:
> >
> > drivers/soc/ixp4xx/ixp4xx-npe.c: In function 'npe_load_firmware':
> > drivers/soc/ixp4xx/ixp4xx-npe.c:570:60: warning: array subscript i is outside array bounds of 'u32[0]' {aka 'unsigned int[]'} [-Warray-bounds=]
> >   570 |                         image->data[i] = swab32(image->data[i]);
> > include/uapi/linux/swab.h:115:54: note: in definition of macro '__swab32'
> >   115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
> >       |                                                      ^
> > drivers/soc/ixp4xx/ixp4xx-npe.c:570:42: note: in expansion of macro 'swab32'
> >   570 |                         image->data[i] = swab32(image->data[i]);
> >       |                                          ^~~~~~
> > drivers/soc/ixp4xx/ixp4xx-npe.c:522:29: note: while referencing 'data'
> >   522 |                         u32 data[0];
> >       |                             ^~~~
> >
> > [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays
> >
> > Cc: Krzysztof Halasa <khalasa@piap.pl>
> > Cc: Linus Walleij <linus.walleij@linaro.org>
> > Cc: Arnd Bergmann <arnd@arndb.de>
> > Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
> > Cc: linux-arm-kernel@lists.infradead.org
> > Signed-off-by: Kees Cook <keescook@chromium.org>
> 
> Looks good to me:
> Reviewed-by: Linus Walleij <linus.walleij@linaro.org>

Thanks!

> Do you need me to funnel this to the SoC tree or do you have
> some quickpath for fixes like this?

I'll take it via my tree if unless you'd rather it go through yours.
Most maintainers take these directly, but some don't want to. I'm
flexible! :)

-- 
Kees Cook
Re: [PATCH] ARM: ixp4xx: Replace 0-length arrays with flexible arrays
Posted by Linus Walleij 2 years, 8 months ago
On Thu, Jan 12, 2023 at 11:54 PM Kees Cook <keescook@chromium.org> wrote:
> On Sun, Jan 08, 2023 at 12:58:37AM +0100, Linus Walleij wrote:
> > On Thu, Jan 5, 2023 at 10:57 PM Kees Cook <keescook@chromium.org> wrote:
> >
> > > Zero-length arrays are deprecated[1]. Replace npe_load_firmware's
> > > union of 0-length arrays with flexible arrays. Detected with GCC 13,
> > > using -fstrict-flex-arrays=3:
> > >
> > > drivers/soc/ixp4xx/ixp4xx-npe.c: In function 'npe_load_firmware':
> > > drivers/soc/ixp4xx/ixp4xx-npe.c:570:60: warning: array subscript i is outside array bounds of 'u32[0]' {aka 'unsigned int[]'} [-Warray-bounds=]
> > >   570 |                         image->data[i] = swab32(image->data[i]);
> > > include/uapi/linux/swab.h:115:54: note: in definition of macro '__swab32'
> > >   115 | #define __swab32(x) (__u32)__builtin_bswap32((__u32)(x))
> > >       |                                                      ^
> > > drivers/soc/ixp4xx/ixp4xx-npe.c:570:42: note: in expansion of macro 'swab32'
> > >   570 |                         image->data[i] = swab32(image->data[i]);
> > >       |                                          ^~~~~~
> > > drivers/soc/ixp4xx/ixp4xx-npe.c:522:29: note: while referencing 'data'
> > >   522 |                         u32 data[0];
> > >       |                             ^~~~
> > >
> > > [1] https://www.kernel.org/doc/html/latest/process/deprecated.html#zero-length-and-one-element-arrays
> > >
> > > Cc: Krzysztof Halasa <khalasa@piap.pl>
> > > Cc: Linus Walleij <linus.walleij@linaro.org>
> > > Cc: Arnd Bergmann <arnd@arndb.de>
> > > Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
> > > Cc: linux-arm-kernel@lists.infradead.org
> > > Signed-off-by: Kees Cook <keescook@chromium.org>
> >
> > Looks good to me:
> > Reviewed-by: Linus Walleij <linus.walleij@linaro.org>
>
> Thanks!
>
> > Do you need me to funnel this to the SoC tree or do you have
> > some quickpath for fixes like this?
>
> I'll take it via my tree if unless you'd rather it go through yours.
> Most maintainers take these directly, but some don't want to. I'm
> flexible! :)

Just pick it into your tree, the IXP4xx is low activity and I do not
submit new material every merge window, so this is easiest.

Thanks!
Linus Walleij