Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 1c0ee046 authored by Marc Kleine-Budde's avatar Marc Kleine-Budde
Browse files

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: default avatarMarc Kleine-Budde <mkl@pengutronix.de>
parent 9b721a4c
Loading
Loading
Loading
Loading
+3 −4
Original line number Diff line number Diff line
@@ -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;

+2 −2
Original line number Diff line number Diff line
@@ -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;
}