xref: /illumos-gate/usr/src/man/man9f/uio_copyin.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 UIO_COPYIN 9F
16*e67da9d6SAndy Fiddaman.Os
17*e67da9d6SAndy Fiddaman.Sh NAME
18*e67da9d6SAndy Fiddaman.Nm uio_copyin ,
19*e67da9d6SAndy Fiddaman.Nm uio_copyout
20*e67da9d6SAndy Fiddaman.Nd copy data to or from an address space named by a uio_seg_t
21*e67da9d6SAndy Fiddaman.Sh SYNOPSIS
22*e67da9d6SAndy Fiddaman.In sys/uio.h
23*e67da9d6SAndy Fiddaman.Ft int
24*e67da9d6SAndy Fiddaman.Fo uio_copyin
25*e67da9d6SAndy Fiddaman.Fa "const void *src"
26*e67da9d6SAndy Fiddaman.Fa "void *dst"
27*e67da9d6SAndy Fiddaman.Fa "size_t n"
28*e67da9d6SAndy Fiddaman.Fa "uio_seg_t seg"
29*e67da9d6SAndy Fiddaman.Fc
30*e67da9d6SAndy Fiddaman.Ft int
31*e67da9d6SAndy Fiddaman.Fo uio_copyout
32*e67da9d6SAndy Fiddaman.Fa "const void *src"
33*e67da9d6SAndy Fiddaman.Fa "void *dst"
34*e67da9d6SAndy Fiddaman.Fa "size_t n"
35*e67da9d6SAndy Fiddaman.Fa "uio_seg_t seg"
36*e67da9d6SAndy Fiddaman.Fc
37*e67da9d6SAndy Fiddaman.Sh INTERFACE LEVEL
38*e67da9d6SAndy Fiddamanillumos DDI specific
39*e67da9d6SAndy Fiddaman.Sh PARAMETERS
40*e67da9d6SAndy Fiddaman.Bl -tag -width Fa
41*e67da9d6SAndy Fiddaman.It Fa src
42*e67da9d6SAndy FiddamanSource address of the copy.
43*e67da9d6SAndy Fiddaman.It Fa dst
44*e67da9d6SAndy FiddamanDestination address of the copy.
45*e67da9d6SAndy Fiddaman.It Fa n
46*e67da9d6SAndy FiddamanNumber of bytes to copy.
47*e67da9d6SAndy Fiddaman.It Fa seg
48*e67da9d6SAndy FiddamanThe address space in which the caller's buffer lies, one of
49*e67da9d6SAndy Fiddaman.Dv UIO_USERSPACE ,
50*e67da9d6SAndy Fiddaman.Dv UIO_USERISPACE
51*e67da9d6SAndy Fiddamanor
52*e67da9d6SAndy Fiddaman.Dv UIO_SYSSPACE .
53*e67da9d6SAndy Fiddaman.El
54*e67da9d6SAndy Fiddaman.Sh DESCRIPTION
55*e67da9d6SAndy FiddamanThe
56*e67da9d6SAndy Fiddaman.Fn uio_copyin
57*e67da9d6SAndy Fiddamanfunction copies
58*e67da9d6SAndy Fiddaman.Fa n
59*e67da9d6SAndy Fiddamanbytes of data from
60*e67da9d6SAndy Fiddaman.Fa src ,
61*e67da9d6SAndy Fiddamanwhich lies in the address space named by
62*e67da9d6SAndy Fiddaman.Fa seg ,
63*e67da9d6SAndy Fiddamanto the kernel address
64*e67da9d6SAndy Fiddaman.Fa dst .
65*e67da9d6SAndy FiddamanThe
66*e67da9d6SAndy Fiddaman.Fn uio_copyout
67*e67da9d6SAndy Fiddamanfunction copies in the other direction, from the kernel address
68*e67da9d6SAndy Fiddaman.Fa src
69*e67da9d6SAndy Fiddamanto
70*e67da9d6SAndy Fiddaman.Fa dst
71*e67da9d6SAndy Fiddamanin the address space named by
72*e67da9d6SAndy Fiddaman.Fa seg .
73*e67da9d6SAndy Fiddaman.Pp
74*e67da9d6SAndy FiddamanThese functions are for code which can be handed data in either user or
75*e67da9d6SAndy Fiddamankernel memory, with its location described by a
76*e67da9d6SAndy Fiddaman.Vt uio_seg_t ,
77*e67da9d6SAndy Fiddamanand which would otherwise have to select between
78*e67da9d6SAndy Fiddaman.Xr copyin 9F
79*e67da9d6SAndy Fiddamanand
80*e67da9d6SAndy Fiddaman.Xr kcopy 9F
81*e67da9d6SAndy Fiddamanitself.
82*e67da9d6SAndy FiddamanThey are the
83*e67da9d6SAndy Fiddaman.Vt uio_seg_t
84*e67da9d6SAndy Fiddamancounterparts of
85*e67da9d6SAndy Fiddaman.Xr ddi_copyin 9F
86*e67da9d6SAndy Fiddamanand
87*e67da9d6SAndy Fiddaman.Xr ddi_copyout 9F ,
88*e67da9d6SAndy Fiddamanwhich provide the same service for the mode flags passed to an
89*e67da9d6SAndy Fiddaman.Xr ioctl 9E
90*e67da9d6SAndy Fiddamanentry point.
91*e67da9d6SAndy Fiddaman.Pp
92*e67da9d6SAndy FiddamanWhen
93*e67da9d6SAndy Fiddaman.Fa seg
94*e67da9d6SAndy Fiddamanis
95*e67da9d6SAndy Fiddaman.Dv UIO_USERSPACE
96*e67da9d6SAndy Fiddamanor
97*e67da9d6SAndy Fiddaman.Dv UIO_USERISPACE ,
98*e67da9d6SAndy Fiddamanthe caller's buffer lies in the user address space of the calling
99*e67da9d6SAndy Fiddamanprocess and the copy behaves as
100*e67da9d6SAndy Fiddaman.Xr copyin 9F
101*e67da9d6SAndy Fiddamanor
102*e67da9d6SAndy Fiddaman.Xr copyout 9F .
103*e67da9d6SAndy FiddamanWhen
104*e67da9d6SAndy Fiddaman.Fa seg
105*e67da9d6SAndy Fiddamanis
106*e67da9d6SAndy Fiddaman.Dv UIO_SYSSPACE ,
107*e67da9d6SAndy Fiddamanboth addresses are kernel addresses and the copy is performed with
108*e67da9d6SAndy Fiddaman.Xr kcopy 9F .
109*e67da9d6SAndy FiddamanIn every case a fault taken during the copy is returned to the caller
110*e67da9d6SAndy Fiddamanrather than causing the system to panic.
111*e67da9d6SAndy FiddamanPassing any other value as
112*e67da9d6SAndy Fiddaman.Fa seg
113*e67da9d6SAndy Fiddamancauses the system to panic.
114*e67da9d6SAndy Fiddaman.Sh CONTEXT
115*e67da9d6SAndy FiddamanWhen
116*e67da9d6SAndy Fiddaman.Fa seg
117*e67da9d6SAndy Fiddamanis
118*e67da9d6SAndy Fiddaman.Dv UIO_USERSPACE
119*e67da9d6SAndy Fiddamanor
120*e67da9d6SAndy Fiddaman.Dv UIO_USERISPACE ,
121*e67da9d6SAndy Fiddamanthese functions can be called from user context only.
122*e67da9d6SAndy FiddamanWhen
123*e67da9d6SAndy Fiddaman.Fa seg
124*e67da9d6SAndy Fiddamanis
125*e67da9d6SAndy Fiddaman.Dv UIO_SYSSPACE ,
126*e67da9d6SAndy Fiddamanthey can be called from user or kernel context.
127*e67da9d6SAndy Fiddaman.Sh RETURN VALUES
128*e67da9d6SAndy FiddamanUpon successful completion, the
129*e67da9d6SAndy Fiddaman.Fn uio_copyin
130*e67da9d6SAndy Fiddamanand
131*e67da9d6SAndy Fiddaman.Fn uio_copyout
132*e67da9d6SAndy Fiddamanfunctions return 0.
133*e67da9d6SAndy FiddamanOtherwise, -1 is returned to indicate that a fault occurred and the copy
134*e67da9d6SAndy Fiddamandid not complete.
135*e67da9d6SAndy Fiddaman.Sh SEE ALSO
136*e67da9d6SAndy Fiddaman.Xr ioctl 9E ,
137*e67da9d6SAndy Fiddaman.Xr bcopy 9F ,
138*e67da9d6SAndy Fiddaman.Xr copyin 9F ,
139*e67da9d6SAndy Fiddaman.Xr copyout 9F ,
140*e67da9d6SAndy Fiddaman.Xr ddi_copyin 9F ,
141*e67da9d6SAndy Fiddaman.Xr ddi_copyout 9F ,
142*e67da9d6SAndy Fiddaman.Xr kcopy 9F ,
143*e67da9d6SAndy Fiddaman.Xr uiomove 9F
144