ARM: ixp4xx: Replace 0-length arrays with flexible arrays

Message ID 20230105215706.never.027-kees@kernel.org
State New
Headers
Series ARM: ixp4xx: Replace 0-length arrays with flexible arrays |

Commit Message

Kees Cook Jan. 5, 2023, 9:57 p.m. UTC
  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(-)
  

Comments

Linus Walleij Jan. 7, 2023, 11:58 p.m. UTC | #1
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
  
Kees Cook Jan. 12, 2023, 10:54 p.m. UTC | #2
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! :)
  
Linus Walleij Jan. 16, 2023, 10:31 a.m. UTC | #3
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
  

Patch

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;