Loading...
--- xnu/xnu-3789.31.2/libkern/c++/OSData.cpp
+++ xnu/xnu-4903.221.2/libkern/c++/OSData.cpp
@@ -76,8 +76,8 @@
if (inCapacity < page_size) data = (void *) kalloc_container(inCapacity);
else {
kern_return_t kr;
- inCapacity = round_page_32(inCapacity);
- kr = kmem_alloc(kernel_map, (vm_offset_t *)&data, inCapacity, IOMemoryTag(kernel_map));
+ if (round_page_overflow(inCapacity, &inCapacity)) kr = KERN_RESOURCE_SHORTAGE;
+ else kr = kmem_alloc(kernel_map, (vm_offset_t *)&data, inCapacity, IOMemoryTag(kernel_map));
if (KERN_SUCCESS != kr) data = NULL;
}
if (!data)
@@ -289,7 +289,9 @@
if (capacity == EXTERNAL)
return false;
- newSize = length + inLength;
+ if (os_add_overflow(length, inLength, &newSize))
+ return false;
+
if ( (newSize > capacity) && newSize > ensureCapacity(newSize) )
return false;
@@ -313,7 +315,9 @@
if (capacity == EXTERNAL)
return false;
- newSize = length + inLength;
+ if (os_add_overflow(length, inLength, &newSize))
+ return false;
+
if ( (newSize > capacity) && newSize > ensureCapacity(newSize) )
return false;