diff options
author | Oliver Hartkopp <oliver@hartkopp.net> | 2010-01-12 05:00:46 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-01-12 05:00:46 -0500 |
commit | 3ccd4c6167d3b39d52631767ebbf8b5677c5855d (patch) | |
tree | bfcb801edebd00e8b30e897038bad7fee39625cc /drivers/net/can/ti_hecc.c | |
parent | d218d11133d888f9745802146a50255a4781d37a (diff) |
can: Unify droping of invalid tx skbs and netdev stats
To prevent the CAN drivers to operate on invalid socketbuffers the skbs are
now checked and silently dropped at the xmit-function consistently.
Also the netdev stats are consistently using the CAN data length code (dlc)
for [rx|tx]_bytes now.
Signed-off-by: Oliver Hartkopp <oliver@hartkopp.net>
Acked-by: Wolfgang Grandegger <wg@grandegger.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'drivers/net/can/ti_hecc.c')
-rw-r--r-- | drivers/net/can/ti_hecc.c | 4 |
1 files changed, 3 insertions, 1 deletions
diff --git a/drivers/net/can/ti_hecc.c b/drivers/net/can/ti_hecc.c index 5c993c2da528..7d370e32a7a8 100644 --- a/drivers/net/can/ti_hecc.c +++ b/drivers/net/can/ti_hecc.c | |||
@@ -477,6 +477,9 @@ static netdev_tx_t ti_hecc_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
477 | u32 mbxno, mbx_mask, data; | 477 | u32 mbxno, mbx_mask, data; |
478 | unsigned long flags; | 478 | unsigned long flags; |
479 | 479 | ||
480 | if (can_dropped_invalid_skb(ndev, skb)) | ||
481 | return NETDEV_TX_OK; | ||
482 | |||
480 | mbxno = get_tx_head_mb(priv); | 483 | mbxno = get_tx_head_mb(priv); |
481 | mbx_mask = BIT(mbxno); | 484 | mbx_mask = BIT(mbxno); |
482 | spin_lock_irqsave(&priv->mbx_lock, flags); | 485 | spin_lock_irqsave(&priv->mbx_lock, flags); |
@@ -491,7 +494,6 @@ static netdev_tx_t ti_hecc_xmit(struct sk_buff *skb, struct net_device *ndev) | |||
491 | spin_unlock_irqrestore(&priv->mbx_lock, flags); | 494 | spin_unlock_irqrestore(&priv->mbx_lock, flags); |
492 | 495 | ||
493 | /* Prepare mailbox for transmission */ | 496 | /* Prepare mailbox for transmission */ |
494 | data = min_t(u8, cf->can_dlc, 8); | ||
495 | if (cf->can_id & CAN_RTR_FLAG) /* Remote transmission request */ | 497 | if (cf->can_id & CAN_RTR_FLAG) /* Remote transmission request */ |
496 | data |= HECC_CANMCF_RTR; | 498 | data |= HECC_CANMCF_RTR; |
497 | data |= get_tx_head_prio(priv) << 8; | 499 | data |= get_tx_head_prio(priv) << 8; |