diff mbox series

[v1,1/1] spi: Don't use flexible array in struct spi_message definition

Message ID 20231010163100.89734-1-andriy.shevchenko@linux.intel.com (mailing list archive)
State Accepted
Commit f6d7f050e258e3c71e310f5167c4d65bbefaeb31
Headers show
Series [v1,1/1] spi: Don't use flexible array in struct spi_message definition | expand

Commit Message

Andy Shevchenko Oct. 10, 2023, 4:31 p.m. UTC
The struct spi_message can be embedded into another structures.
With that the flexible array might be problematic as sparse
complains about it, although there is no real issue in the code
because when the message is embedded it doesn't use flexible array
member. That memeber is a private to spi_message_alloc() API, so
move it to that API in a form of an inherited data type.

Reported-by: Marc Kleine-Budde <mkl@pengutronix.de>
Fixes: 75e308ffc4f0 ("spi: Use struct_size() helper"))
Closes: https://lore.kernel.org/r/20231009-onshore-underage-c58415adfd92-mkl@pengutronix.de
Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>
---
 include/linux/spi/spi.h | 27 +++++++++++++--------------
 1 file changed, 13 insertions(+), 14 deletions(-)

Comments

Marc Kleine-Budde Oct. 11, 2023, 7 a.m. UTC | #1
On 10.10.2023 19:31:00, Andy Shevchenko wrote:
> The struct spi_message can be embedded into another structures.
> With that the flexible array might be problematic as sparse
> complains about it, although there is no real issue in the code
> because when the message is embedded it doesn't use flexible array
> member. That memeber is a private to spi_message_alloc() API, so
> move it to that API in a form of an inherited data type.
> 
> Reported-by: Marc Kleine-Budde <mkl@pengutronix.de>
> Fixes: 75e308ffc4f0 ("spi: Use struct_size() helper"))
> Closes: https://lore.kernel.org/r/20231009-onshore-underage-c58415adfd92-mkl@pengutronix.de
> Signed-off-by: Andy Shevchenko <andriy.shevchenko@linux.intel.com>

Reviewed-by: Marc Kleine-Budde <mkl@pengutronix.de>

Thank you for the timely fix!

regards,
Marc
Mark Brown Oct. 11, 2023, 6:48 p.m. UTC | #2
On Tue, 10 Oct 2023 19:31:00 +0300, Andy Shevchenko wrote:
> The struct spi_message can be embedded into another structures.
> With that the flexible array might be problematic as sparse
> complains about it, although there is no real issue in the code
> because when the message is embedded it doesn't use flexible array
> member. That memeber is a private to spi_message_alloc() API, so
> move it to that API in a form of an inherited data type.
> 
> [...]

Applied to

   https://git.kernel.org/pub/scm/linux/kernel/git/broonie/spi.git for-next

Thanks!

[1/1] spi: Don't use flexible array in struct spi_message definition
      commit: f6d7f050e258e3c71e310f5167c4d65bbefaeb31

All being well this means that it will be integrated into the linux-next
tree (usually sometime in the next 24 hours) and sent to Linus during
the next merge window (or sooner if it is a bug fix), however if
problems are discovered then the patch may be dropped or reverted.

You may get further e-mails resulting from automated or manual testing
and review of the tree, please engage with people reporting problems and
send followup patches addressing any issues that are reported if needed.

If any updates are required or you are submitting further changes they
should be sent as incremental updates against current git, existing
patches will not be replaced.

Please add any relevant lists and maintainers to the CCs when replying
to this mail.

Thanks,
Mark
diff mbox series

Patch

diff --git a/include/linux/spi/spi.h b/include/linux/spi/spi.h
index 7f8b478fdeb3..487da1f6e4b7 100644
--- a/include/linux/spi/spi.h
+++ b/include/linux/spi/spi.h
@@ -1086,8 +1086,6 @@  struct spi_transfer {
  * @state: for use by whichever driver currently owns the message
  * @resources: for resource management when the SPI message is processed
  * @prepared: spi_prepare_message was called for the this message
- * @t: for use with spi_message_alloc() when message and transfers have
- *	been allocated together
  *
  * A @spi_message is used to execute an atomic sequence of data transfers,
  * each represented by a struct spi_transfer.  The sequence is "atomic"
@@ -1142,9 +1140,6 @@  struct spi_message {
 
 	/* List of spi_res resources when the SPI message is processed */
 	struct list_head        resources;
-
-	/* For embedding transfers into the memory of the message */
-	struct spi_transfer	t[];
 };
 
 static inline void spi_message_init_no_memset(struct spi_message *m)
@@ -1203,17 +1198,21 @@  struct spi_transfer *xfers, unsigned int num_xfers)
  */
 static inline struct spi_message *spi_message_alloc(unsigned ntrans, gfp_t flags)
 {
-	struct spi_message *m;
+	struct spi_message_with_transfers {
+		struct spi_message m;
+		struct spi_transfer t[];
+	} *mwt;
+	unsigned i;
 
-	m = kzalloc(struct_size(m, t, ntrans), flags);
-	if (m) {
-		unsigned i;
+	mwt = kzalloc(struct_size(mwt, t, ntrans), flags);
+	if (!mwt)
+		return NULL;
 
-		spi_message_init_no_memset(m);
-		for (i = 0; i < ntrans; i++)
-			spi_message_add_tail(&m->t[i], m);
-	}
-	return m;
+	spi_message_init_no_memset(&mwt->m);
+	for (i = 0; i < ntrans; i++)
+		spi_message_add_tail(&mwt->t[i], &mwt->m);
+
+	return &mwt->m;
 }
 
 static inline void spi_message_free(struct spi_message *m)