Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit cd4d8fda authored by Patrick Ohly's avatar Patrick Ohly Committed by David S. Miller
Browse files

net: kernel panic in dev_hard_start_xmit: remove faulty software TX time stamping



The current implementation of the TX software time stamping fallback is
faulty because it accesses the skb after ndo_start_xmit() returns
successfully. This patch removes the fallback, which fixes kernel panics
seen during stress tests. Hardware time stamping is not affected by this
removal.

Signed-off-by: default avatarPatrick Ohly <patrick.ohly@intel.com>
Signed-off-by: default avatarEmil Tantilov <emil.s.tantilov@intel.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent be0c22a4
Loading
Loading
Loading
Loading
+0 −13
Original line number Diff line number Diff line
@@ -1672,16 +1672,6 @@ static int dev_gso_segment(struct sk_buff *skb)
	return 0;
}

static void tstamp_tx(struct sk_buff *skb)
{
	union skb_shared_tx *shtx =
		skb_tx(skb);
	if (unlikely(shtx->software &&
			!shtx->in_progress)) {
		skb_tstamp_tx(skb, NULL);
	}
}

int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
			struct netdev_queue *txq)
{
@@ -1715,8 +1705,6 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
		 * the skb destructor before the call and restoring it
		 * afterwards, then doing the skb_orphan() ourselves?
		 */
		if (likely(!rc))
			tstamp_tx(skb);
		return rc;
	}

@@ -1732,7 +1720,6 @@ int dev_hard_start_xmit(struct sk_buff *skb, struct net_device *dev,
			skb->next = nskb;
			return rc;
		}
		tstamp_tx(skb);
		if (unlikely(netif_tx_queue_stopped(txq) && skb->next))
			return NETDEV_TX_BUSY;
	} while (skb->next);