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