| 590 | } |
| 591 | |
| 592 | void |
| 593 | crypto_copyback(struct cryptop *crp, int off, int size, const void *src) |
| 594 | { |
| 595 | struct crypto_buffer *cb; |
| 596 | |
| 597 | if (crp->crp_obuf.cb_type != CRYPTO_BUF_NONE) |
| 598 | cb = &crp->crp_obuf; |
| 599 | else |
| 600 | cb = &crp->crp_buf; |
| 601 | switch (cb->cb_type) { |
| 602 | case CRYPTO_BUF_MBUF: |
| 603 | m_copyback(cb->cb_mbuf, off, size, src); |
| 604 | break; |
| 605 | #if CRYPTO_MAY_HAVE_VMPAGE |
| 606 | case CRYPTO_BUF_VMPAGE: |
| 607 | MPASS(size <= cb->cb_vm_page_len); |
| 608 | MPASS(size + off <= |
| 609 | cb->cb_vm_page_len + cb->cb_vm_page_offset); |
| 610 | cvm_page_copyback(cb->cb_vm_page, |
| 611 | off + cb->cb_vm_page_offset, size, src); |
| 612 | break; |
| 613 | #endif /* CRYPTO_MAY_HAVE_VMPAGE */ |
| 614 | case CRYPTO_BUF_UIO: |
| 615 | cuio_copyback(cb->cb_uio, off, size, src); |
| 616 | break; |
| 617 | case CRYPTO_BUF_CONTIG: |
| 618 | MPASS(off + size <= cb->cb_buf_len); |
| 619 | bcopy(src, cb->cb_buf + off, size); |
| 620 | break; |
| 621 | default: |
| 622 | #ifdef INVARIANTS |
| 623 | panic("invalid crp buf type %d", cb->cb_type); |
| 624 | #endif |
| 625 | break; |
| 626 | } |
| 627 | } |
| 628 | |
| 629 | void |
| 630 | crypto_copydata(struct cryptop *crp, int off, int size, void *dst) |
no test coverage detected