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

Function crypto_cursor_copydata

freebsd/opencrypto/criov.c:468–548  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

466}
467
468void
469crypto_cursor_copydata(struct crypto_buffer_cursor *cc, int size, void *vdst)
470{
471 size_t remain, todo;
472 const char *src;
473 char *dst;
474
475 dst = vdst;
476 switch (cc->cc_type) {
477 case CRYPTO_BUF_CONTIG:
478 MPASS(cc->cc_buf_len >= size);
479 memcpy(dst, cc->cc_buf, size);
480 cc->cc_buf += size;
481 cc->cc_buf_len -= size;
482 break;
483 case CRYPTO_BUF_MBUF:
484 for (;;) {
485 KASSERT((cc->cc_mbuf->m_flags & M_EXTPG) == 0,
486 ("%s: not supported for unmapped mbufs", __func__));
487 src = mtod(cc->cc_mbuf, const char *) + cc->cc_offset;
488 remain = cc->cc_mbuf->m_len - cc->cc_offset;
489 todo = MIN(remain, size);
490 memcpy(dst, src, todo);
491 dst += todo;
492 if (todo < remain) {
493 cc->cc_offset += todo;
494 break;
495 }
496 size -= todo;
497 cc->cc_mbuf = cc->cc_mbuf->m_next;
498 cc->cc_offset = 0;
499 if (size == 0)
500 break;
501 }
502 break;
503 case CRYPTO_BUF_VMPAGE:
504 for (;;) {
505 src = (char *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(
506 *cc->cc_vmpage)) + cc->cc_offset;
507 remain = MIN(PAGE_SIZE - cc->cc_offset, cc->cc_buf_len);
508 todo = MIN(remain, size);
509 memcpy(dst, src, todo);
510 src += todo;
511 cc->cc_buf_len -= todo;
512 if (todo < remain) {
513 cc->cc_offset += todo;
514 break;
515 }
516 size -= todo;
517 cc->cc_vmpage++;
518 cc->cc_offset = 0;
519 if (size == 0)
520 break;
521 }
522 break;
523 case CRYPTO_BUF_UIO:
524 for (;;) {
525 src = (const char *)cc->cc_iov->iov_base +

Callers 5

swcr_encdecFunction · 0.85
swcr_gmacFunction · 0.85
swcr_gcmFunction · 0.85
swcr_ccmFunction · 0.85

Calls 2

memcpyFunction · 0.50
panicFunction · 0.50

Tested by

no test coverage detected