On Fri, 15 Jan 2021 15:30:35 +0100 Oleksij Rempel wrote: > Since 20dd3850bcf8 ("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. No strong objection, others already added their pointers, but I wonder if we can't save those couple of bytes by adding a ml_priv_type, to check instead of dev->type? And leave it 0 for drivers using stats? That way other device types which are limited by all being ARPHDR_ETHER can start using ml_priv as well? > +#if IS_ENABLED(CONFIG_CAN) > + struct can_ml_priv *can; > +#endif Perhaps put it next to all the _ptr fields?