| @@ -1,180 +1,180 @@ | | | @@ -1,180 +1,180 @@ |
1 | .\" $NetBSD: copy.9,v 1.21 2019/09/01 17:50:32 oster Exp $ | | 1 | .\" $NetBSD: copy.9,v 1.22 2019/09/01 19:08:22 wiz Exp $ |
2 | .\" | | 2 | .\" |
3 | .\" Copyright (c) 1996, 2002 Jason R. Thorpe. | | 3 | .\" Copyright (c) 1996, 2002 Jason R. Thorpe. |
4 | .\" All rights reserved. | | 4 | .\" All rights reserved. |
5 | .\" | | 5 | .\" |
6 | .\" This code is derived from software contributed by Kenneth Stailey. | | 6 | .\" This code is derived from software contributed by Kenneth Stailey. |
7 | .\" | | 7 | .\" |
8 | .\" Redistribution and use in source and binary forms, with or without | | 8 | .\" Redistribution and use in source and binary forms, with or without |
9 | .\" modification, are permitted provided that the following conditions | | 9 | .\" modification, are permitted provided that the following conditions |
10 | .\" are met: | | 10 | .\" are met: |
11 | .\" 1. Redistributions of source code must retain the above copyright | | 11 | .\" 1. Redistributions of source code must retain the above copyright |
12 | .\" notice, this list of conditions and the following disclaimer. | | 12 | .\" notice, this list of conditions and the following disclaimer. |
13 | .\" 2. Redistributions in binary form must reproduce the above copyright | | 13 | .\" 2. Redistributions in binary form must reproduce the above copyright |
14 | .\" notice, this list of conditions and the following disclaimer in the | | 14 | .\" notice, this list of conditions and the following disclaimer in the |
15 | .\" documentation and/or other materials provided with the distribution. | | 15 | .\" documentation and/or other materials provided with the distribution. |
16 | .\" 3. All advertising materials mentioning features or use of this software | | 16 | .\" 3. All advertising materials mentioning features or use of this software |
17 | .\" must display the following acknowledgement: | | 17 | .\" must display the following acknowledgement: |
18 | .\" This product includes software developed for the NetBSD Project | | 18 | .\" This product includes software developed for the NetBSD Project |
19 | .\" by Jason R. Thorpe. | | 19 | .\" by Jason R. Thorpe. |
20 | .\" 4. The name of the author may not be used to endorse or promote products | | 20 | .\" 4. The name of the author may not be used to endorse or promote products |
21 | .\" derived from this software without specific prior written permission. | | 21 | .\" derived from this software without specific prior written permission. |
22 | .\" | | 22 | .\" |
23 | .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR | | 23 | .\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR |
24 | .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES | | 24 | .\" IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES |
25 | .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. | | 25 | .\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. |
26 | .\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, | | 26 | .\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, |
27 | .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, | | 27 | .\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, |
28 | .\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; | | 28 | .\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; |
29 | .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED | | 29 | .\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED |
30 | .\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, | | 30 | .\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, |
31 | .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY | | 31 | .\" OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
32 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF | | 32 | .\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
33 | .\" SUCH DAMAGE. | | 33 | .\" SUCH DAMAGE. |
34 | .\" | | 34 | .\" |
35 | .Dd August 28, 2005 | | 35 | .Dd August 28, 2005 |
36 | .Dt COPY 9 | | 36 | .Dt COPY 9 |
37 | .Os | | 37 | .Os |
38 | .Sh NAME | | 38 | .Sh NAME |
39 | .Nm copy , | | 39 | .Nm copy , |
40 | .Nm copyin , | | 40 | .Nm copyin , |
41 | .Nm copyout , | | 41 | .Nm copyout , |
42 | .Nm copystr , | | 42 | .Nm copystr , |
43 | .Nm copyinstr , | | 43 | .Nm copyinstr , |
44 | .Nm copyoutstr | | 44 | .Nm copyoutstr |
45 | .Nd kernel space to/from user space copy functions | | 45 | .Nd kernel space to/from user space copy functions |
46 | .Sh SYNOPSIS | | 46 | .Sh SYNOPSIS |
47 | .In sys/types.h | | 47 | .In sys/types.h |
48 | .In sys/systm.h | | 48 | .In sys/systm.h |
49 | .Ft int | | 49 | .Ft int |
50 | .Fn copyin "const void *uaddr" "void *kaddr" "size_t len" | | 50 | .Fn copyin "const void *uaddr" "void *kaddr" "size_t len" |
51 | .Ft int | | 51 | .Ft int |
52 | .Fn copyout "const void *kaddr" "void *uaddr" "size_t len" | | 52 | .Fn copyout "const void *kaddr" "void *uaddr" "size_t len" |
53 | .Ft int | | 53 | .Ft int |
54 | .Fn copystr "const void *kfaddr" "void *kdaddr" "size_t len" "size_t *done" | | 54 | .Fn copystr "const void *kfaddr" "void *kdaddr" "size_t len" "size_t *done" |
55 | .Ft int | | 55 | .Ft int |
56 | .Fn copyinstr "const void *uaddr" "void *kaddr" "size_t len" "size_t *done" | | 56 | .Fn copyinstr "const void *uaddr" "void *kaddr" "size_t len" "size_t *done" |
57 | .Ft int | | 57 | .Ft int |
58 | .Fn copyoutstr "const void *kaddr" "void *uaddr" "size_t len" "size_t *done" | | 58 | .Fn copyoutstr "const void *kaddr" "void *uaddr" "size_t len" "size_t *done" |
59 | .Ft int | | 59 | .Ft int |
60 | .Fn copyin_proc "struct proc *p" "const void *uaddr" "void *kaddr" "size_t len" | | 60 | .Fn copyin_proc "struct proc *p" "const void *uaddr" "void *kaddr" "size_t len" |
61 | .Ft int | | 61 | .Ft int |
62 | .Fn copyout_proc "struct proc *p" "const void *kaddr" "void *uaddr" "size_t len" | | 62 | .Fn copyout_proc "struct proc *p" "const void *kaddr" "void *uaddr" "size_t len" |
63 | .Ft int | | 63 | .Ft int |
64 | .Fn ioctl_copyin "int ioctlflags" "const void *src" "void *dst" "size_t len" | | 64 | .Fn ioctl_copyin "int ioctlflags" "const void *src" "void *dst" "size_t len" |
65 | .Ft int | | 65 | .Ft int |
66 | .Fn ioctl_copyout "int ioctlflags" "const void *src" "void *dst" "size_t len" | | 66 | .Fn ioctl_copyout "int ioctlflags" "const void *src" "void *dst" "size_t len" |
67 | .Sh DESCRIPTION | | 67 | .Sh DESCRIPTION |
68 | The | | 68 | The |
69 | .Nm | | 69 | .Nm |
70 | functions are designed to copy contiguous data from one address | | 70 | functions are designed to copy contiguous data from one address |
71 | to another. | | 71 | to another. |
72 | All but | | 72 | All but |
73 | .Fn copystr | | 73 | .Fn copystr |
74 | copy data from user-space to kernel-space or vice-versa. | | 74 | copy data from user-space to kernel-space or vice-versa. |
75 | .Pp | | 75 | .Pp |
76 | The | | 76 | The |
77 | .Nm | | 77 | .Nm |
78 | routines provide the following functionality: | | 78 | routines provide the following functionality: |
79 | .Bl -tag -width "copyout_proc()" | | 79 | .Bl -tag -width "copyout_proc()" |
80 | .It Fn copyin | | 80 | .It Fn copyin |
81 | Copies | | 81 | Copies |
82 | .Fa len | | 82 | .Fa len |
83 | bytes of data from the user-space address | | 83 | bytes of data from the user-space address |
84 | .Fa uaddr | | 84 | .Fa uaddr |
85 | in the current process to the kernel-space address | | 85 | in the current process to the kernel-space address |
86 | .Fa kaddr . | | 86 | .Fa kaddr . |
87 | .It Fn copyout | | 87 | .It Fn copyout |
88 | Copies | | 88 | Copies |
89 | .Fa len | | 89 | .Fa len |
90 | bytes of data from the kernel-space address | | 90 | bytes of data from the kernel-space address |
91 | .Fa kaddr | | 91 | .Fa kaddr |
92 | to the user-space address | | 92 | to the user-space address |
93 | .Fa uaddr | | 93 | .Fa uaddr |
94 | in the current process. | | 94 | in the current process. |
95 | .It Fn copystr | | 95 | .It Fn copystr |
96 | Copies a NUL-terminated string, at most | | 96 | Copies a NUL-terminated string, at most |
97 | .Fa len | | 97 | .Fa len |
98 | bytes long, from kernel-space address | | 98 | bytes long, from kernel-space address |
99 | .Fa kfaddr | | 99 | .Fa kfaddr |
100 | to kernel-space address | | 100 | to kernel-space address |
101 | .Fa kdaddr . | | 101 | .Fa kdaddr . |
102 | If the | | 102 | If the |
103 | .Fa done | | 103 | .Fa done |
104 | argument is non-NULL, | | 104 | argument is non-NULL, |
105 | the number of bytes actually copied, including the terminating | | 105 | the number of bytes actually copied, including the terminating |
106 | NUL, is returned in | | 106 | NUL, is returned in |
107 | .Fa *done . | | 107 | .Fa *done . |
108 | .It Fn copyinstr | | 108 | .It Fn copyinstr |
109 | Copies a NUL-terminated string, at most | | 109 | Copies a NUL-terminated string, at most |
110 | .Fa len | | 110 | .Fa len |
111 | bytes long, from user-space address | | 111 | bytes long, from user-space address |
112 | .Fa uaddr | | 112 | .Fa uaddr |
113 | in the current process to kernel-space address | | 113 | in the current process to kernel-space address |
114 | .Fa kaddr . | | 114 | .Fa kaddr . |
115 | If the | | 115 | If the |
116 | .Fa done | | 116 | .Fa done |
117 | argument is non-NULL, | | 117 | argument is non-NULL, |
118 | the number of bytes actually copied, including the terminating | | 118 | the number of bytes actually copied, including the terminating |
119 | NUL, is returned in | | 119 | NUL, is returned in |
120 | .Fa *done . | | 120 | .Fa *done . |
121 | .It Fn copyoutstr | | 121 | .It Fn copyoutstr |
122 | Copies a NUL-terminated string, at most | | 122 | Copies a NUL-terminated string, at most |
123 | .Fa len | | 123 | .Fa len |
124 | bytes long, from kernel-space address | | 124 | bytes long, from kernel-space address |
125 | .Fa kaddr | | 125 | .Fa kaddr |
126 | to user-space address | | 126 | to user-space address |
127 | .Fa uaddr | | 127 | .Fa uaddr |
128 | in the current process. | | 128 | in the current process. |
129 | If the | | 129 | If the |
130 | .Fa done | | 130 | .Fa done |
131 | argument is non-NULL, | | 131 | argument is non-NULL, |
132 | the number of bytes actually copied, including the terminating | | 132 | the number of bytes actually copied, including the terminating |
133 | NUL, is returned in | | 133 | NUL, is returned in |
134 | .Fa *done . | | 134 | .Fa *done . |
135 | .It Fn copyin_proc | | 135 | .It Fn copyin_proc |
136 | Like | | 136 | Like |
137 | .Fn copyin , | | 137 | .Fn copyin , |
138 | except it operates on the address space of the process | | 138 | except it operates on the address space of the process |
139 | .Fa p . | | 139 | .Fa p . |
140 | .It Fn copyout_proc | | 140 | .It Fn copyout_proc |
141 | Like | | 141 | Like |
142 | .Fn copyout , | | 142 | .Fn copyout , |
143 | except it operates on the address space of the process | | 143 | except it operates on the address space of the process |
144 | .Fa p . | | 144 | .Fa p . |
145 | .It Fn ioctl_copyin | | 145 | .It Fn ioctl_copyin |
146 | Like | | 146 | Like |
147 | .Fn copyin , | | 147 | .Fn copyin , |
148 | except it operates on kernel addresses when the | | 148 | except it operates on kernel addresses when the |
149 | .Dv FKIOCTL | | 149 | .Dv FKIOCTL |
150 | flag is passed in | | 150 | flag is passed in |
151 | .Fa ioctlflags | | 151 | .Fa ioctlflags |
152 | from the ioctl call. | | 152 | from the ioctl call. |
153 | .It Fn ioctl_copyout | | 153 | .It Fn ioctl_copyout |
154 | Like | | 154 | Like |
155 | .Fn copyout , | | 155 | .Fn copyout , |
156 | except it operates on kernel addresses when the | | 156 | except it operates on kernel addresses when the |
157 | .Dv FKIOCTL | | 157 | .Dv FKIOCTL |
158 | flag is passed in | | 158 | flag is passed in |
159 | .Fa ioctlflags | | 159 | .Fa ioctlflags |
160 | from the ioctl call. | | 160 | from the ioctl call. |
161 | .El | | 161 | .El |
162 | .Sh RETURN VALUES | | 162 | .Sh RETURN VALUES |
163 | The | | 163 | The |
164 | .Nm | | 164 | .Nm |
165 | functions return 0 on success or | | 165 | functions return 0 on success or |
166 | .Er EFAULT | | 166 | .Er EFAULT |
167 | if a bad address is encountered. | | 167 | if a bad address is encountered. |
168 | In addition, the | | 168 | In addition, the |
169 | .Fn copystr , | | 169 | .Fn copystr , |
170 | .Fn copyinstr , | | 170 | .Fn copyinstr , |
171 | and | | 171 | and |
172 | .Fn copyoutstr | | 172 | .Fn copyoutstr |
173 | functions return | | 173 | functions return |
174 | .Er ENAMETOOLONG | | 174 | .Er ENAMETOOLONG |
175 | if the string is longer than | | 175 | if the string is longer than |
176 | .Fa len | | 176 | .Fa len |
177 | bytes. | | 177 | bytes. |
178 | .Sh SEE ALSO | | 178 | .Sh SEE ALSO |
179 | .Xr fetch 9 , | | 179 | .Xr ufetch 9 , |
180 | .Xr ustore 9 | | 180 | .Xr ustore 9 |