mirror of
https://github.com/reactos/reactos.git
synced 2024-09-11 05:12:43 +00:00
Fix a leak when doing an immediate reply to a small packet (could be PSH|ACK
with < 50 bytes, ACK|FIN, RST or similar). svn path=/trunk/; revision=35449
This commit is contained in:
parent
524d084d4d
commit
1d8b6343f6
|
@ -163,6 +163,7 @@ tcp_respond(tp, ti, m, ack, seq, flags)
|
||||||
tcp_seq ack, seq;
|
tcp_seq ack, seq;
|
||||||
int flags;
|
int flags;
|
||||||
{
|
{
|
||||||
|
struct mbuf *n;
|
||||||
register int tlen;
|
register int tlen;
|
||||||
int win = 0;
|
int win = 0;
|
||||||
struct route *ro = 0;
|
struct route *ro = 0;
|
||||||
|
@ -221,6 +222,18 @@ tcp_respond(tp, ti, m, ack, seq, flags)
|
||||||
tcp_trace(TA_OUTPUT, 0, tp, ti, 0);
|
tcp_trace(TA_OUTPUT, 0, tp, ti, 0);
|
||||||
#endif
|
#endif
|
||||||
(void) ip_output(m, NULL, ro, 0, NULL);
|
(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
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
Loading…
Reference in a new issue