diff --git a/drivers/net/can/usb/ucan.c b/drivers/net/can/usb/ucan.c
index d582c39fc8d0..717d4925fdb0 100644
--- a/drivers/net/can/usb/ucan.c
+++ b/drivers/net/can/usb/ucan.c
@@ -619,12 +619,13 @@ static void ucan_rx_can_msg(struct ucan_priv *up, struct ucan_message_in *m)
/* copy the payload of non RTR frames */
if (!(cf->can_id & CAN_RTR_FLAG) || (cf->can_id & CAN_ERR_FLAG))
memcpy(cf->data, m->msg.can_msg.data, cf->len);
+ /* only frames which are neither RTR nor ERR have a payload */
+ else
+ stats->rx_bytes += cf->len;
/* don't count error frames as real packets */
- if (!(cf->can_id & CAN_ERR_FLAG)) {
+ if (!(cf->can_id & CAN_ERR_FLAG))
stats->rx_packets++;
- stats->rx_bytes += cf->len;
- }
/* pass it to Linux */
netif_rx(skb);