svn commit: r352228 - head/sys/netinet

Andrew Gallatin gallatin at FreeBSD.org
Wed Sep 11 18:48:26 UTC 2019


Author: gallatin
Date: Wed Sep 11 18:48:26 2019
New Revision: 352228
URL: https://svnweb.freebsd.org/changeset/base/352228

Log:
  Avoid unneeded call to arc4random() in syncache_add()
  
  Don't call arc4random() unconditionally to initialize sc_iss, and
  then when syncookies are enabled, just overwrite it with the
  return value from from syncookie_generate(). Instead, only call
  arc4random() to initialize sc_iss when syncookies are not
  enabled.
  
  Note that on a system under a syn flood attack, arc4random()
  becomes quite expensive, and the chacha_poly crypto that it calls
  is one of the more expensive things happening on the
  system. Removing this unneeded arc4random() call reduces CPU from
  about 40% to about 35% in my test scenario (Broadwell Xeon, 6Mpps
  syn flood attack).
  
  Reviewed by:	rrs, tuxen, bz
  Sponsored by:	Netflix
  Differential Revision:	https://reviews.freebsd.org/D21591

Modified:
  head/sys/netinet/tcp_syncache.c

Modified: head/sys/netinet/tcp_syncache.c
==============================================================================
--- head/sys/netinet/tcp_syncache.c	Wed Sep 11 18:40:05 2019	(r352227)
+++ head/sys/netinet/tcp_syncache.c	Wed Sep 11 18:48:26 2019	(r352228)
@@ -1543,7 +1543,6 @@ skip_alloc:
 	sc->sc_todctx = todctx;
 #endif
 	sc->sc_irs = th->th_seq;
-	sc->sc_iss = arc4random();
 	sc->sc_flags = 0;
 	sc->sc_flowlabel = 0;
 
@@ -1617,6 +1616,8 @@ skip_alloc:
 
 	if (V_tcp_syncookies)
 		sc->sc_iss = syncookie_generate(sch, sc);
+	else
+		sc->sc_iss = arc4random();
 #ifdef INET6
 	if (autoflowlabel) {
 		if (V_tcp_syncookies)


More information about the svn-src-head mailing list