|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [win-pv-devel] [PATCH 3/3] Fix austere allocator when small heap list head is NULL
Signed-off-by: Owen Smith <owen.smith@xxxxxxxxxx>
---
src/xencrsh/austere.c | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/src/xencrsh/austere.c b/src/xencrsh/austere.c
index 6851475..e00a329 100644
--- a/src/xencrsh/austere.c
+++ b/src/xencrsh/austere.c
@@ -130,7 +130,7 @@ retry:
Res = (PVOID)(AustereHeap.BigHeapStart + i * PAGE_SIZE);
if (AustereHeap.HeapBlockSizes[i] != (NumPages | FREE_CHUNK)) {
- if (i + NumPages <= AUSTERE_HEAP_PAGES)
+ if (i + NumPages != AUSTERE_HEAP_PAGES)
AustereHeap.HeapBlockSizes[i + NumPages] =
AustereHeap.HeapBlockSizes[i] - NumPages;
}
AustereHeap.HeapBlockSizes[i] = NumPages;
@@ -262,7 +262,8 @@ __AllocSmall(
SubHeap->Next->Prev = SubHeap->Prev;
SubHeap->Prev = NULL;
SubHeap->Next = AustereHeap.HeadSubHeap;
- AustereHeap.HeadSubHeap->Prev = SubHeap;
+ if (AustereHeap.HeadSubHeap)
+ AustereHeap.HeadSubHeap->Prev = SubHeap;
AustereHeap.HeadSubHeap = SubHeap;
}
return Res;
@@ -328,7 +329,8 @@ __FreeSmall(
SubHeap->Next->Prev = SubHeap->Prev;
SubHeap->Prev = NULL;
SubHeap->Next = AustereHeap.HeadSubHeap;
- AustereHeap.HeadSubHeap->Prev = SubHeap;
+ if (AustereHeap.HeadSubHeap)
+ AustereHeap.HeadSubHeap->Prev = SubHeap;
AustereHeap.HeadSubHeap = SubHeap;
}
}
@@ -379,6 +381,9 @@ __AustereAllocate(
{
PVOID Res;
+ if (Size < sizeof(PVOID))
+ Size = sizeof(PVOID);
+
if (Size > AUSTERE_MAX_ALLOC_SIZE) {
LogError("%s failing alloc of %d bytes (%d maximum)\n", Caller, Size,
AUSTERE_MAX_ALLOC_SIZE);
return NULL;
--
1.9.4.msysgit.1
_______________________________________________
win-pv-devel mailing list
win-pv-devel@xxxxxxxxxxxxxxxxxxxx
http://lists.xenproject.org/cgi-bin/mailman/listinfo/win-pv-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |