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/usb | |
| 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/usb')
| -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, |
