xref: /illumos-gate/usr/src/man/man9f/kcopy.9f (revision e67da9d6e15809e01554ff9bb20d0ddf210dbc6c)
1*e67da9d6SAndy Fiddaman.\"
2*e67da9d6SAndy Fiddaman.\" This file and its contents are supplied under the terms of the
3*e67da9d6SAndy Fiddaman.\" Common Development and Distribution License ("CDDL"), version 1.0.
4*e67da9d6SAndy Fiddaman.\" You may only use this file in accordance with the terms of version
5*e67da9d6SAndy Fiddaman.\" 1.0 of the CDDL.
6*e67da9d6SAndy Fiddaman.\"
7*e67da9d6SAndy Fiddaman.\" A full copy of the text of the CDDL should have accompanied this
8*e67da9d6SAndy Fiddaman.\" source.  A copy of the CDDL is also available via the Internet at
9*e67da9d6SAndy Fiddaman.\" http://www.illumos.org/license/CDDL.
10*e67da9d6SAndy Fiddaman.\"
11*e67da9d6SAndy Fiddaman.\"
12*e67da9d6SAndy Fiddaman.\" Copyright 2026 Oxide Computer Company
13*e67da9d6SAndy Fiddaman.\"
14*e67da9d6SAndy Fiddaman.Dd July 11, 2026
15*e67da9d6SAndy Fiddaman.Dt KCOPY 9F
16*e67da9d6SAndy Fiddaman.Os
17*e67da9d6SAndy Fiddaman.Sh NAME
18*e67da9d6SAndy Fiddaman.Nm kcopy
19*e67da9d6SAndy Fiddaman.Nd copy data between kernel addresses, guarding against faults
20*e67da9d6SAndy Fiddaman.Sh SYNOPSIS
21*e67da9d6SAndy Fiddaman.In sys/types.h
22*e67da9d6SAndy Fiddaman.In sys/systm.h
23*e67da9d6SAndy Fiddaman.Ft int
24*e67da9d6SAndy Fiddaman.Fo kcopy
25*e67da9d6SAndy Fiddaman.Fa "const void *from"
26*e67da9d6SAndy Fiddaman.Fa "void *to"
27*e67da9d6SAndy Fiddaman.Fa "size_t count"
28*e67da9d6SAndy Fiddaman.Fc
29*e67da9d6SAndy Fiddaman.Sh INTERFACE LEVEL
30*e67da9d6SAndy FiddamanArchitecture independent level 1 (DDI/DKI).
31*e67da9d6SAndy Fiddaman.Sh PARAMETERS
32*e67da9d6SAndy Fiddaman.Bl -tag -width Fa
33*e67da9d6SAndy Fiddaman.It Fa from
34*e67da9d6SAndy FiddamanSource kernel address of the copy.
35*e67da9d6SAndy Fiddaman.It Fa to
36*e67da9d6SAndy FiddamanDestination kernel address of the copy.
37*e67da9d6SAndy Fiddaman.It Fa count
38*e67da9d6SAndy FiddamanNumber of bytes to copy.
39*e67da9d6SAndy Fiddaman.El
40*e67da9d6SAndy Fiddaman.Sh DESCRIPTION
41*e67da9d6SAndy FiddamanThe
42*e67da9d6SAndy Fiddaman.Fn kcopy
43*e67da9d6SAndy Fiddamanfunction copies
44*e67da9d6SAndy Fiddaman.Fa count
45*e67da9d6SAndy Fiddamanbytes from one kernel address to another.
46*e67da9d6SAndy FiddamanIt performs the same copy as
47*e67da9d6SAndy Fiddaman.Xr bcopy 9F ,
48*e67da9d6SAndy Fiddamanbut guards against faults for the duration of the copy.
49*e67da9d6SAndy FiddamanA fault taken while copying is first handled as an ordinary page fault,
50*e67da9d6SAndy Fiddamanso a copy involving pageable kernel memory succeeds when the fault can
51*e67da9d6SAndy Fiddamanbe resolved.
52*e67da9d6SAndy FiddamanA fault which cannot be resolved causes
53*e67da9d6SAndy Fiddaman.Fn kcopy
54*e67da9d6SAndy Fiddamanto return an error, where
55*e67da9d6SAndy Fiddaman.Xr bcopy 9F
56*e67da9d6SAndy Fiddamanwould panic the system.
57*e67da9d6SAndy Fiddaman.Pp
58*e67da9d6SAndy FiddamanBoth
59*e67da9d6SAndy Fiddaman.Fa from
60*e67da9d6SAndy Fiddamanand
61*e67da9d6SAndy Fiddaman.Fa to
62*e67da9d6SAndy Fiddamanmust be kernel addresses.
63*e67da9d6SAndy Fiddaman.Fn kcopy
64*e67da9d6SAndy Fiddamanmust not be used to copy data to or from user address space; use
65*e67da9d6SAndy Fiddaman.Xr copyin 9F
66*e67da9d6SAndy Fiddamanand
67*e67da9d6SAndy Fiddaman.Xr copyout 9F
68*e67da9d6SAndy Fiddamanfor that.
69*e67da9d6SAndy FiddamanIf the source and destination areas overlap, the behaviour is
70*e67da9d6SAndy Fiddamanundefined.
71*e67da9d6SAndy Fiddaman.Sh CONTEXT
72*e67da9d6SAndy FiddamanThe
73*e67da9d6SAndy Fiddaman.Fn kcopy
74*e67da9d6SAndy Fiddamanfunction can be called from user or kernel context.
75*e67da9d6SAndy Fiddaman.Sh RETURN VALUES
76*e67da9d6SAndy FiddamanUpon successful completion, the
77*e67da9d6SAndy Fiddaman.Fn kcopy
78*e67da9d6SAndy Fiddamanfunction returns 0.
79*e67da9d6SAndy FiddamanOtherwise, a fault occurred that could not be resolved, and an error
80*e67da9d6SAndy Fiddamannumber describing the fault, most commonly
81*e67da9d6SAndy Fiddaman.Er EFAULT ,
82*e67da9d6SAndy Fiddamanis returned.
83*e67da9d6SAndy FiddamanNote that this differs from
84*e67da9d6SAndy Fiddaman.Xr copyin 9F
85*e67da9d6SAndy Fiddamanand
86*e67da9d6SAndy Fiddaman.Xr copyout 9F ,
87*e67da9d6SAndy Fiddamanwhich return -1 on failure.
88*e67da9d6SAndy Fiddaman.Sh SEE ALSO
89*e67da9d6SAndy Fiddaman.Xr bcopy 9F ,
90*e67da9d6SAndy Fiddaman.Xr copyin 9F ,
91*e67da9d6SAndy Fiddaman.Xr copyout 9F ,
92*e67da9d6SAndy Fiddaman.Xr ddi_copyin 9F ,
93*e67da9d6SAndy Fiddaman.Xr ddi_copyout 9F ,
94*e67da9d6SAndy Fiddaman.Xr uio_copyin 9F ,
95*e67da9d6SAndy Fiddaman.Xr uio_copyout 9F
96