[ros-diffs] [arty] 35449: Fix a leak when doing an immediate reply to a small packet (could be PSH|ACK with < 50 bytes, ACK|FIN, RST or similar).

arty at svn.reactos.org arty at svn.reactos.org
Tue Aug 19 14:39:47 CEST 2008


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/oskittcp/tcp_subr.c?rev=35449&r1=35448&r2=35449&view=diff
==============================================================================
--- 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
 }
 
 /*



More information about the Ros-diffs mailing list