From 9d35a686ab7dcb57b181a2c6596db2f1ef9a1982 Mon Sep 17 00:00:00 2001 From: Mathieu Maret Date: Fri, 12 Nov 2021 10:19:43 +0100 Subject: [PATCH] Fix few issues/leaks --- arch/x86/mmuContext.c | 4 +++- arch/x86/paging.c | 2 +- core/allocArea.c | 20 ++++++++++---------- 3 files changed, 14 insertions(+), 12 deletions(-) diff --git a/arch/x86/mmuContext.c b/arch/x86/mmuContext.c index 9a8438f..2cdf716 100644 --- a/arch/x86/mmuContext.c +++ b/arch/x86/mmuContext.c @@ -43,8 +43,10 @@ int mmuContextSetup() ret = pageMap(initialCtx->vaddr_PD, initialCtx->paddr_PD, PAGING_MEM_WRITE | PAGING_MEM_READ); - if (ret) + if (ret){ + free(initialCtx); return ret; + } list_singleton(listContext, initialCtx); currentContext = initialCtx; diff --git a/arch/x86/paging.c b/arch/x86/paging.c index 949dd36..e880178 100644 --- a/arch/x86/paging.c +++ b/arch/x86/paging.c @@ -314,7 +314,7 @@ int pagingCopyKernelSpace(vaddr_t destVaddrPD, paddr_t destPaddrPD, vaddr_t srcV { struct pde *src_pd = (struct pde *)srcVaddrPD; struct pde *dest_pd = (struct pde *)destVaddrPD; - struct pde mirror_pde; + struct pde mirror_pde = {0}; uint index_in_pd; /* Fill destination PD with zeros */ diff --git a/core/allocArea.c b/core/allocArea.c index 67945d0..ca4ce5c 100644 --- a/core/allocArea.c +++ b/core/allocArea.c @@ -10,7 +10,7 @@ static struct memArea *freeArea; static struct memArea *usedArea; -static int areaMergeFreeArea(struct memArea *prev, struct memArea *next); +static int areaMergeFreeArea(struct memArea *prev, struct memArea **next); void areaInit(vaddr_t firstMemUsed, vaddr_t lastUsed, vaddr_t stackBottom, vaddr_t stackTop) { @@ -214,26 +214,26 @@ int areaAdd(vaddr_t start, vaddr_t end, int isFree) if (isFree) { if (newArea->prev) - areaMergeFreeArea(newArea->prev, *area); + areaMergeFreeArea(newArea->prev, area); if (newArea->next) - areaMergeFreeArea(*area, newArea->next); + areaMergeFreeArea(*area, &(newArea->next)); } return 0; } -static int areaMergeFreeArea(struct memArea *prev, struct memArea *next) +static int areaMergeFreeArea(struct memArea *prev, struct memArea **next) { - if (prev->startAddr + prev->nbPages * PAGE_SIZE != next->startAddr) { + if (prev->startAddr + prev->nbPages * PAGE_SIZE != (*next)->startAddr) { return -1; } - prev->nbPages += next->nbPages; - list_delete(freeArea, next); + prev->nbPages += (*next)->nbPages; + list_delete(freeArea, *next); free(next); - next = prev; + *next = prev; return 0; } @@ -269,10 +269,10 @@ int areaFree(vaddr_t addr) insertSorted(&freeArea, area); if (area->prev) - areaMergeFreeArea(area->prev, area); + areaMergeFreeArea(area->prev, &area); if (area->next) - areaMergeFreeArea(area, area->next); + areaMergeFreeArea(area, &(area->next)); return 0; }