From: Marc Kleine-Budde <mkl@pengutronix.de>
To: netdev@vger.kernel.org
Cc: davem@davemloft.net, kuba@kernel.org, linux-can@vger.kernel.org,
kernel@pengutronix.de,
Dario Binacchi <dario.binacchi@amarulasolutions.com>,
Marc Kleine-Budde <mkl@pengutronix.de>
Subject: [PATCH net 05/15] can: hi311x: hi3110_can_ist(): fix potential use-after-free
Date: Mon, 2 Dec 2024 09:55:39 +0100 [thread overview]
Message-ID: <20241202090040.1110280-6-mkl@pengutronix.de> (raw)
In-Reply-To: <20241202090040.1110280-1-mkl@pengutronix.de>
From: Dario Binacchi <dario.binacchi@amarulasolutions.com>
The commit a22bd630cfff ("can: hi311x: do not report txerr and rxerr
during bus-off") removed the reporting of rxerr and txerr even in case
of correct operation (i. e. not bus-off).
The error count information added to the CAN frame after netif_rx() is
a potential use after free, since there is no guarantee that the skb
is in the same state. It might be freed or reused.
Fix the issue by postponing the netif_rx() call in case of txerr and
rxerr reporting.
Fixes: a22bd630cfff ("can: hi311x: do not report txerr and rxerr during bus-off")
Signed-off-by: Dario Binacchi <dario.binacchi@amarulasolutions.com>
Link: https://patch.msgid.link/20241122221650.633981-5-dario.binacchi@amarulasolutions.com
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
---
drivers/net/can/spi/hi311x.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/drivers/net/can/spi/hi311x.c b/drivers/net/can/spi/hi311x.c
index 148d974ebb21..b67464df25ff 100644
--- a/drivers/net/can/spi/hi311x.c
+++ b/drivers/net/can/spi/hi311x.c
@@ -671,9 +671,9 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
tx_state = txerr >= rxerr ? new_state : 0;
rx_state = txerr <= rxerr ? new_state : 0;
can_change_state(net, cf, tx_state, rx_state);
- netif_rx(skb);
if (new_state == CAN_STATE_BUS_OFF) {
+ netif_rx(skb);
can_bus_off(net);
if (priv->can.restart_ms == 0) {
priv->force_quit = 1;
@@ -684,6 +684,7 @@ static irqreturn_t hi3110_can_ist(int irq, void *dev_id)
cf->can_id |= CAN_ERR_CNT;
cf->data[6] = txerr;
cf->data[7] = rxerr;
+ netif_rx(skb);
}
}
--
2.45.2
next prev parent reply other threads:[~2024-12-02 9:00 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-12-02 8:55 [PATCH net 0/15] pull-request: can 2024-12-02 Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 01/15] can: dev: can_set_termination(): allow sleeping GPIOs Marc Kleine-Budde
2024-12-03 2:10 ` patchwork-bot+netdevbpf
2024-12-02 8:55 ` [PATCH net 02/15] can: gs_usb: add usb endpoint address detection at driver probe step Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 03/15] can: c_can: c_can_handle_bus_err(): update statistics if skb allocation fails Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 04/15] can: sun4i_can: sun4i_can_err(): call can_change_state() even if cf is NULL Marc Kleine-Budde
2024-12-02 8:55 ` Marc Kleine-Budde [this message]
2024-12-02 8:55 ` [PATCH net 06/15] can: hi311x: hi3110_can_ist(): update state error statistics if skb allocation fails Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 07/15] can: m_can: m_can_handle_lec_err(): fix {rx,tx}_errors statistics Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 08/15] can: ifi_canfd: ifi_canfd_handle_lec_err(): " Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 09/15] can: hi311x: hi3110_can_ist(): " Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 10/15] can: sja1000: sja1000_err(): " Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 11/15] can: sun4i_can: sun4i_can_err(): " Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 12/15] can: ems_usb: ems_usb_rx_err(): " Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 13/15] can: f81604: f81604_handle_can_bus_errors(): " Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 14/15] can: mcp251xfd: mcp251xfd_get_tef_len(): work around erratum DS80000789E 6 Marc Kleine-Budde
2024-12-02 8:55 ` [PATCH net 15/15] can: j1939: j1939_session_new(): fix skb reference counting Marc Kleine-Budde
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=20241202090040.1110280-6-mkl@pengutronix.de \
--to=mkl@pengutronix.de \
--cc=dario.binacchi@amarulasolutions.com \
--cc=davem@davemloft.net \
--cc=kernel@pengutronix.de \
--cc=kuba@kernel.org \
--cc=linux-can@vger.kernel.org \
--cc=netdev@vger.kernel.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox