Author: arty Date: Tue Aug 19 07:39:46 2008 New Revision: 35449
URL: http://svn.reactos.org/svn/reactos?rev=35449&view=rev Log: Fix a leak when doing an immediate reply to a small packet (could be PSH|ACK with < 50 bytes, ACK|FIN, RST or similar).
Modified: trunk/reactos/lib/drivers/oskittcp/oskittcp/tcp_subr.c
Modified: trunk/reactos/lib/drivers/oskittcp/oskittcp/tcp_subr.c URL: http://svn.reactos.org/svn/reactos/trunk/reactos/lib/drivers/oskittcp/oskitt... ============================================================================== --- trunk/reactos/lib/drivers/oskittcp/oskittcp/tcp_subr.c [iso-8859-1] (original) +++ trunk/reactos/lib/drivers/oskittcp/oskittcp/tcp_subr.c [iso-8859-1] Tue Aug 19 07:39:46 2008 @@ -163,6 +163,7 @@ tcp_seq ack, seq; int flags; { + struct mbuf *n; register int tlen; int win = 0; struct route *ro = 0; @@ -221,6 +222,18 @@ tcp_trace(TA_OUTPUT, 0, tp, ti, 0); #endif (void) ip_output(m, NULL, ro, 0, NULL); +#ifdef __REACTOS__ + /* We allocated m, so we are responsible for freeing it. If the mbuf + contains a pointer to an external datablock, we (or rather, m_copy) + didn't allocate it but pointed it to the data to send. So we have + to cheat a little bit and keep M_FREE from freeing the external + data block */ + while (NULL != m) { + m->m_flags &= ~M_EXT; + MFREE(m, n); + m = n; + } +#endif }
/*