xref: /freebsd/share/man/man9/fetch.9 (revision f9bc005b8ef3b507a5ecbc2d7fe4411ef70eff38)
1.\"	$NetBSD: fetch.9,v 1.2 1996/01/09 21:59:24 perry Exp $
2.\"
3.\" Copyright (c) 1996 Jason R. Thorpe.
4.\" All rights reserved.
5.\"
6.\" This code is derived from software contributed by Kenneth Stailey.
7.\"
8.\" Redistribution and use in source and binary forms, with or without
9.\" modification, are permitted provided that the following conditions
10.\" are met:
11.\" 1. Redistributions of source code must retain the above copyright
12.\"    notice, this list of conditions and the following disclaimer.
13.\" 2. Redistributions in binary form must reproduce the above copyright
14.\"    notice, this list of conditions and the following disclaimer in the
15.\"    documentation and/or other materials provided with the distribution.
16.\" 3. All advertising materials mentioning features or use of this software
17.\"    must display the following acknowledgement:
18.\"	This product includes software developed for the NetBSD Project
19.\"	by Jason R. Thorpe.
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.
22.\"
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
25.\" OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
26.\" IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
27.\" INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
28.\" BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
29.\" LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
30.\" AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
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
33.\" SUCH DAMAGE.
34.\"
35.Dd June 29, 2026
36.Dt FETCH 9
37.Os
38.Sh NAME
39.Nm fetch ,
40.Nm fubyte ,
41.Nm fuword ,
42.Nm fuword16 ,
43.Nm fuword32 ,
44.Nm fuword64 ,
45.Nm fueptr ,
46.Nm fueword ,
47.Nm fueword32 ,
48.Nm fueword64
49.Nd fetch data from user-space
50.Sh SYNOPSIS
51.In sys/types.h
52.In sys/systm.h
53.Ft int
54.Fn fubyte "volatile const void *base"
55.Ft long
56.Fn fuword "volatile const void *base"
57.Ft int
58.Fn fuword16 "volatile const void *base"
59.Ft int32_t
60.Fn fuword32 "volatile const void *base"
61.Ft int64_t
62.Fn fuword64 "volatile const void *base"
63.Ft int
64.Fn fueptr "volatile const void *base" "intptr_t *val"
65.Ft int
66.Fn fueword "volatile const void *base" "long *val"
67.Ft int
68.Fn fueword32 "volatile const void *base" "int32_t *val"
69.Ft int
70.Fn fueword64 "volatile const void *base" "int64_t *val"
71.Sh DESCRIPTION
72The
73.Nm
74functions are designed to copy small amounts of data from user-space
75of the current process.
76If the user address is naturally aligned, then the operation will be
77performed atomically.
78Otherwise it may fail or be performed non-atomically, depending on
79the platform.
80.Pp
81The
82.Nm
83routines provide the following functionality:
84.Bl -tag -width "fueword32()"
85.It Fn fubyte
86Fetches a byte of data from the user-space address
87.Pa base .
88The byte read is zero-extended into the results variable.
89.It Fn fuword
90Fetches a word of data (long) from the user-space address
91.Pa base .
92.It Fn fuword16
93Fetches 16 bits of data from the user-space address
94.Pa base .
95The half-word read is zero-extended into the results variable.
96.It Fn fuword32
97Fetches 32 bits of data from the user-space address
98.Pa base .
99.It Fn fuword64
100Fetches 64 bits of data from the user-space address
101.Pa base .
102.It Fn fueptr
103Fetches a pointer from the user-space address
104.Pa base
105and stores the result in the variable pointed by
106.Pa val .
107.Fn fueptr
108preserves the provenance of pointers fetched from user-space
109.Pq see Xr memory_model 7 for further information .
110.It Fn fueword
111Fetches a word of data (long) from the user-space address
112.Pa base
113and stores the result in the variable pointed by
114.Pa val .
115.It Fn fueword32
116Fetches 32 bits of data from the user-space address
117.Pa base
118and stores the result in the variable pointed by
119.Pa val .
120.It Fn fueword64
121Fetches 64 bits of data from the user-space address
122.Pa base
123and stores the result in the variable pointed by
124.Pa val .
125.El
126.Pp
127The callers of
128.Fn fuword ,
129.Fn fuword32
130and
131.Fn fuword64
132functions cannot distinguish between -1 read from
133userspace and function failure.
134.Sh RETURN VALUES
135The
136.Fn fubyte ,
137.Fn fuword ,
138.Fn fuword16 ,
139.Fn fuword32 ,
140and
141.Fn fuword64
142functions return the data fetched or -1 on failure.
143The
144.Fn fueptr ,
145.Fn fueword ,
146.Fn fueword32
147and
148.Fn fueword64
149functions return 0 on success and -1 on failure.
150.Sh SEE ALSO
151.Xr copy 9 ,
152.Xr store 9
153