kmalloc: Fix out of memory not being handled
DONE:
@@ -59,6 +59,7 @@ void *_kmalloc_alloc(u8 hdridx, u8 idx)
vm_zone_t *z = kmalloc_common.sizes[idx];
b = _vm_zalloc(z, NULL);
+ if (b != NULL) {
kmalloc_common.allocsz += (1 << idx);
if (idx == hdridx)
@@ -68,6 +69,7 @@ void *_kmalloc_alloc(u8 hdridx, u8 idx)
LIST_REMOVE(&kmalloc_common.sizes[idx], z);
LIST_ADD(&kmalloc_common.used, z);
}
+ }
return b;
}
@@ -109,6 +111,9 @@ int _kmalloc_addZone(u8 hdridx, u8 idx)
vm_zone_t *nz;
nz = _kmalloc_alloc(hdridx, hdridx);
+ if (nz == NULL) {
+ return -ENOMEM;
+ }
/* Add new zone */
if (_vm_zoneCreate(nz, 1 << idx, max(((idx == hdridx) ? kmalloc_common.zonehdrs : 1), SIZE_PAGE / (1 << idx))) < 0) {
