[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [PATCH xenvif] Don't pass MM_DONT_ZERO_ALLOCATION to MmAllocatePagesForMdlEx()...
From: Paul Durrant <pdurrant@xxxxxxxxxx> ...in __AllocatePages() See commit 4f85d004 "Replace uses of MmAllocatePagesForMdlEx in __AllocatePage" for more background. In summary, it is to avoid BSOD 139 1e with a stack similar to the following: nt!KeBugCheckEx nt!KiBugCheckDispatch+0x69 nt!KiFastFailDispatch+0xd0 nt!KiRaiseSecurityCheckFailure+0x30e nt!KiAcquireThreadStateLock+0x11fa90 nt!KeSetIdealProcessorThreadEx+0xd0 nt!MiZeroInParallelWorker+0x115016 nt!MiZeroInParallel+0x11c nt!MiInitializeMdlBatchPages+0x2ae nt!MiAllocatePagesForMdl+0x192 nt!MmAllocatePartitionNodePagesForMdlEx+0xc9 nt!MmAllocatePagesForMdlEx+0x4d These bugchecks have been observed in recent updates of Server 2019. This patch, rather than replacing calls to MmAllocatePagesForMdlEx() with calls to MmMapLockedPagesSpecifyCache(), just avoids passing MM_DONT_ZERO_ALLOCATION to work round the bug. The patch instead passes MM_ALLOCATE_FULLY_REQUIRED, which arguably should have always been passed for allocations larger than a single page. It also fixes a formatting issue. Reported-by: Jan Bakuwel <jan.bakuwel@xxxxxxxxx> Signed-off-by: Paul Durrant <pdurrant@xxxxxxxxxx> --- This fix will also be propogated to all other PV drivers. --- src/xenvif/util.h | 18 +++++------------- 1 file changed, 5 insertions(+), 13 deletions(-) diff --git a/src/xenvif/util.h b/src/xenvif/util.h index 30322d8..74d0436 100644 --- a/src/xenvif/util.h +++ b/src/xenvif/util.h @@ -192,7 +192,7 @@ __AllocatePages( SkipBytes, TotalBytes, MmCached, - MM_DONT_ZERO_ALLOCATION); + MM_ALLOCATE_FULLY_REQUIRED); status = STATUS_NO_MEMORY; if (Mdl == NULL) @@ -210,10 +210,10 @@ __AllocatePages( MdlMappedSystemVa = MmMapLockedPagesSpecifyCache(Mdl, KernelMode, - MmCached, - NULL, - FALSE, - NormalPagePriority); + MmCached, + NULL, + FALSE, + NormalPagePriority); status = STATUS_UNSUCCESSFUL; if (MdlMappedSystemVa == NULL) @@ -225,22 +225,14 @@ __AllocatePages( ASSERT3P(Mdl->StartVa, ==, MdlMappedSystemVa); ASSERT3P(Mdl->MappedSystemVa, ==, MdlMappedSystemVa); - RtlZeroMemory(MdlMappedSystemVa, Mdl->ByteCount); - return Mdl; fail3: - Error("fail3\n"); - fail2: - Error("fail2\n"); - MmFreePagesFromMdl(Mdl); ExFreePool(Mdl); fail1: - Error("fail1 (%08x)\n", status); - return NULL; } -- 2.17.1
|
Lists.xenproject.org is hosted with RackSpace, monitoring our |