| From foo@baz Mon Jan 13 09:39:01 PST 2014 |
| From: Eric Dumazet <edumazet@google.com> |
| Date: Thu, 19 Dec 2013 10:53:02 -0800 |
| Subject: net: fec: fix potential use after free |
| |
| From: Eric Dumazet <edumazet@google.com> |
| |
| [ Upstream commit 7a2a84518cfb263d2c4171b3d63671f88316adb2 ] |
| |
| skb_tx_timestamp(skb) should be called _before_ TX completion |
| has a chance to trigger, otherwise it is too late and we access |
| freed memory. |
| |
| Signed-off-by: Eric Dumazet <edumazet@google.com> |
| Fixes: de5fb0a05348 ("net: fec: put tx to napi poll function to fix dead lock") |
| Cc: Frank Li <Frank.Li@freescale.com> |
| Cc: Richard Cochran <richardcochran@gmail.com> |
| Acked-by: Richard Cochran <richardcochran@gmail.com> |
| Acked-by: Frank Li <Frank.Li@freescale.com> |
| Signed-off-by: David S. Miller <davem@davemloft.net> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/net/ethernet/freescale/fec_main.c | 4 ++-- |
| 1 file changed, 2 insertions(+), 2 deletions(-) |
| |
| --- a/drivers/net/ethernet/freescale/fec_main.c |
| +++ b/drivers/net/ethernet/freescale/fec_main.c |
| @@ -371,6 +371,8 @@ fec_enet_start_xmit(struct sk_buff *skb, |
| else |
| bdp = fec_enet_get_nextdesc(bdp, fep->bufdesc_ex); |
| |
| + skb_tx_timestamp(skb); |
| + |
| fep->cur_tx = bdp; |
| |
| if (fep->cur_tx == fep->dirty_tx) |
| @@ -379,8 +381,6 @@ fec_enet_start_xmit(struct sk_buff *skb, |
| /* Trigger transmission start */ |
| writel(0, fep->hwp + FEC_X_DES_ACTIVE); |
| |
| - skb_tx_timestamp(skb); |
| - |
| return NETDEV_TX_OK; |
| } |
| |