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