linux-yocto/drivers/net/can
Marc Kleine-Budde c1f3f9797c can: netlink: can_changelink(): fix NULL pointer deref of struct can_priv::do_set_mode
Andrei Lalaev reported a NULL pointer deref when a CAN device is
restarted from Bus Off and the driver does not implement the struct
can_priv::do_set_mode callback.

There are 2 code path that call struct can_priv::do_set_mode:
- directly by a manual restart from the user space, via
  can_changelink()
- delayed automatic restart after bus off (deactivated by default)

To prevent the NULL pointer deference, refuse a manual restart or
configure the automatic restart delay in can_changelink() and report
the error via extack to user space.

As an additional safety measure let can_restart() return an error if
can_priv::do_set_mode is not set instead of dereferencing it
unchecked.

Reported-by: Andrei Lalaev <andrey.lalaev@gmail.com>
Closes: https://lore.kernel.org/all/20250714175520.307467-1-andrey.lalaev@gmail.com
Fixes: 39549eef35 ("can: CAN Network device driver and Netlink interface")
Link: https://patch.msgid.link/20250718-fix-nullptr-deref-do_set_mode-v1-1-0b520097bb96@pengutronix.de
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
2025-07-22 12:55:13 +02:00
..
c_can can: c_can: Use syscon_regmap_lookup_by_phandle_args 2025-02-19 10:44:21 +01:00
cc770 can: {cc770,sja1000}_isa: allow building on x86_64 2024-11-04 17:46:06 +01:00
ctucanfd can: dev: add struct data_bittiming_params to group FD parameters 2025-05-21 14:33:28 +02:00
dev can: netlink: can_changelink(): fix NULL pointer deref of struct can_priv::do_set_mode 2025-07-22 12:55:13 +02:00
esd can: esd_402_pci: Add support for one-shot mode 2024-08-05 17:32:00 +02:00
flexcan can: dev: add struct data_bittiming_params to group FD parameters 2025-05-21 14:33:28 +02:00
ifi_canfd can: dev: add struct data_bittiming_params to group FD parameters 2025-05-21 14:33:28 +02:00
m_can can: tcan4x5x: fix reset gpio usage during probe 2025-07-15 11:59:43 +02:00
mscan can: Switch back to struct platform_driver::remove() 2024-09-11 09:37:16 +02:00
peak_canfd can: dev: add struct data_bittiming_params to group FD parameters 2025-05-21 14:33:28 +02:00
rcar can: dev: add struct data_bittiming_params to group FD parameters 2025-05-21 14:33:28 +02:00
rockchip can: dev: add struct data_bittiming_params to group FD parameters 2025-05-21 14:33:28 +02:00
sja1000 treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
slcan can: slcan: allow reception of short error messages 2025-05-21 10:12:05 +02:00
softing can: Switch back to struct platform_driver::remove() 2024-09-11 09:37:16 +02:00
spi can: dev: add struct data_bittiming_params to group FD parameters 2025-05-21 14:33:28 +02:00
usb treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
at91_can.c can: Switch back to struct platform_driver::remove() 2024-09-11 09:37:16 +02:00
bxcan.c can: Switch back to struct platform_driver::remove() 2024-09-11 09:37:16 +02:00
can327.c
grcan.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
janz-ican3.c can: Switch back to struct platform_driver::remove() 2024-09-11 09:37:16 +02:00
Kconfig can: rockchip_canfd: add driver for Rockchip CAN-FD controller 2024-09-04 14:41:51 +02:00
kvaser_pciefd.c treewide, timers: Rename from_timer() to timer_container_of() 2025-06-08 09:07:37 +02:00
Makefile can: rockchip_canfd: add driver for Rockchip CAN-FD controller 2024-09-04 14:41:51 +02:00
sun4i_can.c linux-can-next-for-6.14-20250110 2025-01-10 22:46:08 -08:00
ti_hecc.c can: Switch back to struct platform_driver::remove() 2024-09-11 09:37:16 +02:00
vcan.c
vxcan.c net: Use link/peer netns in newlink() of rtnl_link_ops 2025-02-21 15:28:02 -08:00
xilinx_can.c can: dev: add struct data_bittiming_params to group FD parameters 2025-05-21 14:33:28 +02:00