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/oskit…
==============================================================================
--- 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
}
/*