mirror of
https://github.com/reactos/reactos.git
synced 2025-02-24 01:15:09 +00:00
[IP] Avoid use-after-free of IPDATAGRAM_REASSEMBLY structures. By Roel Messiant. CORE-11889
svn path=/trunk/; revision=72672
This commit is contained in:
parent
d87e3543c1
commit
7d478eb667
1 changed files with 5 additions and 3 deletions
|
@ -489,21 +489,23 @@ VOID IPFreeReassemblyList(
|
||||||
*/
|
*/
|
||||||
{
|
{
|
||||||
KIRQL OldIrql;
|
KIRQL OldIrql;
|
||||||
PLIST_ENTRY CurrentEntry;
|
PLIST_ENTRY CurrentEntry, NextEntry;
|
||||||
PIPDATAGRAM_REASSEMBLY Current;
|
PIPDATAGRAM_REASSEMBLY Current;
|
||||||
|
|
||||||
TcpipAcquireSpinLock(&ReassemblyListLock, &OldIrql);
|
TcpipAcquireSpinLock(&ReassemblyListLock, &OldIrql);
|
||||||
|
|
||||||
CurrentEntry = ReassemblyListHead.Flink;
|
CurrentEntry = ReassemblyListHead.Flink;
|
||||||
while (CurrentEntry != &ReassemblyListHead) {
|
while (CurrentEntry != &ReassemblyListHead) {
|
||||||
Current = CONTAINING_RECORD(CurrentEntry, IPDATAGRAM_REASSEMBLY, ListEntry);
|
NextEntry = CurrentEntry->Flink;
|
||||||
|
Current = CONTAINING_RECORD(CurrentEntry, IPDATAGRAM_REASSEMBLY, ListEntry);
|
||||||
|
|
||||||
/* Unlink it from the list */
|
/* Unlink it from the list */
|
||||||
RemoveEntryList(CurrentEntry);
|
RemoveEntryList(CurrentEntry);
|
||||||
|
|
||||||
/* And free the descriptor */
|
/* And free the descriptor */
|
||||||
FreeIPDR(Current);
|
FreeIPDR(Current);
|
||||||
|
|
||||||
CurrentEntry = CurrentEntry->Flink;
|
CurrentEntry = NextEntry;
|
||||||
}
|
}
|
||||||
|
|
||||||
TcpipReleaseSpinLock(&ReassemblyListLock, OldIrql);
|
TcpipReleaseSpinLock(&ReassemblyListLock, OldIrql);
|
||||||
|
|
Loading…
Reference in a new issue