Loading...
--- xnu/xnu-12377.101.15/libkern/c++/OSArray.cpp
+++ xnu/xnu-8020.101.4/libkern/c++/OSArray.cpp
@@ -72,6 +72,8 @@
count = 0;
capacity = inCapacity;
capacityIncrement = (inCapacity)? inCapacity : 16;
+
+ os::uninitialized_value_construct(array, array + capacity);
OSCONTAINER_ACCUMSIZE(sizeof(*array) * inCapacity);
return true;
@@ -220,10 +222,14 @@
return capacity;
}
- newArray = kreallocp_type_container(ArrayPtrType, array,
- capacity, &finalCapacity, Z_WAITOK_ZERO);
+ newArray = kallocp_type_container(ArrayPtrType, &finalCapacity, Z_WAITOK);
if (newArray) {
OSCONTAINER_ACCUMSIZE(sizeof(*array) * (finalCapacity - capacity));
+
+ os::uninitialized_move(array, array + capacity, newArray);
+ os::uninitialized_value_construct(newArray + capacity, newArray + finalCapacity);
+ os::destroy(array, array + capacity);
+ kfree_type(ArrayPtrType, capacity, array);
array = newArray;
capacity = finalCapacity;
}