mirror of
https://github.com/torvalds/linux.git
synced 2024-11-16 17:12:06 +00:00
can: pcan_usb: don't touch skb after netif_rx()
There is no guarantee that the skb is in the same state after calling net_receive_skb() or netif_rx(). It might be freed or reused. Not really harmful as its a read access, except you turn on the proper debugging options which catch a use after free. Cc: Stephane Grosjean <s.grosjean@peak-system.com> Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
This commit is contained in:
parent
9b721a4cef
commit
1c0ee04695
@ -526,9 +526,9 @@ static int pcan_usb_decode_error(struct pcan_usb_msg_context *mc, u8 n,
|
||||
hwts->hwtstamp = timeval_to_ktime(tv);
|
||||
}
|
||||
|
||||
netif_rx(skb);
|
||||
mc->netdev->stats.rx_packets++;
|
||||
mc->netdev->stats.rx_bytes += cf->can_dlc;
|
||||
netif_rx(skb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -659,12 +659,11 @@ static int pcan_usb_decode_data(struct pcan_usb_msg_context *mc, u8 status_len)
|
||||
hwts = skb_hwtstamps(skb);
|
||||
hwts->hwtstamp = timeval_to_ktime(tv);
|
||||
|
||||
/* push the skb */
|
||||
netif_rx(skb);
|
||||
|
||||
/* update statistics */
|
||||
mc->netdev->stats.rx_packets++;
|
||||
mc->netdev->stats.rx_bytes += cf->can_dlc;
|
||||
/* push the skb */
|
||||
netif_rx(skb);
|
||||
|
||||
return 0;
|
||||
|
||||
|
@ -553,9 +553,9 @@ static int pcan_usb_pro_handle_canmsg(struct pcan_usb_pro_interface *usb_if,
|
||||
hwts = skb_hwtstamps(skb);
|
||||
hwts->hwtstamp = timeval_to_ktime(tv);
|
||||
|
||||
netif_rx(skb);
|
||||
netdev->stats.rx_packets++;
|
||||
netdev->stats.rx_bytes += can_frame->can_dlc;
|
||||
netif_rx(skb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
@ -670,9 +670,9 @@ static int pcan_usb_pro_handle_error(struct pcan_usb_pro_interface *usb_if,
|
||||
peak_usb_get_ts_tv(&usb_if->time_ref, le32_to_cpu(er->ts32), &tv);
|
||||
hwts = skb_hwtstamps(skb);
|
||||
hwts->hwtstamp = timeval_to_ktime(tv);
|
||||
netif_rx(skb);
|
||||
netdev->stats.rx_packets++;
|
||||
netdev->stats.rx_bytes += can_frame->can_dlc;
|
||||
netif_rx(skb);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user