]> git.baikalelectronics.ru Git - kernel.git/commit
net: dsa: mv88e6xxx: Fix receive time stamp race condition.
authorRichard Cochran <richardcochran@gmail.com>
Mon, 9 Apr 2018 07:03:14 +0000 (00:03 -0700)
committerDavid S. Miller <davem@davemloft.net>
Fri, 13 Apr 2018 02:05:58 +0000 (22:05 -0400)
commit09fa3234bad8cafe59620ceb96206160a76dc49b
treec5bf8d47369ed3f8388ece5d315a072ae66e6e64
parentffffef26a552c6e18b9db93afe38125d8db0cd9a
net: dsa: mv88e6xxx: Fix receive time stamp race condition.

The DSA stack passes received PTP frames to this driver via
mv88e6xxx_port_rxtstamp() for deferred delivery.  The driver then
queues the frame and kicks the worker thread.  The work callback reads
out the latched receive time stamp and then works through the queue,
delivering any non-matching frames without a time stamp.

If a new frame arrives after the worker thread has read out the time
stamp register but enters the queue before the worker finishes
processing the queue, that frame will be delivered without a time
stamp.

This patch fixes the race by moving the queue onto a list on the stack
before reading out the latched time stamp value.

Fixes: 10737d723f3e7 ("net: dsa: mv88e6xxx: add rx/tx timestamping support")
Signed-off-by: Richard Cochran <richardcochran@gmail.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/dsa/mv88e6xxx/hwtstamp.c