diff options
-rw-r--r-- | src/wsbm_manager.c | 13 | ||||
-rw-r--r-- | src/wsbm_slabpool.c | 4 |
2 files changed, 12 insertions, 5 deletions
diff --git a/src/wsbm_manager.c b/src/wsbm_manager.c index 0cbf9de..877abc6 100644 --- a/src/wsbm_manager.c +++ b/src/wsbm_manager.c @@ -1015,15 +1015,18 @@ wsbmBOCreateList(int target, int hasKernelBuffers) return NULL; list->hasKernelBuffers = hasKernelBuffers; if (hasKernelBuffers) { - ret = validateCreateList(target, &list->kernelBuffers, 0); - if (ret) - return NULL; + ret = validateCreateList(target, &list->kernelBuffers, 0); + if (ret) { + free(list); + return NULL; + } } ret = validateCreateList(target, &list->userBuffers, 1); if (ret) { - validateFreeList(&list->kernelBuffers); - return NULL; + validateFreeList(&list->kernelBuffers); + free(list); + return NULL; } return list; diff --git a/src/wsbm_slabpool.c b/src/wsbm_slabpool.c index ec6638b..1e551e3 100644 --- a/src/wsbm_slabpool.c +++ b/src/wsbm_slabpool.c @@ -463,6 +463,10 @@ wsbmAllocSlab(struct _WsbmSlabSizeHeader *header) } numBuffers = slab->kbo->actualSize / header->bufSize; + if (!numBuffers) { + ret = -ENOMEM; + goto out_err1; + } slab->buffers = calloc(numBuffers, sizeof(*slab->buffers)); if (!slab->buffers) { |