spi: axi-spi-engine: use __counted_by() attribute
authorDavid Lechner <dlechner@baylibre.com>
Mon, 4 Mar 2024 16:04:24 +0000 (10:04 -0600)
committerMark Brown <broonie@kernel.org>
Mon, 4 Mar 2024 17:43:59 +0000 (17:43 +0000)
This adds the __counted_by() attribute to the flex array at the end of
struct spi_engine_program in the AXI SPI Engine controller driver.

The assignment of the length field has to be reordered to be before
the access to the flex array in order to avoid potential compiler
warnings/errors due to adding the __counted_by() attribute.

Suggested-by: Nuno Sá <nuno.sa@analog.com>
Signed-off-by: David Lechner <dlechner@baylibre.com>
Reviewed-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Reviewed-by: Kees Cook <keescook@chromium.org>
Link: https://msgid.link/r/20240304-mainline-axi-spi-engine-small-cleanups-v2-2-5b14ed729a31@baylibre.com
Signed-off-by: Mark Brown <broonie@kernel.org>
drivers/spi/spi-axi-spi-engine.c

index d89f75170c9e49697708c55b77ddce975d3e2e99..a8f626165f44d95ca306a3ea3b502e4b06ddbd5d 100644 (file)
@@ -75,7 +75,7 @@
 
 struct spi_engine_program {
        unsigned int length;
-       uint16_t instructions[];
+       uint16_t instructions[] __counted_by(length);
 };
 
 /**
@@ -115,9 +115,10 @@ struct spi_engine {
 static void spi_engine_program_add_cmd(struct spi_engine_program *p,
        bool dry, uint16_t cmd)
 {
-       if (!dry)
-               p->instructions[p->length] = cmd;
        p->length++;
+
+       if (!dry)
+               p->instructions[p->length - 1] = cmd;
 }
 
 static unsigned int spi_engine_get_config(struct spi_device *spi)