All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH net v4 0/3] tcp: fix handling of stale syncookies timestamps
@ 2019-12-06 11:38 Guillaume Nault
  2019-12-06 11:38 ` [PATCH net v4 1/3] tcp: fix rejected syncookies due to stale timestamps Guillaume Nault
                   ` (3 more replies)
  0 siblings, 4 replies; 6+ messages in thread
From: Guillaume Nault @ 2019-12-06 11:38 UTC (permalink / raw)
  To: David Miller, Jakub Kicinski
  Cc: netdev, Eric Dumazet, Arnd Bergmann, John Stultz, Thomas Gleixner

The synflood timestamps (->ts_recent_stamp and ->synq_overflow_ts) are
only refreshed when the syncookie protection triggers. Therefore, their
value can become very far apart from jiffies if no synflood happens for
a long time.

If jiffies grows too much and wraps while the synflood timestamp isn't
refreshed, then time_after32() might consider the later to be in the
future. This can trick tcp_synq_no_recent_overflow() into returning
erroneous values and rejecting valid ACKs.

Patch 1 handles the case of ACKs using legitimate syncookies.
Patch 2 handles the case of stray ACKs.
Patch 3 annotates lockless timestamp operations with READ_ONCE() and
WRITE_ONCE().

Changes from v3:
  - Fix description of time_between32() (found by Eric Dumazet).
  - Use more accurate Fixes tag in patch 3 (suggested by Eric Dumazet).

Changes from v2:
  - Define and use time_between32() instead of a pair of
    time_before32/time_after32 (suggested by Eric Dumazet).
  - Use 'last_overflow - HZ' as lower bound in
    tcp_synq_no_recent_overflow(), to accommodate for concurrent
    timestamp updates (found by Eric Dumazet).
  - Add a third patch to annotate lockless accesses to .ts_recent_stamp.

Changes from v1:
  - Initialising timestamps at socket creation time is not enough
    because jiffies wraps in 24 days with HZ=1000 (Eric Dumazet).
    Handle stale timestamps in tcp_synq_overflow() and
    tcp_synq_no_recent_overflow() instead.
  - Rework commit description.
  - Add a second patch to handle the case of stray ACKs.

Guillaume Nault (3):
  tcp: fix rejected syncookies due to stale timestamps
  tcp: tighten acceptance of ACKs not matching a child socket
  tcp: Protect accesses to .ts_recent_stamp with {READ,WRITE}_ONCE()

 include/linux/time.h | 13 +++++++++++++
 include/net/tcp.h    | 27 +++++++++++++++++++--------
 2 files changed, 32 insertions(+), 8 deletions(-)

-- 
2.21.0


^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2019-12-07  5:06 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2019-12-06 11:38 [PATCH net v4 0/3] tcp: fix handling of stale syncookies timestamps Guillaume Nault
2019-12-06 11:38 ` [PATCH net v4 1/3] tcp: fix rejected syncookies due to stale timestamps Guillaume Nault
2019-12-07  1:49   ` Eric Dumazet
2019-12-06 11:38 ` [PATCH net v4 2/3] tcp: tighten acceptance of ACKs not matching a child socket Guillaume Nault
2019-12-06 11:38 ` [PATCH net v4 3/3] tcp: Protect accesses to .ts_recent_stamp with {READ,WRITE}_ONCE() Guillaume Nault
2019-12-07  5:06 ` [PATCH net v4 0/3] tcp: fix handling of stale syncookies timestamps David Miller

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.