svn commit: r195196 - stable/6/sys/netinet
Attilio Rao
attilio at FreeBSD.org
Tue Jun 30 15:23:17 UTC 2009
Author: attilio
Date: Tue Jun 30 15:23:16 2009
New Revision: 195196
URL: http://svn.freebsd.org/changeset/base/195196
Log:
If the table is empty we can end up with a NULL pointer.
Handle that case trying to free and re-allocate a new object for the
timerqueue, managing unallocations.
This is not an issue on 7 and further branches.
Submitted by: emaste
Sponsored by: Sandvine Incorporated
Reported by: Kyle Larose <no e-mail available>
Modified:
stable/6/sys/netinet/tcp_syncache.c
Modified: stable/6/sys/netinet/tcp_syncache.c
==============================================================================
--- stable/6/sys/netinet/tcp_syncache.c Tue Jun 30 14:34:06 2009 (r195195)
+++ stable/6/sys/netinet/tcp_syncache.c Tue Jun 30 15:23:16 2009 (r195196)
@@ -891,13 +891,15 @@ syncache_add(inc, to, th, sop, m)
/* NB: guarded by INP_INFO_WLOCK(&tcbinfo) */
for (i = SYNCACHE_MAXREXMTS; i >= 0; i--) {
sc = TAILQ_FIRST(&tcp_syncache.timerq[i]);
- if (sc != NULL)
+ if (sc != NULL) {
+ sc->sc_tp->ts_recent = ticks;
+ syncache_drop(sc, NULL);
+ tcpstat.tcps_sc_zonefail++;
+ sc = uma_zalloc(tcp_syncache.zone, M_NOWAIT |
+ M_ZERO);
break;
+ }
}
- sc->sc_tp->ts_recent = ticks;
- syncache_drop(sc, NULL);
- tcpstat.tcps_sc_zonefail++;
- sc = uma_zalloc(tcp_syncache.zone, M_NOWAIT | M_ZERO);
if (sc == NULL) {
if (ipopts)
(void) m_free(ipopts);
More information about the svn-src-all
mailing list