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

Function crypto_cursor_copyback

freebsd/opencrypto/criov.c:386–466  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

384}
385
386void
387crypto_cursor_copyback(struct crypto_buffer_cursor *cc, int size,
388 const void *vsrc)
389{
390 size_t remain, todo;
391 const char *src;
392 char *dst;
393
394 src = vsrc;
395 switch (cc->cc_type) {
396 case CRYPTO_BUF_CONTIG:
397 MPASS(cc->cc_buf_len >= size);
398 memcpy(cc->cc_buf, src, size);
399 cc->cc_buf += size;
400 cc->cc_buf_len -= size;
401 break;
402 case CRYPTO_BUF_MBUF:
403 for (;;) {
404 KASSERT((cc->cc_mbuf->m_flags & M_EXTPG) == 0,
405 ("%s: not supported for unmapped mbufs", __func__));
406 dst = mtod(cc->cc_mbuf, char *) + cc->cc_offset;
407 remain = cc->cc_mbuf->m_len - cc->cc_offset;
408 todo = MIN(remain, size);
409 memcpy(dst, src, todo);
410 src += todo;
411 if (todo < remain) {
412 cc->cc_offset += todo;
413 break;
414 }
415 size -= todo;
416 cc->cc_mbuf = cc->cc_mbuf->m_next;
417 cc->cc_offset = 0;
418 if (size == 0)
419 break;
420 }
421 break;
422 case CRYPTO_BUF_VMPAGE:
423 for (;;) {
424 dst = (char *)PHYS_TO_DMAP(VM_PAGE_TO_PHYS(
425 *cc->cc_vmpage)) + cc->cc_offset;
426 remain = MIN(PAGE_SIZE - cc->cc_offset, cc->cc_buf_len);
427 todo = MIN(remain, size);
428 memcpy(dst, src, todo);
429 src += todo;
430 cc->cc_buf_len -= todo;
431 if (todo < remain) {
432 cc->cc_offset += todo;
433 break;
434 }
435 size -= todo;
436 cc->cc_vmpage++;
437 cc->cc_offset = 0;
438 if (size == 0)
439 break;
440 }
441 break;
442 case CRYPTO_BUF_UIO:
443 for (;;) {

Callers 3

swcr_encdecFunction · 0.85
swcr_gcmFunction · 0.85
swcr_ccmFunction · 0.85

Calls 2

memcpyFunction · 0.50
panicFunction · 0.50

Tested by

no test coverage detected