diff options
author | Ahmed S. Darwish <ahmed.darwish@valeo.com> | 2015-01-11 15:49:52 -0500 |
---|---|---|
committer | Marc Kleine-Budde <mkl@pengutronix.de> | 2015-01-15 10:58:02 -0500 |
commit | a58518ccf39f86f898a65201518dd8e799b3abeb (patch) | |
tree | 3c42597cfdbb112cbeeddf0a94b2a79513a9b045 /drivers/net/can | |
parent | 5e7e6e0c9b47a45576c38b4a72d67927a5e049f7 (diff) |
can: kvaser_usb: Don't dereference skb after a netif_rx()
We should not touch the packet after a netif_rx: it might
get freed behind our back.
Suggested-by: Marc Kleine-Budde <mkl@pengutronix.de>
Signed-off-by: Ahmed S. Darwish <ahmed.darwish@valeo.com>
Signed-off-by: Marc Kleine-Budde <mkl@pengutronix.de>
Diffstat (limited to 'drivers/net/can')
-rw-r--r-- | drivers/net/can/usb/kvaser_usb.c | 11 |
1 files changed, 4 insertions, 7 deletions
diff --git a/drivers/net/can/usb/kvaser_usb.c b/drivers/net/can/usb/kvaser_usb.c index cc7bfc0c0a71..c32cd61073bc 100644 --- a/drivers/net/can/usb/kvaser_usb.c +++ b/drivers/net/can/usb/kvaser_usb.c | |||
@@ -520,10 +520,10 @@ static void kvaser_usb_tx_acknowledge(const struct kvaser_usb *dev, | |||
520 | skb = alloc_can_err_skb(priv->netdev, &cf); | 520 | skb = alloc_can_err_skb(priv->netdev, &cf); |
521 | if (skb) { | 521 | if (skb) { |
522 | cf->can_id |= CAN_ERR_RESTARTED; | 522 | cf->can_id |= CAN_ERR_RESTARTED; |
523 | netif_rx(skb); | ||
524 | 523 | ||
525 | stats->rx_packets++; | 524 | stats->rx_packets++; |
526 | stats->rx_bytes += cf->can_dlc; | 525 | stats->rx_bytes += cf->can_dlc; |
526 | netif_rx(skb); | ||
527 | } else { | 527 | } else { |
528 | netdev_err(priv->netdev, | 528 | netdev_err(priv->netdev, |
529 | "No memory left for err_skb\n"); | 529 | "No memory left for err_skb\n"); |
@@ -770,10 +770,9 @@ static void kvaser_usb_rx_error(const struct kvaser_usb *dev, | |||
770 | 770 | ||
771 | priv->can.state = new_state; | 771 | priv->can.state = new_state; |
772 | 772 | ||
773 | netif_rx(skb); | ||
774 | |||
775 | stats->rx_packets++; | 773 | stats->rx_packets++; |
776 | stats->rx_bytes += cf->can_dlc; | 774 | stats->rx_bytes += cf->can_dlc; |
775 | netif_rx(skb); | ||
777 | } | 776 | } |
778 | 777 | ||
779 | static void kvaser_usb_rx_can_err(const struct kvaser_usb_net_priv *priv, | 778 | static void kvaser_usb_rx_can_err(const struct kvaser_usb_net_priv *priv, |
@@ -805,10 +804,9 @@ static void kvaser_usb_rx_can_err(const struct kvaser_usb_net_priv *priv, | |||
805 | stats->rx_over_errors++; | 804 | stats->rx_over_errors++; |
806 | stats->rx_errors++; | 805 | stats->rx_errors++; |
807 | 806 | ||
808 | netif_rx(skb); | ||
809 | |||
810 | stats->rx_packets++; | 807 | stats->rx_packets++; |
811 | stats->rx_bytes += cf->can_dlc; | 808 | stats->rx_bytes += cf->can_dlc; |
809 | netif_rx(skb); | ||
812 | } | 810 | } |
813 | } | 811 | } |
814 | 812 | ||
@@ -887,10 +885,9 @@ static void kvaser_usb_rx_can_msg(const struct kvaser_usb *dev, | |||
887 | cf->can_dlc); | 885 | cf->can_dlc); |
888 | } | 886 | } |
889 | 887 | ||
890 | netif_rx(skb); | ||
891 | |||
892 | stats->rx_packets++; | 888 | stats->rx_packets++; |
893 | stats->rx_bytes += cf->can_dlc; | 889 | stats->rx_bytes += cf->can_dlc; |
890 | netif_rx(skb); | ||
894 | } | 891 | } |
895 | 892 | ||
896 | static void kvaser_usb_start_chip_reply(const struct kvaser_usb *dev, | 893 | static void kvaser_usb_start_chip_reply(const struct kvaser_usb *dev, |