table of contents
| COPY(9) | Kernel Developer's Manual | COPY(9) | 
NAME¶
copy, copyin,
    copyin_nofault, copyout,
    copyout_nofault, copystr,
    copyinstr — kernel copy
    functions
SYNOPSIS¶
#include
    <sys/types.h>
  
  #include <sys/systm.h>
int
  
  copyin(const
    void *uaddr, void
    *kaddr, size_t
    len);
int
  
  copyin_nofault(const
    void *uaddr, void
    *kaddr, size_t
    len);
int
  
  copyout(const
    void *kaddr, void
    *uaddr, size_t
    len);
int
  
  copyout_nofault(const
    void *kaddr, void
    *uaddr, size_t
    len);
int
  
  copystr(const
    void *kfaddr, void
    *kdaddr, size_t
    len, size_t
  *done);
int
  
  copyinstr(const
    void *uaddr, void
    *kaddr, size_t len,
    size_t *done);
DESCRIPTION¶
The copy functions are designed to copy
    contiguous data from one address to another. All but
    copystr()
    copy data from user-space to kernel-space or vice-versa.
The
    copyin() and
    copyin_nofault() functions copy
    len bytes of data from the user-space address
    uaddr to the kernel-space address
    kaddr.
The
    copyout()
    and
    copyout_nofault()
    functions copy len bytes of data from the kernel-space
    address kaddr to the user-space address
    uaddr.
The
    copyin_nofault()
    and
    copyout_nofault()
    functions require that the kernel-space and user-space data be accessible
    without incurring a page fault. The source and destination addresses must be
    physically mapped for read and write access, respectively, and neither the
    source nor destination addresses may be pageable.
The
    copystr()
    function copies a NUL-terminated string, at most len
    bytes long, from kernel-space address kfaddr to
    kernel-space address kdaddr. The number of bytes
    actually copied, including the terminating NUL, is returned in
    *done (if done is
    non-NULL).
The
    copyinstr()
    function copies a NUL-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 NUL, is returned in
    *done (if done is
    non-NULL).
RETURN VALUES¶
The copy functions return 0 on success.
    All but copystr() return
    EFAULT if a bad address is encountered. The
    copyin_nofault() and
    copyout_nofault() functions return
    EFAULT if a page fault occurs. The
    copystr() and copyinstr()
    functions return ENAMETOOLONG if the string is
    longer than len bytes.
SEE ALSO¶
| June 15, 2017 | Debian |