+/*
+ * Routine: kcdata_bzero
+ * Desc: zero out a portion of a kcdata buffer.
+ */
+kern_return_t
+kcdata_bzero(kcdata_descriptor_t data, mach_vm_address_t dst_addr, uint32_t size)
+{
+ kern_return_t kr = KERN_SUCCESS;
+ if (data->kcd_flags & KCFLAG_USE_COPYOUT) {
+ uint8_t zeros[16] = {};
+ while (size) {
+ uint32_t block_size = MIN(size, 16);
+ kr = copyout(&zeros, dst_addr, block_size);
+ if (kr) {
+ return KERN_NO_ACCESS;
+ }
+ size -= block_size;
+ }
+ return KERN_SUCCESS;
+ } else {
+ bzero((void*)dst_addr, size);
+ return KERN_SUCCESS;
+ }
+}
+