All of lore.kernel.org
 help / color / mirror / Atom feed
From: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
To: Marc Kleine-Budde <mkl@pengutronix.de>, linux-can@vger.kernel.org
Cc: Thomas Kopp <thomas.kopp@microchip.com>,
	Manivannan Sadhasivam <manivannan.sadhasivam@linaro.org>,
	"Gustavo A . R . Silva" <gustavoars@kernel.org>,
	netdev@vger.kernel.org, linux-hardening@vger.kernel.org,
	Vincent Mailhol <mailhol.vincent@wanadoo.fr>,
	Kees Cook <kees@kernel.org>
Subject: [PATCH 2/2] can: mcp251xfd: decorate mcp251xfd_rx_ring.obj with __counted_by()
Date: Sun,  9 Jun 2024 13:54:19 +0900	[thread overview]
Message-ID: <20240609045419.240265-3-mailhol.vincent@wanadoo.fr> (raw)
In-Reply-To: <20240609045419.240265-1-mailhol.vincent@wanadoo.fr>

A new __counted_by() attribute was introduced in [1]. It makes the
compiler's sanitizer aware of the actual size of a flexible array
member, allowing for additional runtime checks.

Apply the __counted_by() attribute to the obj flexible array member of
struct mcp251xfd_rx_ring.

Note that the mcp251xfd_rx_ring.obj member is polymorphic: it can be
either of:

  * an array of struct mcp251xfd_hw_rx_obj_can
  * an array of struct mcp251xfd_hw_rx_obj_canfd

The canfd type was chosen in the declaration by the original author to
reflect the upper bound. We pursue the same logic here: the sanitizer
will only see the accurate size of canfd frames. For classical can
frames, it will see a size bigger than the reality, making the check
incorrect but silent (false negative).

[1] commit dd06e72e68bc ("Compiler Attributes: Add __counted_by macro")
Link: https://git.kernel.org/torvalds/c/dd06e72e68bc

CC: Kees Cook <kees@kernel.org>
Signed-off-by: Vincent Mailhol <mailhol.vincent@wanadoo.fr>
---
 drivers/net/can/spi/mcp251xfd/mcp251xfd.h | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
index 24510b3b8020..b7579fba9457 100644
--- a/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
+++ b/drivers/net/can/spi/mcp251xfd/mcp251xfd.h
@@ -565,7 +565,7 @@ struct mcp251xfd_rx_ring {
 	union mcp251xfd_write_reg_buf uinc_buf;
 	union mcp251xfd_write_reg_buf uinc_irq_disable_buf;
 	struct spi_transfer uinc_xfer[MCP251XFD_FIFO_DEPTH];
-	struct mcp251xfd_hw_rx_obj_canfd obj[];
+	struct mcp251xfd_hw_rx_obj_canfd obj[] __counted_by(obj_num);
 };
 
 struct __packed mcp251xfd_map_buf_nocrc {
-- 
2.43.0


  parent reply	other threads:[~2024-06-09  4:54 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-06-09  4:54 [PATCH 0/2] can: treewide: decorate flexible array members with __counted_by() Vincent Mailhol
2024-06-09  4:54 ` [PATCH 1/2] can: peak_canfd: decorate pciefd_board.can " Vincent Mailhol
2024-06-10 18:34   ` Kees Cook
2024-06-09  4:54 ` Vincent Mailhol [this message]
2024-06-10 18:44   ` [PATCH 2/2] can: mcp251xfd: decorate mcp251xfd_rx_ring.obj " Kees Cook

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20240609045419.240265-3-mailhol.vincent@wanadoo.fr \
    --to=mailhol.vincent@wanadoo.fr \
    --cc=gustavoars@kernel.org \
    --cc=kees@kernel.org \
    --cc=linux-can@vger.kernel.org \
    --cc=linux-hardening@vger.kernel.org \
    --cc=manivannan.sadhasivam@linaro.org \
    --cc=mkl@pengutronix.de \
    --cc=netdev@vger.kernel.org \
    --cc=thomas.kopp@microchip.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.