Fixed a memory leakage in MmCreateImageSection.

Fixed a bug in MmNotPresentFaultSectionView.
Removed some wrong calls to ObDereferenceObject in MmMapViewOfSection.

svn path=/trunk/; revision=2941
This commit is contained in:
Hartmut Birr 2002-05-07 22:53:05 +00:00
parent 72d2c10489
commit 0e177cc7b9

View file

@ -16,7 +16,7 @@
* along with this program; if not, write to the Free Software * along with this program; if not, write to the Free Software
* Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. * Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
*/ */
/* $Id: section.c,v 1.79 2002/03/03 19:47:58 ekohl Exp $ /* $Id: section.c,v 1.80 2002/05/07 22:53:05 hbirr Exp $
* *
* PROJECT: ReactOS kernel * PROJECT: ReactOS kernel
* FILE: ntoskrnl/mm/section.c * FILE: ntoskrnl/mm/section.c
@ -526,6 +526,13 @@ MmNotPresentFaultSectionView(PMADDRESS_SPACE AddressSpace,
if (!MmIsPagePresent(NULL, Address)) if (!MmIsPagePresent(NULL, Address))
{ {
Entry = MmGetPageEntrySectionSegment(Segment, Offset.u.LowPart); Entry = MmGetPageEntrySectionSegment(Segment, Offset.u.LowPart);
if (Entry == 0)
{
MmUnlockSectionSegment(Segment);
MmUnlockSection(Section);
MmReleasePageOp(PageOp);
return(STATUS_MM_RESTART_OPERATION);
}
Page = (PVOID)(PAGE_FROM_SSE(Entry)); Page = (PVOID)(PAGE_FROM_SSE(Entry));
MmReferencePage(Page); MmReferencePage(Page);
@ -2283,7 +2290,6 @@ MmCreateImageSection(PHANDLE SectionHandle,
FileObject->SectionObjectPointers->ImageSectionObject = FileObject->SectionObjectPointers->ImageSectionObject =
(PVOID)ImageSectionObject; (PVOID)ImageSectionObject;
ExFreePool(ImageSections);
} }
else else
{ {
@ -2303,6 +2309,7 @@ MmCreateImageSection(PHANDLE SectionHandle,
} }
} }
ExFreePool(ImageSections);
KeSetEvent((PVOID)&FileObject->Lock, IO_NO_INCREMENT, FALSE); KeSetEvent((PVOID)&FileObject->Lock, IO_NO_INCREMENT, FALSE);
Section->FileObject = FileObject; Section->FileObject = FileObject;
@ -2970,8 +2977,6 @@ MmMapViewOfSection(IN PVOID SectionObject,
{ {
MmUnlockSection(Section); MmUnlockSection(Section);
MmUnlockAddressSpace(AddressSpace); MmUnlockAddressSpace(AddressSpace);
ObDereferenceObject(Section);
ObDereferenceObject(Process);
return(Status); return(Status);
} }
} }
@ -2993,8 +2998,6 @@ MmMapViewOfSection(IN PVOID SectionObject,
{ {
MmUnlockSection(Section); MmUnlockSection(Section);
MmUnlockAddressSpace(AddressSpace); MmUnlockAddressSpace(AddressSpace);
ObDereferenceObject(Section);
ObDereferenceObject(Process);
return(STATUS_MAPPED_ALIGNMENT); return(STATUS_MAPPED_ALIGNMENT);
} }
@ -3017,8 +3020,6 @@ MmMapViewOfSection(IN PVOID SectionObject,
{ {
MmUnlockSection(Section); MmUnlockSection(Section);
MmUnlockAddressSpace(AddressSpace); MmUnlockAddressSpace(AddressSpace);
ObDereferenceObject(Section);
ObDereferenceObject(Process);
return(Status); return(Status);
} }
} }