linux/drivers/net/can
Oleksij Rempel 4e096a1886 net: introduce CAN specific pointer in the struct net_device
Since 20dd3850bc ("can: Speed up CAN frame receiption by using
ml_priv") the CAN framework uses per device specific data in the AF_CAN
protocol. For this purpose the struct net_device->ml_priv is used. Later
the ml_priv usage in CAN was extended for other users, one of them being
CAN_J1939.

Later in the kernel ml_priv was converted to an union, used by other
drivers. E.g. the tun driver started storing it's stats pointer.

Since tun devices can claim to be a CAN device, CAN specific protocols
will wrongly interpret this pointer, which will cause system crashes.
Mostly this issue is visible in the CAN_J1939 stack.

To fix this issue, we request a dedicated CAN pointer within the
net_device struct.

Reported-by: syzbot+5138c4dd15a0401bec7b@syzkaller.appspotmail.com
Fixes: 20dd3850bc ("can: Speed up CAN frame receiption by using ml_priv")
Fixes: ffd956eef6 ("can: introduce CAN midlayer private and allocate it automatically")
Fixes: 9d71dd0c70 ("can: add support of SAE J1939 protocol")
Fixes: 497a5757ce ("tun: switch to net core provided statistics counters")
Signed-off-by: Oleksij Rempel <o.rempel@pengutronix.de>
Link: https://lore.kernel.org/r/20210223070127.4538-1-o.rempel@pengutronix.de
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
2021-02-24 14:32:15 -08:00
..
c_can can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
cc770 can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
dev net: introduce CAN specific pointer in the struct net_device 2021-02-24 14:32:15 -08:00
ifi_canfd can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
m_can can: tcan4x5x: remove __packed attribute from struct tcan4x5x_map_buf 2021-01-14 08:43:44 +01:00
mscan can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
peak_canfd can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
rcar can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
sja1000 can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
softing can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
spi can: mcp251xfd: mcp251xfd_probe(): use dev_err_probe() to simplify error handling 2021-01-29 09:31:58 +01:00
usb can: mcba_usb: remove h from printk format specifier 2021-01-27 10:01:46 +01:00
at91_can.c can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
flexcan.c can: flexcan: fix typos 2021-01-27 10:01:46 +01:00
grcan.c can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
janz-ican3.c can: replace can_dlc as variable/element for payload length 2020-11-20 12:04:12 +01:00
Kconfig can: kvaser_pciefd: select CONFIG_CRC32 2021-01-05 15:50:36 -08:00
kvaser_pciefd.c can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
led.c treewide: Replace GPLv2 boilerplate/reference with SPDX - rule 500 2019-06-19 17:09:55 +02:00
Makefile can: dev: move driver related infrastructure into separate subdir 2021-01-13 09:42:58 +01:00
pch_can.c can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
slcan.c net: introduce CAN specific pointer in the struct net_device 2021-02-24 14:32:15 -08:00
sun4i_can.c can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
ti_hecc.c can: dev: can_rx_offload_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00
vcan.c net: introduce CAN specific pointer in the struct net_device 2021-02-24 14:32:15 -08:00
vxcan.c net: introduce CAN specific pointer in the struct net_device 2021-02-24 14:32:15 -08:00
xilinx_can.c can: dev: can_get_echo_skb(): extend to return can frame length 2021-01-14 08:43:43 +01:00