OpenBSD Handbook Manuals
Search

copy(9)

Canonical URL: /copy.9/

COPYIN(9) Kernel Developer's Manual COPYIN(9)

copyin, copyout, copyinstr, copyoutstr, kcopykernel copy functions

#include <sys/types.h>
#include <sys/systm.h>

int
copyin(const void *uaddr, void *kaddr, size_t len);

int
copyout(const void *kaddr, void *uaddr, size_t len);

int
copyinstr(const void *uaddr, void *kaddr, size_t len, size_t *done);

int
copyoutstr(const void *kaddr, void *uaddr, size_t len, size_t *done);

int
kcopy(const void *kfaddr, void *kdaddr, size_t len);

The copyin functions are designed to copy contiguous data from one address to another. All but () copy data from user-space to kernel-space or vice-versa.

The copyin routines provide the following functionality:

()
Copies len bytes of data from the user-space address uaddr to the kernel-space address kaddr.
()
Copies len bytes of data from the kernel-space address kaddr to the user-space address uaddr.
()
Copies a null-terminated string, at most len bytes long, from user-space address uaddr to kernel-space address kaddr. The number of bytes actually copied, including the terminating null, is returned in *done, if done is not NULL.
()
Copies a null-terminated string, at most len bytes long, from kernel-space address kaddr to user-space address uaddr. The number of bytes actually copied, including the terminating null, is returned in *done, if done is not NULL.
kcopy()
Copies len bytes of data from the kernel-space address kfaddr to the kernel-space address kdaddr.

The copyin functions return 0 on success or EFAULT if a bad address is encountered. In addition, the copyinstr() and copyoutstr() functions return ENAMETOOLONG if the string is longer than len bytes.

OpenBSD 7.9 January 6, 2023 COPYIN(9)

Need conceptual guidance? Continue in the OpenBSD Handbook.