MCPcopy Create free account
hub / github.com/F-Stack/f-stack / ktrstructarray

Function ktrstructarray

freebsd/kern/kern_ktrace.c:794–841  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

792}
793
794void
795ktrstructarray(const char *name, enum uio_seg seg, const void *data,
796 int num_items, size_t struct_size)
797{
798 struct ktr_request *req;
799 struct ktr_struct_array *ksa;
800 char *buf;
801 size_t buflen, datalen, namelen;
802 int max_items;
803
804 if (__predict_false(curthread->td_pflags & TDP_INKTRACE))
805 return;
806
807 /* Trim array length to genio size. */
808 max_items = ktr_geniosize / struct_size;
809 if (num_items > max_items) {
810 if (max_items == 0)
811 num_items = 1;
812 else
813 num_items = max_items;
814 }
815 datalen = num_items * struct_size;
816
817 if (data == NULL)
818 datalen = 0;
819
820 namelen = strlen(name) + 1;
821 buflen = namelen + datalen;
822 buf = malloc(buflen, M_KTRACE, M_WAITOK);
823 strcpy(buf, name);
824 if (seg == UIO_SYSSPACE)
825 bcopy(data, buf + namelen, datalen);
826 else {
827 if (copyin(data, buf + namelen, datalen) != 0) {
828 free(buf, M_KTRACE);
829 return;
830 }
831 }
832 if ((req = ktr_getrequest(KTR_STRUCT_ARRAY)) == NULL) {
833 free(buf, M_KTRACE);
834 return;
835 }
836 ksa = &req->ktr_data.ktr_struct_array;
837 ksa->struct_size = struct_size;
838 req->ktr_buffer = buf;
839 req->ktr_header.ktr_len = buflen;
840 ktr_submitrequest(curthread, req);
841}
842
843void
844ktrcapfail(enum ktr_cap_fail_type type, const cap_rights_t *needed,

Callers 1

kern_kevent_genericFunction · 0.85

Calls 5

mallocFunction · 0.85
ktr_getrequestFunction · 0.85
ktr_submitrequestFunction · 0.85
freeFunction · 0.70
copyinFunction · 0.50

Tested by

no test coverage detected