xref: /OK3568_Linux_fs/kernel/Documentation/security/keys/core.rst (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun============================
2*4882a593SmuzhiyunKernel Key Retention Service
3*4882a593Smuzhiyun============================
4*4882a593Smuzhiyun
5*4882a593SmuzhiyunThis service allows cryptographic keys, authentication tokens, cross-domain
6*4882a593Smuzhiyunuser mappings, and similar to be cached in the kernel for the use of
7*4882a593Smuzhiyunfilesystems and other kernel services.
8*4882a593Smuzhiyun
9*4882a593SmuzhiyunKeyrings are permitted; these are a special type of key that can hold links to
10*4882a593Smuzhiyunother keys. Processes each have three standard keyring subscriptions that a
11*4882a593Smuzhiyunkernel service can search for relevant keys.
12*4882a593Smuzhiyun
13*4882a593SmuzhiyunThe key service can be configured on by enabling:
14*4882a593Smuzhiyun
15*4882a593Smuzhiyun	"Security options"/"Enable access key retention support" (CONFIG_KEYS)
16*4882a593Smuzhiyun
17*4882a593SmuzhiyunThis document has the following sections:
18*4882a593Smuzhiyun
19*4882a593Smuzhiyun.. contents:: :local:
20*4882a593Smuzhiyun
21*4882a593Smuzhiyun
22*4882a593SmuzhiyunKey Overview
23*4882a593Smuzhiyun============
24*4882a593Smuzhiyun
25*4882a593SmuzhiyunIn this context, keys represent units of cryptographic data, authentication
26*4882a593Smuzhiyuntokens, keyrings, etc.. These are represented in the kernel by struct key.
27*4882a593Smuzhiyun
28*4882a593SmuzhiyunEach key has a number of attributes:
29*4882a593Smuzhiyun
30*4882a593Smuzhiyun	- A serial number.
31*4882a593Smuzhiyun	- A type.
32*4882a593Smuzhiyun	- A description (for matching a key in a search).
33*4882a593Smuzhiyun	- Access control information.
34*4882a593Smuzhiyun	- An expiry time.
35*4882a593Smuzhiyun	- A payload.
36*4882a593Smuzhiyun	- State.
37*4882a593Smuzhiyun
38*4882a593Smuzhiyun
39*4882a593Smuzhiyun  *  Each key is issued a serial number of type key_serial_t that is unique for
40*4882a593Smuzhiyun     the lifetime of that key. All serial numbers are positive non-zero 32-bit
41*4882a593Smuzhiyun     integers.
42*4882a593Smuzhiyun
43*4882a593Smuzhiyun     Userspace programs can use a key's serial numbers as a way to gain access
44*4882a593Smuzhiyun     to it, subject to permission checking.
45*4882a593Smuzhiyun
46*4882a593Smuzhiyun  *  Each key is of a defined "type". Types must be registered inside the
47*4882a593Smuzhiyun     kernel by a kernel service (such as a filesystem) before keys of that type
48*4882a593Smuzhiyun     can be added or used. Userspace programs cannot define new types directly.
49*4882a593Smuzhiyun
50*4882a593Smuzhiyun     Key types are represented in the kernel by struct key_type. This defines a
51*4882a593Smuzhiyun     number of operations that can be performed on a key of that type.
52*4882a593Smuzhiyun
53*4882a593Smuzhiyun     Should a type be removed from the system, all the keys of that type will
54*4882a593Smuzhiyun     be invalidated.
55*4882a593Smuzhiyun
56*4882a593Smuzhiyun  *  Each key has a description. This should be a printable string. The key
57*4882a593Smuzhiyun     type provides an operation to perform a match between the description on a
58*4882a593Smuzhiyun     key and a criterion string.
59*4882a593Smuzhiyun
60*4882a593Smuzhiyun  *  Each key has an owner user ID, a group ID and a permissions mask. These
61*4882a593Smuzhiyun     are used to control what a process may do to a key from userspace, and
62*4882a593Smuzhiyun     whether a kernel service will be able to find the key.
63*4882a593Smuzhiyun
64*4882a593Smuzhiyun  *  Each key can be set to expire at a specific time by the key type's
65*4882a593Smuzhiyun     instantiation function. Keys can also be immortal.
66*4882a593Smuzhiyun
67*4882a593Smuzhiyun  *  Each key can have a payload. This is a quantity of data that represent the
68*4882a593Smuzhiyun     actual "key". In the case of a keyring, this is a list of keys to which
69*4882a593Smuzhiyun     the keyring links; in the case of a user-defined key, it's an arbitrary
70*4882a593Smuzhiyun     blob of data.
71*4882a593Smuzhiyun
72*4882a593Smuzhiyun     Having a payload is not required; and the payload can, in fact, just be a
73*4882a593Smuzhiyun     value stored in the struct key itself.
74*4882a593Smuzhiyun
75*4882a593Smuzhiyun     When a key is instantiated, the key type's instantiation function is
76*4882a593Smuzhiyun     called with a blob of data, and that then creates the key's payload in
77*4882a593Smuzhiyun     some way.
78*4882a593Smuzhiyun
79*4882a593Smuzhiyun     Similarly, when userspace wants to read back the contents of the key, if
80*4882a593Smuzhiyun     permitted, another key type operation will be called to convert the key's
81*4882a593Smuzhiyun     attached payload back into a blob of data.
82*4882a593Smuzhiyun
83*4882a593Smuzhiyun  *  Each key can be in one of a number of basic states:
84*4882a593Smuzhiyun
85*4882a593Smuzhiyun      *  Uninstantiated. The key exists, but does not have any data attached.
86*4882a593Smuzhiyun     	 Keys being requested from userspace will be in this state.
87*4882a593Smuzhiyun
88*4882a593Smuzhiyun      *  Instantiated. This is the normal state. The key is fully formed, and
89*4882a593Smuzhiyun	 has data attached.
90*4882a593Smuzhiyun
91*4882a593Smuzhiyun      *  Negative. This is a relatively short-lived state. The key acts as a
92*4882a593Smuzhiyun	 note saying that a previous call out to userspace failed, and acts as
93*4882a593Smuzhiyun	 a throttle on key lookups. A negative key can be updated to a normal
94*4882a593Smuzhiyun	 state.
95*4882a593Smuzhiyun
96*4882a593Smuzhiyun      *  Expired. Keys can have lifetimes set. If their lifetime is exceeded,
97*4882a593Smuzhiyun	 they traverse to this state. An expired key can be updated back to a
98*4882a593Smuzhiyun	 normal state.
99*4882a593Smuzhiyun
100*4882a593Smuzhiyun      *  Revoked. A key is put in this state by userspace action. It can't be
101*4882a593Smuzhiyun	 found or operated upon (apart from by unlinking it).
102*4882a593Smuzhiyun
103*4882a593Smuzhiyun      *  Dead. The key's type was unregistered, and so the key is now useless.
104*4882a593Smuzhiyun
105*4882a593SmuzhiyunKeys in the last three states are subject to garbage collection.  See the
106*4882a593Smuzhiyunsection on "Garbage collection".
107*4882a593Smuzhiyun
108*4882a593Smuzhiyun
109*4882a593SmuzhiyunKey Service Overview
110*4882a593Smuzhiyun====================
111*4882a593Smuzhiyun
112*4882a593SmuzhiyunThe key service provides a number of features besides keys:
113*4882a593Smuzhiyun
114*4882a593Smuzhiyun  *  The key service defines three special key types:
115*4882a593Smuzhiyun
116*4882a593Smuzhiyun     (+) "keyring"
117*4882a593Smuzhiyun
118*4882a593Smuzhiyun	 Keyrings are special keys that contain a list of other keys. Keyring
119*4882a593Smuzhiyun	 lists can be modified using various system calls. Keyrings should not
120*4882a593Smuzhiyun	 be given a payload when created.
121*4882a593Smuzhiyun
122*4882a593Smuzhiyun     (+) "user"
123*4882a593Smuzhiyun
124*4882a593Smuzhiyun	 A key of this type has a description and a payload that are arbitrary
125*4882a593Smuzhiyun	 blobs of data. These can be created, updated and read by userspace,
126*4882a593Smuzhiyun	 and aren't intended for use by kernel services.
127*4882a593Smuzhiyun
128*4882a593Smuzhiyun     (+) "logon"
129*4882a593Smuzhiyun
130*4882a593Smuzhiyun	 Like a "user" key, a "logon" key has a payload that is an arbitrary
131*4882a593Smuzhiyun	 blob of data. It is intended as a place to store secrets which are
132*4882a593Smuzhiyun	 accessible to the kernel but not to userspace programs.
133*4882a593Smuzhiyun
134*4882a593Smuzhiyun	 The description can be arbitrary, but must be prefixed with a non-zero
135*4882a593Smuzhiyun	 length string that describes the key "subclass". The subclass is
136*4882a593Smuzhiyun	 separated from the rest of the description by a ':'. "logon" keys can
137*4882a593Smuzhiyun	 be created and updated from userspace, but the payload is only
138*4882a593Smuzhiyun	 readable from kernel space.
139*4882a593Smuzhiyun
140*4882a593Smuzhiyun  *  Each process subscribes to three keyrings: a thread-specific keyring, a
141*4882a593Smuzhiyun     process-specific keyring, and a session-specific keyring.
142*4882a593Smuzhiyun
143*4882a593Smuzhiyun     The thread-specific keyring is discarded from the child when any sort of
144*4882a593Smuzhiyun     clone, fork, vfork or execve occurs. A new keyring is created only when
145*4882a593Smuzhiyun     required.
146*4882a593Smuzhiyun
147*4882a593Smuzhiyun     The process-specific keyring is replaced with an empty one in the child on
148*4882a593Smuzhiyun     clone, fork, vfork unless CLONE_THREAD is supplied, in which case it is
149*4882a593Smuzhiyun     shared. execve also discards the process's process keyring and creates a
150*4882a593Smuzhiyun     new one.
151*4882a593Smuzhiyun
152*4882a593Smuzhiyun     The session-specific keyring is persistent across clone, fork, vfork and
153*4882a593Smuzhiyun     execve, even when the latter executes a set-UID or set-GID binary. A
154*4882a593Smuzhiyun     process can, however, replace its current session keyring with a new one
155*4882a593Smuzhiyun     by using PR_JOIN_SESSION_KEYRING. It is permitted to request an anonymous
156*4882a593Smuzhiyun     new one, or to attempt to create or join one of a specific name.
157*4882a593Smuzhiyun
158*4882a593Smuzhiyun     The ownership of the thread keyring changes when the real UID and GID of
159*4882a593Smuzhiyun     the thread changes.
160*4882a593Smuzhiyun
161*4882a593Smuzhiyun  *  Each user ID resident in the system holds two special keyrings: a user
162*4882a593Smuzhiyun     specific keyring and a default user session keyring. The default session
163*4882a593Smuzhiyun     keyring is initialised with a link to the user-specific keyring.
164*4882a593Smuzhiyun
165*4882a593Smuzhiyun     When a process changes its real UID, if it used to have no session key, it
166*4882a593Smuzhiyun     will be subscribed to the default session key for the new UID.
167*4882a593Smuzhiyun
168*4882a593Smuzhiyun     If a process attempts to access its session key when it doesn't have one,
169*4882a593Smuzhiyun     it will be subscribed to the default for its current UID.
170*4882a593Smuzhiyun
171*4882a593Smuzhiyun  *  Each user has two quotas against which the keys they own are tracked. One
172*4882a593Smuzhiyun     limits the total number of keys and keyrings, the other limits the total
173*4882a593Smuzhiyun     amount of description and payload space that can be consumed.
174*4882a593Smuzhiyun
175*4882a593Smuzhiyun     The user can view information on this and other statistics through procfs
176*4882a593Smuzhiyun     files.  The root user may also alter the quota limits through sysctl files
177*4882a593Smuzhiyun     (see the section "New procfs files").
178*4882a593Smuzhiyun
179*4882a593Smuzhiyun     Process-specific and thread-specific keyrings are not counted towards a
180*4882a593Smuzhiyun     user's quota.
181*4882a593Smuzhiyun
182*4882a593Smuzhiyun     If a system call that modifies a key or keyring in some way would put the
183*4882a593Smuzhiyun     user over quota, the operation is refused and error EDQUOT is returned.
184*4882a593Smuzhiyun
185*4882a593Smuzhiyun  *  There's a system call interface by which userspace programs can create and
186*4882a593Smuzhiyun     manipulate keys and keyrings.
187*4882a593Smuzhiyun
188*4882a593Smuzhiyun  *  There's a kernel interface by which services can register types and search
189*4882a593Smuzhiyun     for keys.
190*4882a593Smuzhiyun
191*4882a593Smuzhiyun  *  There's a way for the a search done from the kernel to call back to
192*4882a593Smuzhiyun     userspace to request a key that can't be found in a process's keyrings.
193*4882a593Smuzhiyun
194*4882a593Smuzhiyun  *  An optional filesystem is available through which the key database can be
195*4882a593Smuzhiyun     viewed and manipulated.
196*4882a593Smuzhiyun
197*4882a593Smuzhiyun
198*4882a593SmuzhiyunKey Access Permissions
199*4882a593Smuzhiyun======================
200*4882a593Smuzhiyun
201*4882a593SmuzhiyunKeys have an owner user ID, a group access ID, and a permissions mask. The mask
202*4882a593Smuzhiyunhas up to eight bits each for possessor, user, group and other access. Only
203*4882a593Smuzhiyunsix of each set of eight bits are defined. These permissions granted are:
204*4882a593Smuzhiyun
205*4882a593Smuzhiyun  *  View
206*4882a593Smuzhiyun
207*4882a593Smuzhiyun     This permits a key or keyring's attributes to be viewed - including key
208*4882a593Smuzhiyun     type and description.
209*4882a593Smuzhiyun
210*4882a593Smuzhiyun  *  Read
211*4882a593Smuzhiyun
212*4882a593Smuzhiyun     This permits a key's payload to be viewed or a keyring's list of linked
213*4882a593Smuzhiyun     keys.
214*4882a593Smuzhiyun
215*4882a593Smuzhiyun  *  Write
216*4882a593Smuzhiyun
217*4882a593Smuzhiyun     This permits a key's payload to be instantiated or updated, or it allows a
218*4882a593Smuzhiyun     link to be added to or removed from a keyring.
219*4882a593Smuzhiyun
220*4882a593Smuzhiyun  *  Search
221*4882a593Smuzhiyun
222*4882a593Smuzhiyun     This permits keyrings to be searched and keys to be found. Searches can
223*4882a593Smuzhiyun     only recurse into nested keyrings that have search permission set.
224*4882a593Smuzhiyun
225*4882a593Smuzhiyun  *  Link
226*4882a593Smuzhiyun
227*4882a593Smuzhiyun     This permits a key or keyring to be linked to. To create a link from a
228*4882a593Smuzhiyun     keyring to a key, a process must have Write permission on the keyring and
229*4882a593Smuzhiyun     Link permission on the key.
230*4882a593Smuzhiyun
231*4882a593Smuzhiyun  *  Set Attribute
232*4882a593Smuzhiyun
233*4882a593Smuzhiyun     This permits a key's UID, GID and permissions mask to be changed.
234*4882a593Smuzhiyun
235*4882a593SmuzhiyunFor changing the ownership, group ID or permissions mask, being the owner of
236*4882a593Smuzhiyunthe key or having the sysadmin capability is sufficient.
237*4882a593Smuzhiyun
238*4882a593Smuzhiyun
239*4882a593SmuzhiyunSELinux Support
240*4882a593Smuzhiyun===============
241*4882a593Smuzhiyun
242*4882a593SmuzhiyunThe security class "key" has been added to SELinux so that mandatory access
243*4882a593Smuzhiyuncontrols can be applied to keys created within various contexts.  This support
244*4882a593Smuzhiyunis preliminary, and is likely to change quite significantly in the near future.
245*4882a593SmuzhiyunCurrently, all of the basic permissions explained above are provided in SELinux
246*4882a593Smuzhiyunas well; SELinux is simply invoked after all basic permission checks have been
247*4882a593Smuzhiyunperformed.
248*4882a593Smuzhiyun
249*4882a593SmuzhiyunThe value of the file /proc/self/attr/keycreate influences the labeling of
250*4882a593Smuzhiyunnewly-created keys.  If the contents of that file correspond to an SELinux
251*4882a593Smuzhiyunsecurity context, then the key will be assigned that context.  Otherwise, the
252*4882a593Smuzhiyunkey will be assigned the current context of the task that invoked the key
253*4882a593Smuzhiyuncreation request.  Tasks must be granted explicit permission to assign a
254*4882a593Smuzhiyunparticular context to newly-created keys, using the "create" permission in the
255*4882a593Smuzhiyunkey security class.
256*4882a593Smuzhiyun
257*4882a593SmuzhiyunThe default keyrings associated with users will be labeled with the default
258*4882a593Smuzhiyuncontext of the user if and only if the login programs have been instrumented to
259*4882a593Smuzhiyunproperly initialize keycreate during the login process.  Otherwise, they will
260*4882a593Smuzhiyunbe labeled with the context of the login program itself.
261*4882a593Smuzhiyun
262*4882a593SmuzhiyunNote, however, that the default keyrings associated with the root user are
263*4882a593Smuzhiyunlabeled with the default kernel context, since they are created early in the
264*4882a593Smuzhiyunboot process, before root has a chance to log in.
265*4882a593Smuzhiyun
266*4882a593SmuzhiyunThe keyrings associated with new threads are each labeled with the context of
267*4882a593Smuzhiyuntheir associated thread, and both session and process keyrings are handled
268*4882a593Smuzhiyunsimilarly.
269*4882a593Smuzhiyun
270*4882a593Smuzhiyun
271*4882a593SmuzhiyunNew ProcFS Files
272*4882a593Smuzhiyun================
273*4882a593Smuzhiyun
274*4882a593SmuzhiyunTwo files have been added to procfs by which an administrator can find out
275*4882a593Smuzhiyunabout the status of the key service:
276*4882a593Smuzhiyun
277*4882a593Smuzhiyun  *  /proc/keys
278*4882a593Smuzhiyun
279*4882a593Smuzhiyun     This lists the keys that are currently viewable by the task reading the
280*4882a593Smuzhiyun     file, giving information about their type, description and permissions.
281*4882a593Smuzhiyun     It is not possible to view the payload of the key this way, though some
282*4882a593Smuzhiyun     information about it may be given.
283*4882a593Smuzhiyun
284*4882a593Smuzhiyun     The only keys included in the list are those that grant View permission to
285*4882a593Smuzhiyun     the reading process whether or not it possesses them.  Note that LSM
286*4882a593Smuzhiyun     security checks are still performed, and may further filter out keys that
287*4882a593Smuzhiyun     the current process is not authorised to view.
288*4882a593Smuzhiyun
289*4882a593Smuzhiyun     The contents of the file look like this::
290*4882a593Smuzhiyun
291*4882a593Smuzhiyun	SERIAL   FLAGS  USAGE EXPY PERM     UID   GID   TYPE      DESCRIPTION: SUMMARY
292*4882a593Smuzhiyun	00000001 I-----    39 perm 1f3f0000     0     0 keyring   _uid_ses.0: 1/4
293*4882a593Smuzhiyun	00000002 I-----     2 perm 1f3f0000     0     0 keyring   _uid.0: empty
294*4882a593Smuzhiyun	00000007 I-----     1 perm 1f3f0000     0     0 keyring   _pid.1: empty
295*4882a593Smuzhiyun	0000018d I-----     1 perm 1f3f0000     0     0 keyring   _pid.412: empty
296*4882a593Smuzhiyun	000004d2 I--Q--     1 perm 1f3f0000    32    -1 keyring   _uid.32: 1/4
297*4882a593Smuzhiyun	000004d3 I--Q--     3 perm 1f3f0000    32    -1 keyring   _uid_ses.32: empty
298*4882a593Smuzhiyun	00000892 I--QU-     1 perm 1f000000     0     0 user      metal:copper: 0
299*4882a593Smuzhiyun	00000893 I--Q-N     1  35s 1f3f0000     0     0 user      metal:silver: 0
300*4882a593Smuzhiyun	00000894 I--Q--     1  10h 003f0000     0     0 user      metal:gold: 0
301*4882a593Smuzhiyun
302*4882a593Smuzhiyun     The flags are::
303*4882a593Smuzhiyun
304*4882a593Smuzhiyun	I	Instantiated
305*4882a593Smuzhiyun	R	Revoked
306*4882a593Smuzhiyun	D	Dead
307*4882a593Smuzhiyun	Q	Contributes to user's quota
308*4882a593Smuzhiyun	U	Under construction by callback to userspace
309*4882a593Smuzhiyun	N	Negative key
310*4882a593Smuzhiyun
311*4882a593Smuzhiyun
312*4882a593Smuzhiyun  *  /proc/key-users
313*4882a593Smuzhiyun
314*4882a593Smuzhiyun     This file lists the tracking data for each user that has at least one key
315*4882a593Smuzhiyun     on the system.  Such data includes quota information and statistics::
316*4882a593Smuzhiyun
317*4882a593Smuzhiyun	[root@andromeda root]# cat /proc/key-users
318*4882a593Smuzhiyun	0:     46 45/45 1/100 13/10000
319*4882a593Smuzhiyun	29:     2 2/2 2/100 40/10000
320*4882a593Smuzhiyun	32:     2 2/2 2/100 40/10000
321*4882a593Smuzhiyun	38:     2 2/2 2/100 40/10000
322*4882a593Smuzhiyun
323*4882a593Smuzhiyun     The format of each line is::
324*4882a593Smuzhiyun
325*4882a593Smuzhiyun	<UID>:			User ID to which this applies
326*4882a593Smuzhiyun	<usage>			Structure refcount
327*4882a593Smuzhiyun	<inst>/<keys>		Total number of keys and number instantiated
328*4882a593Smuzhiyun	<keys>/<max>		Key count quota
329*4882a593Smuzhiyun	<bytes>/<max>		Key size quota
330*4882a593Smuzhiyun
331*4882a593Smuzhiyun
332*4882a593SmuzhiyunFour new sysctl files have been added also for the purpose of controlling the
333*4882a593Smuzhiyunquota limits on keys:
334*4882a593Smuzhiyun
335*4882a593Smuzhiyun  *  /proc/sys/kernel/keys/root_maxkeys
336*4882a593Smuzhiyun     /proc/sys/kernel/keys/root_maxbytes
337*4882a593Smuzhiyun
338*4882a593Smuzhiyun     These files hold the maximum number of keys that root may have and the
339*4882a593Smuzhiyun     maximum total number of bytes of data that root may have stored in those
340*4882a593Smuzhiyun     keys.
341*4882a593Smuzhiyun
342*4882a593Smuzhiyun  *  /proc/sys/kernel/keys/maxkeys
343*4882a593Smuzhiyun     /proc/sys/kernel/keys/maxbytes
344*4882a593Smuzhiyun
345*4882a593Smuzhiyun     These files hold the maximum number of keys that each non-root user may
346*4882a593Smuzhiyun     have and the maximum total number of bytes of data that each of those
347*4882a593Smuzhiyun     users may have stored in their keys.
348*4882a593Smuzhiyun
349*4882a593SmuzhiyunRoot may alter these by writing each new limit as a decimal number string to
350*4882a593Smuzhiyunthe appropriate file.
351*4882a593Smuzhiyun
352*4882a593Smuzhiyun
353*4882a593SmuzhiyunUserspace System Call Interface
354*4882a593Smuzhiyun===============================
355*4882a593Smuzhiyun
356*4882a593SmuzhiyunUserspace can manipulate keys directly through three new syscalls: add_key,
357*4882a593Smuzhiyunrequest_key and keyctl. The latter provides a number of functions for
358*4882a593Smuzhiyunmanipulating keys.
359*4882a593Smuzhiyun
360*4882a593SmuzhiyunWhen referring to a key directly, userspace programs should use the key's
361*4882a593Smuzhiyunserial number (a positive 32-bit integer). However, there are some special
362*4882a593Smuzhiyunvalues available for referring to special keys and keyrings that relate to the
363*4882a593Smuzhiyunprocess making the call::
364*4882a593Smuzhiyun
365*4882a593Smuzhiyun	CONSTANT			VALUE	KEY REFERENCED
366*4882a593Smuzhiyun	==============================	======	===========================
367*4882a593Smuzhiyun	KEY_SPEC_THREAD_KEYRING		-1	thread-specific keyring
368*4882a593Smuzhiyun	KEY_SPEC_PROCESS_KEYRING	-2	process-specific keyring
369*4882a593Smuzhiyun	KEY_SPEC_SESSION_KEYRING	-3	session-specific keyring
370*4882a593Smuzhiyun	KEY_SPEC_USER_KEYRING		-4	UID-specific keyring
371*4882a593Smuzhiyun	KEY_SPEC_USER_SESSION_KEYRING	-5	UID-session keyring
372*4882a593Smuzhiyun	KEY_SPEC_GROUP_KEYRING		-6	GID-specific keyring
373*4882a593Smuzhiyun	KEY_SPEC_REQKEY_AUTH_KEY	-7	assumed request_key()
374*4882a593Smuzhiyun						  authorisation key
375*4882a593Smuzhiyun
376*4882a593Smuzhiyun
377*4882a593SmuzhiyunThe main syscalls are:
378*4882a593Smuzhiyun
379*4882a593Smuzhiyun  *  Create a new key of given type, description and payload and add it to the
380*4882a593Smuzhiyun     nominated keyring::
381*4882a593Smuzhiyun
382*4882a593Smuzhiyun	key_serial_t add_key(const char *type, const char *desc,
383*4882a593Smuzhiyun			     const void *payload, size_t plen,
384*4882a593Smuzhiyun			     key_serial_t keyring);
385*4882a593Smuzhiyun
386*4882a593Smuzhiyun     If a key of the same type and description as that proposed already exists
387*4882a593Smuzhiyun     in the keyring, this will try to update it with the given payload, or it
388*4882a593Smuzhiyun     will return error EEXIST if that function is not supported by the key
389*4882a593Smuzhiyun     type. The process must also have permission to write to the key to be able
390*4882a593Smuzhiyun     to update it. The new key will have all user permissions granted and no
391*4882a593Smuzhiyun     group or third party permissions.
392*4882a593Smuzhiyun
393*4882a593Smuzhiyun     Otherwise, this will attempt to create a new key of the specified type and
394*4882a593Smuzhiyun     description, and to instantiate it with the supplied payload and attach it
395*4882a593Smuzhiyun     to the keyring. In this case, an error will be generated if the process
396*4882a593Smuzhiyun     does not have permission to write to the keyring.
397*4882a593Smuzhiyun
398*4882a593Smuzhiyun     If the key type supports it, if the description is NULL or an empty
399*4882a593Smuzhiyun     string, the key type will try and generate a description from the content
400*4882a593Smuzhiyun     of the payload.
401*4882a593Smuzhiyun
402*4882a593Smuzhiyun     The payload is optional, and the pointer can be NULL if not required by
403*4882a593Smuzhiyun     the type. The payload is plen in size, and plen can be zero for an empty
404*4882a593Smuzhiyun     payload.
405*4882a593Smuzhiyun
406*4882a593Smuzhiyun     A new keyring can be generated by setting type "keyring", the keyring name
407*4882a593Smuzhiyun     as the description (or NULL) and setting the payload to NULL.
408*4882a593Smuzhiyun
409*4882a593Smuzhiyun     User defined keys can be created by specifying type "user". It is
410*4882a593Smuzhiyun     recommended that a user defined key's description by prefixed with a type
411*4882a593Smuzhiyun     ID and a colon, such as "krb5tgt:" for a Kerberos 5 ticket granting
412*4882a593Smuzhiyun     ticket.
413*4882a593Smuzhiyun
414*4882a593Smuzhiyun     Any other type must have been registered with the kernel in advance by a
415*4882a593Smuzhiyun     kernel service such as a filesystem.
416*4882a593Smuzhiyun
417*4882a593Smuzhiyun     The ID of the new or updated key is returned if successful.
418*4882a593Smuzhiyun
419*4882a593Smuzhiyun
420*4882a593Smuzhiyun  *  Search the process's keyrings for a key, potentially calling out to
421*4882a593Smuzhiyun     userspace to create it::
422*4882a593Smuzhiyun
423*4882a593Smuzhiyun	key_serial_t request_key(const char *type, const char *description,
424*4882a593Smuzhiyun				 const char *callout_info,
425*4882a593Smuzhiyun				 key_serial_t dest_keyring);
426*4882a593Smuzhiyun
427*4882a593Smuzhiyun     This function searches all the process's keyrings in the order thread,
428*4882a593Smuzhiyun     process, session for a matching key. This works very much like
429*4882a593Smuzhiyun     KEYCTL_SEARCH, including the optional attachment of the discovered key to
430*4882a593Smuzhiyun     a keyring.
431*4882a593Smuzhiyun
432*4882a593Smuzhiyun     If a key cannot be found, and if callout_info is not NULL, then
433*4882a593Smuzhiyun     /sbin/request-key will be invoked in an attempt to obtain a key. The
434*4882a593Smuzhiyun     callout_info string will be passed as an argument to the program.
435*4882a593Smuzhiyun
436*4882a593Smuzhiyun     To link a key into the destination keyring the key must grant link
437*4882a593Smuzhiyun     permission on the key to the caller and the keyring must grant write
438*4882a593Smuzhiyun     permission.
439*4882a593Smuzhiyun
440*4882a593Smuzhiyun     See also Documentation/security/keys/request-key.rst.
441*4882a593Smuzhiyun
442*4882a593Smuzhiyun
443*4882a593SmuzhiyunThe keyctl syscall functions are:
444*4882a593Smuzhiyun
445*4882a593Smuzhiyun  *  Map a special key ID to a real key ID for this process::
446*4882a593Smuzhiyun
447*4882a593Smuzhiyun	key_serial_t keyctl(KEYCTL_GET_KEYRING_ID, key_serial_t id,
448*4882a593Smuzhiyun			    int create);
449*4882a593Smuzhiyun
450*4882a593Smuzhiyun     The special key specified by "id" is looked up (with the key being created
451*4882a593Smuzhiyun     if necessary) and the ID of the key or keyring thus found is returned if
452*4882a593Smuzhiyun     it exists.
453*4882a593Smuzhiyun
454*4882a593Smuzhiyun     If the key does not yet exist, the key will be created if "create" is
455*4882a593Smuzhiyun     non-zero; and the error ENOKEY will be returned if "create" is zero.
456*4882a593Smuzhiyun
457*4882a593Smuzhiyun
458*4882a593Smuzhiyun  *  Replace the session keyring this process subscribes to with a new one::
459*4882a593Smuzhiyun
460*4882a593Smuzhiyun	key_serial_t keyctl(KEYCTL_JOIN_SESSION_KEYRING, const char *name);
461*4882a593Smuzhiyun
462*4882a593Smuzhiyun     If name is NULL, an anonymous keyring is created attached to the process
463*4882a593Smuzhiyun     as its session keyring, displacing the old session keyring.
464*4882a593Smuzhiyun
465*4882a593Smuzhiyun     If name is not NULL, if a keyring of that name exists, the process
466*4882a593Smuzhiyun     attempts to attach it as the session keyring, returning an error if that
467*4882a593Smuzhiyun     is not permitted; otherwise a new keyring of that name is created and
468*4882a593Smuzhiyun     attached as the session keyring.
469*4882a593Smuzhiyun
470*4882a593Smuzhiyun     To attach to a named keyring, the keyring must have search permission for
471*4882a593Smuzhiyun     the process's ownership.
472*4882a593Smuzhiyun
473*4882a593Smuzhiyun     The ID of the new session keyring is returned if successful.
474*4882a593Smuzhiyun
475*4882a593Smuzhiyun
476*4882a593Smuzhiyun  *  Update the specified key::
477*4882a593Smuzhiyun
478*4882a593Smuzhiyun	long keyctl(KEYCTL_UPDATE, key_serial_t key, const void *payload,
479*4882a593Smuzhiyun		    size_t plen);
480*4882a593Smuzhiyun
481*4882a593Smuzhiyun     This will try to update the specified key with the given payload, or it
482*4882a593Smuzhiyun     will return error EOPNOTSUPP if that function is not supported by the key
483*4882a593Smuzhiyun     type. The process must also have permission to write to the key to be able
484*4882a593Smuzhiyun     to update it.
485*4882a593Smuzhiyun
486*4882a593Smuzhiyun     The payload is of length plen, and may be absent or empty as for
487*4882a593Smuzhiyun     add_key().
488*4882a593Smuzhiyun
489*4882a593Smuzhiyun
490*4882a593Smuzhiyun  *  Revoke a key::
491*4882a593Smuzhiyun
492*4882a593Smuzhiyun	long keyctl(KEYCTL_REVOKE, key_serial_t key);
493*4882a593Smuzhiyun
494*4882a593Smuzhiyun     This makes a key unavailable for further operations. Further attempts to
495*4882a593Smuzhiyun     use the key will be met with error EKEYREVOKED, and the key will no longer
496*4882a593Smuzhiyun     be findable.
497*4882a593Smuzhiyun
498*4882a593Smuzhiyun
499*4882a593Smuzhiyun  *  Change the ownership of a key::
500*4882a593Smuzhiyun
501*4882a593Smuzhiyun	long keyctl(KEYCTL_CHOWN, key_serial_t key, uid_t uid, gid_t gid);
502*4882a593Smuzhiyun
503*4882a593Smuzhiyun     This function permits a key's owner and group ID to be changed. Either one
504*4882a593Smuzhiyun     of uid or gid can be set to -1 to suppress that change.
505*4882a593Smuzhiyun
506*4882a593Smuzhiyun     Only the superuser can change a key's owner to something other than the
507*4882a593Smuzhiyun     key's current owner. Similarly, only the superuser can change a key's
508*4882a593Smuzhiyun     group ID to something other than the calling process's group ID or one of
509*4882a593Smuzhiyun     its group list members.
510*4882a593Smuzhiyun
511*4882a593Smuzhiyun
512*4882a593Smuzhiyun  *  Change the permissions mask on a key::
513*4882a593Smuzhiyun
514*4882a593Smuzhiyun	long keyctl(KEYCTL_SETPERM, key_serial_t key, key_perm_t perm);
515*4882a593Smuzhiyun
516*4882a593Smuzhiyun     This function permits the owner of a key or the superuser to change the
517*4882a593Smuzhiyun     permissions mask on a key.
518*4882a593Smuzhiyun
519*4882a593Smuzhiyun     Only bits the available bits are permitted; if any other bits are set,
520*4882a593Smuzhiyun     error EINVAL will be returned.
521*4882a593Smuzhiyun
522*4882a593Smuzhiyun
523*4882a593Smuzhiyun  *  Describe a key::
524*4882a593Smuzhiyun
525*4882a593Smuzhiyun	long keyctl(KEYCTL_DESCRIBE, key_serial_t key, char *buffer,
526*4882a593Smuzhiyun		    size_t buflen);
527*4882a593Smuzhiyun
528*4882a593Smuzhiyun     This function returns a summary of the key's attributes (but not its
529*4882a593Smuzhiyun     payload data) as a string in the buffer provided.
530*4882a593Smuzhiyun
531*4882a593Smuzhiyun     Unless there's an error, it always returns the amount of data it could
532*4882a593Smuzhiyun     produce, even if that's too big for the buffer, but it won't copy more
533*4882a593Smuzhiyun     than requested to userspace. If the buffer pointer is NULL then no copy
534*4882a593Smuzhiyun     will take place.
535*4882a593Smuzhiyun
536*4882a593Smuzhiyun     A process must have view permission on the key for this function to be
537*4882a593Smuzhiyun     successful.
538*4882a593Smuzhiyun
539*4882a593Smuzhiyun     If successful, a string is placed in the buffer in the following format::
540*4882a593Smuzhiyun
541*4882a593Smuzhiyun	<type>;<uid>;<gid>;<perm>;<description>
542*4882a593Smuzhiyun
543*4882a593Smuzhiyun     Where type and description are strings, uid and gid are decimal, and perm
544*4882a593Smuzhiyun     is hexadecimal. A NUL character is included at the end of the string if
545*4882a593Smuzhiyun     the buffer is sufficiently big.
546*4882a593Smuzhiyun
547*4882a593Smuzhiyun     This can be parsed with::
548*4882a593Smuzhiyun
549*4882a593Smuzhiyun	sscanf(buffer, "%[^;];%d;%d;%o;%s", type, &uid, &gid, &mode, desc);
550*4882a593Smuzhiyun
551*4882a593Smuzhiyun
552*4882a593Smuzhiyun  *  Clear out a keyring::
553*4882a593Smuzhiyun
554*4882a593Smuzhiyun	long keyctl(KEYCTL_CLEAR, key_serial_t keyring);
555*4882a593Smuzhiyun
556*4882a593Smuzhiyun     This function clears the list of keys attached to a keyring. The calling
557*4882a593Smuzhiyun     process must have write permission on the keyring, and it must be a
558*4882a593Smuzhiyun     keyring (or else error ENOTDIR will result).
559*4882a593Smuzhiyun
560*4882a593Smuzhiyun     This function can also be used to clear special kernel keyrings if they
561*4882a593Smuzhiyun     are appropriately marked if the user has CAP_SYS_ADMIN capability.  The
562*4882a593Smuzhiyun     DNS resolver cache keyring is an example of this.
563*4882a593Smuzhiyun
564*4882a593Smuzhiyun
565*4882a593Smuzhiyun  *  Link a key into a keyring::
566*4882a593Smuzhiyun
567*4882a593Smuzhiyun	long keyctl(KEYCTL_LINK, key_serial_t keyring, key_serial_t key);
568*4882a593Smuzhiyun
569*4882a593Smuzhiyun     This function creates a link from the keyring to the key. The process must
570*4882a593Smuzhiyun     have write permission on the keyring and must have link permission on the
571*4882a593Smuzhiyun     key.
572*4882a593Smuzhiyun
573*4882a593Smuzhiyun     Should the keyring not be a keyring, error ENOTDIR will result; and if the
574*4882a593Smuzhiyun     keyring is full, error ENFILE will result.
575*4882a593Smuzhiyun
576*4882a593Smuzhiyun     The link procedure checks the nesting of the keyrings, returning ELOOP if
577*4882a593Smuzhiyun     it appears too deep or EDEADLK if the link would introduce a cycle.
578*4882a593Smuzhiyun
579*4882a593Smuzhiyun     Any links within the keyring to keys that match the new key in terms of
580*4882a593Smuzhiyun     type and description will be discarded from the keyring as the new one is
581*4882a593Smuzhiyun     added.
582*4882a593Smuzhiyun
583*4882a593Smuzhiyun
584*4882a593Smuzhiyun  *  Move a key from one keyring to another::
585*4882a593Smuzhiyun
586*4882a593Smuzhiyun	long keyctl(KEYCTL_MOVE,
587*4882a593Smuzhiyun		    key_serial_t id,
588*4882a593Smuzhiyun		    key_serial_t from_ring_id,
589*4882a593Smuzhiyun		    key_serial_t to_ring_id,
590*4882a593Smuzhiyun		    unsigned int flags);
591*4882a593Smuzhiyun
592*4882a593Smuzhiyun     Move the key specified by "id" from the keyring specified by
593*4882a593Smuzhiyun     "from_ring_id" to the keyring specified by "to_ring_id".  If the two
594*4882a593Smuzhiyun     keyrings are the same, nothing is done.
595*4882a593Smuzhiyun
596*4882a593Smuzhiyun     "flags" can have KEYCTL_MOVE_EXCL set in it to cause the operation to fail
597*4882a593Smuzhiyun     with EEXIST if a matching key exists in the destination keyring, otherwise
598*4882a593Smuzhiyun     such a key will be replaced.
599*4882a593Smuzhiyun
600*4882a593Smuzhiyun     A process must have link permission on the key for this function to be
601*4882a593Smuzhiyun     successful and write permission on both keyrings.  Any errors that can
602*4882a593Smuzhiyun     occur from KEYCTL_LINK also apply on the destination keyring here.
603*4882a593Smuzhiyun
604*4882a593Smuzhiyun
605*4882a593Smuzhiyun  *  Unlink a key or keyring from another keyring::
606*4882a593Smuzhiyun
607*4882a593Smuzhiyun	long keyctl(KEYCTL_UNLINK, key_serial_t keyring, key_serial_t key);
608*4882a593Smuzhiyun
609*4882a593Smuzhiyun     This function looks through the keyring for the first link to the
610*4882a593Smuzhiyun     specified key, and removes it if found. Subsequent links to that key are
611*4882a593Smuzhiyun     ignored. The process must have write permission on the keyring.
612*4882a593Smuzhiyun
613*4882a593Smuzhiyun     If the keyring is not a keyring, error ENOTDIR will result; and if the key
614*4882a593Smuzhiyun     is not present, error ENOENT will be the result.
615*4882a593Smuzhiyun
616*4882a593Smuzhiyun
617*4882a593Smuzhiyun  *  Search a keyring tree for a key::
618*4882a593Smuzhiyun
619*4882a593Smuzhiyun	key_serial_t keyctl(KEYCTL_SEARCH, key_serial_t keyring,
620*4882a593Smuzhiyun			    const char *type, const char *description,
621*4882a593Smuzhiyun			    key_serial_t dest_keyring);
622*4882a593Smuzhiyun
623*4882a593Smuzhiyun     This searches the keyring tree headed by the specified keyring until a key
624*4882a593Smuzhiyun     is found that matches the type and description criteria. Each keyring is
625*4882a593Smuzhiyun     checked for keys before recursion into its children occurs.
626*4882a593Smuzhiyun
627*4882a593Smuzhiyun     The process must have search permission on the top level keyring, or else
628*4882a593Smuzhiyun     error EACCES will result. Only keyrings that the process has search
629*4882a593Smuzhiyun     permission on will be recursed into, and only keys and keyrings for which
630*4882a593Smuzhiyun     a process has search permission can be matched. If the specified keyring
631*4882a593Smuzhiyun     is not a keyring, ENOTDIR will result.
632*4882a593Smuzhiyun
633*4882a593Smuzhiyun     If the search succeeds, the function will attempt to link the found key
634*4882a593Smuzhiyun     into the destination keyring if one is supplied (non-zero ID). All the
635*4882a593Smuzhiyun     constraints applicable to KEYCTL_LINK apply in this case too.
636*4882a593Smuzhiyun
637*4882a593Smuzhiyun     Error ENOKEY, EKEYREVOKED or EKEYEXPIRED will be returned if the search
638*4882a593Smuzhiyun     fails. On success, the resulting key ID will be returned.
639*4882a593Smuzhiyun
640*4882a593Smuzhiyun
641*4882a593Smuzhiyun  *  Read the payload data from a key::
642*4882a593Smuzhiyun
643*4882a593Smuzhiyun	long keyctl(KEYCTL_READ, key_serial_t keyring, char *buffer,
644*4882a593Smuzhiyun		    size_t buflen);
645*4882a593Smuzhiyun
646*4882a593Smuzhiyun     This function attempts to read the payload data from the specified key
647*4882a593Smuzhiyun     into the buffer. The process must have read permission on the key to
648*4882a593Smuzhiyun     succeed.
649*4882a593Smuzhiyun
650*4882a593Smuzhiyun     The returned data will be processed for presentation by the key type. For
651*4882a593Smuzhiyun     instance, a keyring will return an array of key_serial_t entries
652*4882a593Smuzhiyun     representing the IDs of all the keys to which it is subscribed. The user
653*4882a593Smuzhiyun     defined key type will return its data as is. If a key type does not
654*4882a593Smuzhiyun     implement this function, error EOPNOTSUPP will result.
655*4882a593Smuzhiyun
656*4882a593Smuzhiyun     If the specified buffer is too small, then the size of the buffer required
657*4882a593Smuzhiyun     will be returned.  Note that in this case, the contents of the buffer may
658*4882a593Smuzhiyun     have been overwritten in some undefined way.
659*4882a593Smuzhiyun
660*4882a593Smuzhiyun     Otherwise, on success, the function will return the amount of data copied
661*4882a593Smuzhiyun     into the buffer.
662*4882a593Smuzhiyun
663*4882a593Smuzhiyun  *  Instantiate a partially constructed key::
664*4882a593Smuzhiyun
665*4882a593Smuzhiyun	long keyctl(KEYCTL_INSTANTIATE, key_serial_t key,
666*4882a593Smuzhiyun		    const void *payload, size_t plen,
667*4882a593Smuzhiyun		    key_serial_t keyring);
668*4882a593Smuzhiyun	long keyctl(KEYCTL_INSTANTIATE_IOV, key_serial_t key,
669*4882a593Smuzhiyun		    const struct iovec *payload_iov, unsigned ioc,
670*4882a593Smuzhiyun		    key_serial_t keyring);
671*4882a593Smuzhiyun
672*4882a593Smuzhiyun     If the kernel calls back to userspace to complete the instantiation of a
673*4882a593Smuzhiyun     key, userspace should use this call to supply data for the key before the
674*4882a593Smuzhiyun     invoked process returns, or else the key will be marked negative
675*4882a593Smuzhiyun     automatically.
676*4882a593Smuzhiyun
677*4882a593Smuzhiyun     The process must have write access on the key to be able to instantiate
678*4882a593Smuzhiyun     it, and the key must be uninstantiated.
679*4882a593Smuzhiyun
680*4882a593Smuzhiyun     If a keyring is specified (non-zero), the key will also be linked into
681*4882a593Smuzhiyun     that keyring, however all the constraints applying in KEYCTL_LINK apply in
682*4882a593Smuzhiyun     this case too.
683*4882a593Smuzhiyun
684*4882a593Smuzhiyun     The payload and plen arguments describe the payload data as for add_key().
685*4882a593Smuzhiyun
686*4882a593Smuzhiyun     The payload_iov and ioc arguments describe the payload data in an iovec
687*4882a593Smuzhiyun     array instead of a single buffer.
688*4882a593Smuzhiyun
689*4882a593Smuzhiyun
690*4882a593Smuzhiyun  *  Negatively instantiate a partially constructed key::
691*4882a593Smuzhiyun
692*4882a593Smuzhiyun	long keyctl(KEYCTL_NEGATE, key_serial_t key,
693*4882a593Smuzhiyun		    unsigned timeout, key_serial_t keyring);
694*4882a593Smuzhiyun	long keyctl(KEYCTL_REJECT, key_serial_t key,
695*4882a593Smuzhiyun		    unsigned timeout, unsigned error, key_serial_t keyring);
696*4882a593Smuzhiyun
697*4882a593Smuzhiyun     If the kernel calls back to userspace to complete the instantiation of a
698*4882a593Smuzhiyun     key, userspace should use this call mark the key as negative before the
699*4882a593Smuzhiyun     invoked process returns if it is unable to fulfill the request.
700*4882a593Smuzhiyun
701*4882a593Smuzhiyun     The process must have write access on the key to be able to instantiate
702*4882a593Smuzhiyun     it, and the key must be uninstantiated.
703*4882a593Smuzhiyun
704*4882a593Smuzhiyun     If a keyring is specified (non-zero), the key will also be linked into
705*4882a593Smuzhiyun     that keyring, however all the constraints applying in KEYCTL_LINK apply in
706*4882a593Smuzhiyun     this case too.
707*4882a593Smuzhiyun
708*4882a593Smuzhiyun     If the key is rejected, future searches for it will return the specified
709*4882a593Smuzhiyun     error code until the rejected key expires.  Negating the key is the same
710*4882a593Smuzhiyun     as rejecting the key with ENOKEY as the error code.
711*4882a593Smuzhiyun
712*4882a593Smuzhiyun
713*4882a593Smuzhiyun  *  Set the default request-key destination keyring::
714*4882a593Smuzhiyun
715*4882a593Smuzhiyun	long keyctl(KEYCTL_SET_REQKEY_KEYRING, int reqkey_defl);
716*4882a593Smuzhiyun
717*4882a593Smuzhiyun     This sets the default keyring to which implicitly requested keys will be
718*4882a593Smuzhiyun     attached for this thread. reqkey_defl should be one of these constants::
719*4882a593Smuzhiyun
720*4882a593Smuzhiyun	CONSTANT				VALUE	NEW DEFAULT KEYRING
721*4882a593Smuzhiyun	======================================	======	=======================
722*4882a593Smuzhiyun	KEY_REQKEY_DEFL_NO_CHANGE		-1	No change
723*4882a593Smuzhiyun	KEY_REQKEY_DEFL_DEFAULT			0	Default[1]
724*4882a593Smuzhiyun	KEY_REQKEY_DEFL_THREAD_KEYRING		1	Thread keyring
725*4882a593Smuzhiyun	KEY_REQKEY_DEFL_PROCESS_KEYRING		2	Process keyring
726*4882a593Smuzhiyun	KEY_REQKEY_DEFL_SESSION_KEYRING		3	Session keyring
727*4882a593Smuzhiyun	KEY_REQKEY_DEFL_USER_KEYRING		4	User keyring
728*4882a593Smuzhiyun	KEY_REQKEY_DEFL_USER_SESSION_KEYRING	5	User session keyring
729*4882a593Smuzhiyun	KEY_REQKEY_DEFL_GROUP_KEYRING		6	Group keyring
730*4882a593Smuzhiyun
731*4882a593Smuzhiyun     The old default will be returned if successful and error EINVAL will be
732*4882a593Smuzhiyun     returned if reqkey_defl is not one of the above values.
733*4882a593Smuzhiyun
734*4882a593Smuzhiyun     The default keyring can be overridden by the keyring indicated to the
735*4882a593Smuzhiyun     request_key() system call.
736*4882a593Smuzhiyun
737*4882a593Smuzhiyun     Note that this setting is inherited across fork/exec.
738*4882a593Smuzhiyun
739*4882a593Smuzhiyun     [1] The default is: the thread keyring if there is one, otherwise
740*4882a593Smuzhiyun     the process keyring if there is one, otherwise the session keyring if
741*4882a593Smuzhiyun     there is one, otherwise the user default session keyring.
742*4882a593Smuzhiyun
743*4882a593Smuzhiyun
744*4882a593Smuzhiyun  *  Set the timeout on a key::
745*4882a593Smuzhiyun
746*4882a593Smuzhiyun	long keyctl(KEYCTL_SET_TIMEOUT, key_serial_t key, unsigned timeout);
747*4882a593Smuzhiyun
748*4882a593Smuzhiyun     This sets or clears the timeout on a key. The timeout can be 0 to clear
749*4882a593Smuzhiyun     the timeout or a number of seconds to set the expiry time that far into
750*4882a593Smuzhiyun     the future.
751*4882a593Smuzhiyun
752*4882a593Smuzhiyun     The process must have attribute modification access on a key to set its
753*4882a593Smuzhiyun     timeout. Timeouts may not be set with this function on negative, revoked
754*4882a593Smuzhiyun     or expired keys.
755*4882a593Smuzhiyun
756*4882a593Smuzhiyun
757*4882a593Smuzhiyun  *  Assume the authority granted to instantiate a key::
758*4882a593Smuzhiyun
759*4882a593Smuzhiyun	long keyctl(KEYCTL_ASSUME_AUTHORITY, key_serial_t key);
760*4882a593Smuzhiyun
761*4882a593Smuzhiyun     This assumes or divests the authority required to instantiate the
762*4882a593Smuzhiyun     specified key. Authority can only be assumed if the thread has the
763*4882a593Smuzhiyun     authorisation key associated with the specified key in its keyrings
764*4882a593Smuzhiyun     somewhere.
765*4882a593Smuzhiyun
766*4882a593Smuzhiyun     Once authority is assumed, searches for keys will also search the
767*4882a593Smuzhiyun     requester's keyrings using the requester's security label, UID, GID and
768*4882a593Smuzhiyun     groups.
769*4882a593Smuzhiyun
770*4882a593Smuzhiyun     If the requested authority is unavailable, error EPERM will be returned,
771*4882a593Smuzhiyun     likewise if the authority has been revoked because the target key is
772*4882a593Smuzhiyun     already instantiated.
773*4882a593Smuzhiyun
774*4882a593Smuzhiyun     If the specified key is 0, then any assumed authority will be divested.
775*4882a593Smuzhiyun
776*4882a593Smuzhiyun     The assumed authoritative key is inherited across fork and exec.
777*4882a593Smuzhiyun
778*4882a593Smuzhiyun
779*4882a593Smuzhiyun  *  Get the LSM security context attached to a key::
780*4882a593Smuzhiyun
781*4882a593Smuzhiyun	long keyctl(KEYCTL_GET_SECURITY, key_serial_t key, char *buffer,
782*4882a593Smuzhiyun		    size_t buflen)
783*4882a593Smuzhiyun
784*4882a593Smuzhiyun     This function returns a string that represents the LSM security context
785*4882a593Smuzhiyun     attached to a key in the buffer provided.
786*4882a593Smuzhiyun
787*4882a593Smuzhiyun     Unless there's an error, it always returns the amount of data it could
788*4882a593Smuzhiyun     produce, even if that's too big for the buffer, but it won't copy more
789*4882a593Smuzhiyun     than requested to userspace. If the buffer pointer is NULL then no copy
790*4882a593Smuzhiyun     will take place.
791*4882a593Smuzhiyun
792*4882a593Smuzhiyun     A NUL character is included at the end of the string if the buffer is
793*4882a593Smuzhiyun     sufficiently big.  This is included in the returned count.  If no LSM is
794*4882a593Smuzhiyun     in force then an empty string will be returned.
795*4882a593Smuzhiyun
796*4882a593Smuzhiyun     A process must have view permission on the key for this function to be
797*4882a593Smuzhiyun     successful.
798*4882a593Smuzhiyun
799*4882a593Smuzhiyun
800*4882a593Smuzhiyun  *  Install the calling process's session keyring on its parent::
801*4882a593Smuzhiyun
802*4882a593Smuzhiyun	long keyctl(KEYCTL_SESSION_TO_PARENT);
803*4882a593Smuzhiyun
804*4882a593Smuzhiyun     This functions attempts to install the calling process's session keyring
805*4882a593Smuzhiyun     on to the calling process's parent, replacing the parent's current session
806*4882a593Smuzhiyun     keyring.
807*4882a593Smuzhiyun
808*4882a593Smuzhiyun     The calling process must have the same ownership as its parent, the
809*4882a593Smuzhiyun     keyring must have the same ownership as the calling process, the calling
810*4882a593Smuzhiyun     process must have LINK permission on the keyring and the active LSM module
811*4882a593Smuzhiyun     mustn't deny permission, otherwise error EPERM will be returned.
812*4882a593Smuzhiyun
813*4882a593Smuzhiyun     Error ENOMEM will be returned if there was insufficient memory to complete
814*4882a593Smuzhiyun     the operation, otherwise 0 will be returned to indicate success.
815*4882a593Smuzhiyun
816*4882a593Smuzhiyun     The keyring will be replaced next time the parent process leaves the
817*4882a593Smuzhiyun     kernel and resumes executing userspace.
818*4882a593Smuzhiyun
819*4882a593Smuzhiyun
820*4882a593Smuzhiyun  *  Invalidate a key::
821*4882a593Smuzhiyun
822*4882a593Smuzhiyun	long keyctl(KEYCTL_INVALIDATE, key_serial_t key);
823*4882a593Smuzhiyun
824*4882a593Smuzhiyun     This function marks a key as being invalidated and then wakes up the
825*4882a593Smuzhiyun     garbage collector.  The garbage collector immediately removes invalidated
826*4882a593Smuzhiyun     keys from all keyrings and deletes the key when its reference count
827*4882a593Smuzhiyun     reaches zero.
828*4882a593Smuzhiyun
829*4882a593Smuzhiyun     Keys that are marked invalidated become invisible to normal key operations
830*4882a593Smuzhiyun     immediately, though they are still visible in /proc/keys until deleted
831*4882a593Smuzhiyun     (they're marked with an 'i' flag).
832*4882a593Smuzhiyun
833*4882a593Smuzhiyun     A process must have search permission on the key for this function to be
834*4882a593Smuzhiyun     successful.
835*4882a593Smuzhiyun
836*4882a593Smuzhiyun  *  Compute a Diffie-Hellman shared secret or public key::
837*4882a593Smuzhiyun
838*4882a593Smuzhiyun	long keyctl(KEYCTL_DH_COMPUTE, struct keyctl_dh_params *params,
839*4882a593Smuzhiyun		    char *buffer, size_t buflen, struct keyctl_kdf_params *kdf);
840*4882a593Smuzhiyun
841*4882a593Smuzhiyun     The params struct contains serial numbers for three keys::
842*4882a593Smuzhiyun
843*4882a593Smuzhiyun	 - The prime, p, known to both parties
844*4882a593Smuzhiyun	 - The local private key
845*4882a593Smuzhiyun	 - The base integer, which is either a shared generator or the
846*4882a593Smuzhiyun	   remote public key
847*4882a593Smuzhiyun
848*4882a593Smuzhiyun     The value computed is::
849*4882a593Smuzhiyun
850*4882a593Smuzhiyun	result = base ^ private (mod prime)
851*4882a593Smuzhiyun
852*4882a593Smuzhiyun     If the base is the shared generator, the result is the local
853*4882a593Smuzhiyun     public key.  If the base is the remote public key, the result is
854*4882a593Smuzhiyun     the shared secret.
855*4882a593Smuzhiyun
856*4882a593Smuzhiyun     If the parameter kdf is NULL, the following applies:
857*4882a593Smuzhiyun
858*4882a593Smuzhiyun	 - The buffer length must be at least the length of the prime, or zero.
859*4882a593Smuzhiyun
860*4882a593Smuzhiyun	 - If the buffer length is nonzero, the length of the result is
861*4882a593Smuzhiyun	   returned when it is successfully calculated and copied in to the
862*4882a593Smuzhiyun	   buffer. When the buffer length is zero, the minimum required
863*4882a593Smuzhiyun	   buffer length is returned.
864*4882a593Smuzhiyun
865*4882a593Smuzhiyun     The kdf parameter allows the caller to apply a key derivation function
866*4882a593Smuzhiyun     (KDF) on the Diffie-Hellman computation where only the result
867*4882a593Smuzhiyun     of the KDF is returned to the caller. The KDF is characterized with
868*4882a593Smuzhiyun     struct keyctl_kdf_params as follows:
869*4882a593Smuzhiyun
870*4882a593Smuzhiyun	 - ``char *hashname`` specifies the NUL terminated string identifying
871*4882a593Smuzhiyun	   the hash used from the kernel crypto API and applied for the KDF
872*4882a593Smuzhiyun	   operation. The KDF implemenation complies with SP800-56A as well
873*4882a593Smuzhiyun	   as with SP800-108 (the counter KDF).
874*4882a593Smuzhiyun
875*4882a593Smuzhiyun	 - ``char *otherinfo`` specifies the OtherInfo data as documented in
876*4882a593Smuzhiyun	   SP800-56A section 5.8.1.2. The length of the buffer is given with
877*4882a593Smuzhiyun	   otherinfolen. The format of OtherInfo is defined by the caller.
878*4882a593Smuzhiyun	   The otherinfo pointer may be NULL if no OtherInfo shall be used.
879*4882a593Smuzhiyun
880*4882a593Smuzhiyun     This function will return error EOPNOTSUPP if the key type is not
881*4882a593Smuzhiyun     supported, error ENOKEY if the key could not be found, or error
882*4882a593Smuzhiyun     EACCES if the key is not readable by the caller. In addition, the
883*4882a593Smuzhiyun     function will return EMSGSIZE when the parameter kdf is non-NULL
884*4882a593Smuzhiyun     and either the buffer length or the OtherInfo length exceeds the
885*4882a593Smuzhiyun     allowed length.
886*4882a593Smuzhiyun
887*4882a593Smuzhiyun
888*4882a593Smuzhiyun  *  Restrict keyring linkage::
889*4882a593Smuzhiyun
890*4882a593Smuzhiyun	long keyctl(KEYCTL_RESTRICT_KEYRING, key_serial_t keyring,
891*4882a593Smuzhiyun		    const char *type, const char *restriction);
892*4882a593Smuzhiyun
893*4882a593Smuzhiyun     An existing keyring can restrict linkage of additional keys by evaluating
894*4882a593Smuzhiyun     the contents of the key according to a restriction scheme.
895*4882a593Smuzhiyun
896*4882a593Smuzhiyun     "keyring" is the key ID for an existing keyring to apply a restriction
897*4882a593Smuzhiyun     to. It may be empty or may already have keys linked. Existing linked keys
898*4882a593Smuzhiyun     will remain in the keyring even if the new restriction would reject them.
899*4882a593Smuzhiyun
900*4882a593Smuzhiyun     "type" is a registered key type.
901*4882a593Smuzhiyun
902*4882a593Smuzhiyun     "restriction" is a string describing how key linkage is to be restricted.
903*4882a593Smuzhiyun     The format varies depending on the key type, and the string is passed to
904*4882a593Smuzhiyun     the lookup_restriction() function for the requested type.  It may specify
905*4882a593Smuzhiyun     a method and relevant data for the restriction such as signature
906*4882a593Smuzhiyun     verification or constraints on key payload. If the requested key type is
907*4882a593Smuzhiyun     later unregistered, no keys may be added to the keyring after the key type
908*4882a593Smuzhiyun     is removed.
909*4882a593Smuzhiyun
910*4882a593Smuzhiyun     To apply a keyring restriction the process must have Set Attribute
911*4882a593Smuzhiyun     permission and the keyring must not be previously restricted.
912*4882a593Smuzhiyun
913*4882a593Smuzhiyun     One application of restricted keyrings is to verify X.509 certificate
914*4882a593Smuzhiyun     chains or individual certificate signatures using the asymmetric key type.
915*4882a593Smuzhiyun     See Documentation/crypto/asymmetric-keys.rst for specific restrictions
916*4882a593Smuzhiyun     applicable to the asymmetric key type.
917*4882a593Smuzhiyun
918*4882a593Smuzhiyun
919*4882a593Smuzhiyun  *  Query an asymmetric key::
920*4882a593Smuzhiyun
921*4882a593Smuzhiyun	long keyctl(KEYCTL_PKEY_QUERY,
922*4882a593Smuzhiyun		    key_serial_t key_id, unsigned long reserved,
923*4882a593Smuzhiyun		    const char *params,
924*4882a593Smuzhiyun		    struct keyctl_pkey_query *info);
925*4882a593Smuzhiyun
926*4882a593Smuzhiyun     Get information about an asymmetric key.  Specific algorithms and
927*4882a593Smuzhiyun     encodings may be queried by using the ``params`` argument.  This is a
928*4882a593Smuzhiyun     string containing a space- or tab-separated string of key-value pairs.
929*4882a593Smuzhiyun     Currently supported keys include ``enc`` and ``hash``.  The information
930*4882a593Smuzhiyun     is returned in the keyctl_pkey_query struct::
931*4882a593Smuzhiyun
932*4882a593Smuzhiyun	__u32	supported_ops;
933*4882a593Smuzhiyun	__u32	key_size;
934*4882a593Smuzhiyun	__u16	max_data_size;
935*4882a593Smuzhiyun	__u16	max_sig_size;
936*4882a593Smuzhiyun	__u16	max_enc_size;
937*4882a593Smuzhiyun	__u16	max_dec_size;
938*4882a593Smuzhiyun	__u32	__spare[10];
939*4882a593Smuzhiyun
940*4882a593Smuzhiyun     ``supported_ops`` contains a bit mask of flags indicating which ops are
941*4882a593Smuzhiyun     supported.  This is constructed from a bitwise-OR of::
942*4882a593Smuzhiyun
943*4882a593Smuzhiyun	KEYCTL_SUPPORTS_{ENCRYPT,DECRYPT,SIGN,VERIFY}
944*4882a593Smuzhiyun
945*4882a593Smuzhiyun     ``key_size`` indicated the size of the key in bits.
946*4882a593Smuzhiyun
947*4882a593Smuzhiyun     ``max_*_size`` indicate the maximum sizes in bytes of a blob of data to be
948*4882a593Smuzhiyun     signed, a signature blob, a blob to be encrypted and a blob to be
949*4882a593Smuzhiyun     decrypted.
950*4882a593Smuzhiyun
951*4882a593Smuzhiyun     ``__spare[]`` must be set to 0.  This is intended for future use to hand
952*4882a593Smuzhiyun     over one or more passphrases needed unlock a key.
953*4882a593Smuzhiyun
954*4882a593Smuzhiyun     If successful, 0 is returned.  If the key is not an asymmetric key,
955*4882a593Smuzhiyun     EOPNOTSUPP is returned.
956*4882a593Smuzhiyun
957*4882a593Smuzhiyun
958*4882a593Smuzhiyun  *  Encrypt, decrypt, sign or verify a blob using an asymmetric key::
959*4882a593Smuzhiyun
960*4882a593Smuzhiyun	long keyctl(KEYCTL_PKEY_ENCRYPT,
961*4882a593Smuzhiyun		    const struct keyctl_pkey_params *params,
962*4882a593Smuzhiyun		    const char *info,
963*4882a593Smuzhiyun		    const void *in,
964*4882a593Smuzhiyun		    void *out);
965*4882a593Smuzhiyun
966*4882a593Smuzhiyun	long keyctl(KEYCTL_PKEY_DECRYPT,
967*4882a593Smuzhiyun		    const struct keyctl_pkey_params *params,
968*4882a593Smuzhiyun		    const char *info,
969*4882a593Smuzhiyun		    const void *in,
970*4882a593Smuzhiyun		    void *out);
971*4882a593Smuzhiyun
972*4882a593Smuzhiyun	long keyctl(KEYCTL_PKEY_SIGN,
973*4882a593Smuzhiyun		    const struct keyctl_pkey_params *params,
974*4882a593Smuzhiyun		    const char *info,
975*4882a593Smuzhiyun		    const void *in,
976*4882a593Smuzhiyun		    void *out);
977*4882a593Smuzhiyun
978*4882a593Smuzhiyun	long keyctl(KEYCTL_PKEY_VERIFY,
979*4882a593Smuzhiyun		    const struct keyctl_pkey_params *params,
980*4882a593Smuzhiyun		    const char *info,
981*4882a593Smuzhiyun		    const void *in,
982*4882a593Smuzhiyun		    const void *in2);
983*4882a593Smuzhiyun
984*4882a593Smuzhiyun     Use an asymmetric key to perform a public-key cryptographic operation a
985*4882a593Smuzhiyun     blob of data.  For encryption and verification, the asymmetric key may
986*4882a593Smuzhiyun     only need the public parts to be available, but for decryption and signing
987*4882a593Smuzhiyun     the private parts are required also.
988*4882a593Smuzhiyun
989*4882a593Smuzhiyun     The parameter block pointed to by params contains a number of integer
990*4882a593Smuzhiyun     values::
991*4882a593Smuzhiyun
992*4882a593Smuzhiyun	__s32		key_id;
993*4882a593Smuzhiyun	__u32		in_len;
994*4882a593Smuzhiyun	__u32		out_len;
995*4882a593Smuzhiyun	__u32		in2_len;
996*4882a593Smuzhiyun
997*4882a593Smuzhiyun     ``key_id`` is the ID of the asymmetric key to be used.  ``in_len`` and
998*4882a593Smuzhiyun     ``in2_len`` indicate the amount of data in the in and in2 buffers and
999*4882a593Smuzhiyun     ``out_len`` indicates the size of the out buffer as appropriate for the
1000*4882a593Smuzhiyun     above operations.
1001*4882a593Smuzhiyun
1002*4882a593Smuzhiyun     For a given operation, the in and out buffers are used as follows::
1003*4882a593Smuzhiyun
1004*4882a593Smuzhiyun	Operation ID		in,in_len	out,out_len	in2,in2_len
1005*4882a593Smuzhiyun	=======================	===============	===============	===============
1006*4882a593Smuzhiyun	KEYCTL_PKEY_ENCRYPT	Raw data	Encrypted data	-
1007*4882a593Smuzhiyun	KEYCTL_PKEY_DECRYPT	Encrypted data	Raw data	-
1008*4882a593Smuzhiyun	KEYCTL_PKEY_SIGN	Raw data	Signature	-
1009*4882a593Smuzhiyun	KEYCTL_PKEY_VERIFY	Raw data	-		Signature
1010*4882a593Smuzhiyun
1011*4882a593Smuzhiyun     ``info`` is a string of key=value pairs that supply supplementary
1012*4882a593Smuzhiyun     information.  These include:
1013*4882a593Smuzhiyun
1014*4882a593Smuzhiyun	``enc=<encoding>`` The encoding of the encrypted/signature blob.  This
1015*4882a593Smuzhiyun			can be "pkcs1" for RSASSA-PKCS1-v1.5 or
1016*4882a593Smuzhiyun			RSAES-PKCS1-v1.5; "pss" for "RSASSA-PSS"; "oaep" for
1017*4882a593Smuzhiyun			"RSAES-OAEP".  If omitted or is "raw", the raw output
1018*4882a593Smuzhiyun			of the encryption function is specified.
1019*4882a593Smuzhiyun
1020*4882a593Smuzhiyun	``hash=<algo>``	If the data buffer contains the output of a hash
1021*4882a593Smuzhiyun			function and the encoding includes some indication of
1022*4882a593Smuzhiyun			which hash function was used, the hash function can be
1023*4882a593Smuzhiyun			specified with this, eg. "hash=sha256".
1024*4882a593Smuzhiyun
1025*4882a593Smuzhiyun     The ``__spare[]`` space in the parameter block must be set to 0.  This is
1026*4882a593Smuzhiyun     intended, amongst other things, to allow the passing of passphrases
1027*4882a593Smuzhiyun     required to unlock a key.
1028*4882a593Smuzhiyun
1029*4882a593Smuzhiyun     If successful, encrypt, decrypt and sign all return the amount of data
1030*4882a593Smuzhiyun     written into the output buffer.  Verification returns 0 on success.
1031*4882a593Smuzhiyun
1032*4882a593Smuzhiyun
1033*4882a593Smuzhiyun  *  Watch a key or keyring for changes::
1034*4882a593Smuzhiyun
1035*4882a593Smuzhiyun	long keyctl(KEYCTL_WATCH_KEY, key_serial_t key, int queue_fd,
1036*4882a593Smuzhiyun		    const struct watch_notification_filter *filter);
1037*4882a593Smuzhiyun
1038*4882a593Smuzhiyun     This will set or remove a watch for changes on the specified key or
1039*4882a593Smuzhiyun     keyring.
1040*4882a593Smuzhiyun
1041*4882a593Smuzhiyun     "key" is the ID of the key to be watched.
1042*4882a593Smuzhiyun
1043*4882a593Smuzhiyun     "queue_fd" is a file descriptor referring to an open pipe which
1044*4882a593Smuzhiyun     manages the buffer into which notifications will be delivered.
1045*4882a593Smuzhiyun
1046*4882a593Smuzhiyun     "filter" is either NULL to remove a watch or a filter specification to
1047*4882a593Smuzhiyun     indicate what events are required from the key.
1048*4882a593Smuzhiyun
1049*4882a593Smuzhiyun     See Documentation/watch_queue.rst for more information.
1050*4882a593Smuzhiyun
1051*4882a593Smuzhiyun     Note that only one watch may be emplaced for any particular { key,
1052*4882a593Smuzhiyun     queue_fd } combination.
1053*4882a593Smuzhiyun
1054*4882a593Smuzhiyun     Notification records look like::
1055*4882a593Smuzhiyun
1056*4882a593Smuzhiyun	struct key_notification {
1057*4882a593Smuzhiyun		struct watch_notification watch;
1058*4882a593Smuzhiyun		__u32	key_id;
1059*4882a593Smuzhiyun		__u32	aux;
1060*4882a593Smuzhiyun	};
1061*4882a593Smuzhiyun
1062*4882a593Smuzhiyun     In this, watch::type will be "WATCH_TYPE_KEY_NOTIFY" and subtype will be
1063*4882a593Smuzhiyun     one of::
1064*4882a593Smuzhiyun
1065*4882a593Smuzhiyun	NOTIFY_KEY_INSTANTIATED
1066*4882a593Smuzhiyun	NOTIFY_KEY_UPDATED
1067*4882a593Smuzhiyun	NOTIFY_KEY_LINKED
1068*4882a593Smuzhiyun	NOTIFY_KEY_UNLINKED
1069*4882a593Smuzhiyun	NOTIFY_KEY_CLEARED
1070*4882a593Smuzhiyun	NOTIFY_KEY_REVOKED
1071*4882a593Smuzhiyun	NOTIFY_KEY_INVALIDATED
1072*4882a593Smuzhiyun	NOTIFY_KEY_SETATTR
1073*4882a593Smuzhiyun
1074*4882a593Smuzhiyun     Where these indicate a key being instantiated/rejected, updated, a link
1075*4882a593Smuzhiyun     being made in a keyring, a link being removed from a keyring, a keyring
1076*4882a593Smuzhiyun     being cleared, a key being revoked, a key being invalidated or a key
1077*4882a593Smuzhiyun     having one of its attributes changed (user, group, perm, timeout,
1078*4882a593Smuzhiyun     restriction).
1079*4882a593Smuzhiyun
1080*4882a593Smuzhiyun     If a watched key is deleted, a basic watch_notification will be issued
1081*4882a593Smuzhiyun     with "type" set to WATCH_TYPE_META and "subtype" set to
1082*4882a593Smuzhiyun     watch_meta_removal_notification.  The watchpoint ID will be set in the
1083*4882a593Smuzhiyun     "info" field.
1084*4882a593Smuzhiyun
1085*4882a593Smuzhiyun     This needs to be configured by enabling:
1086*4882a593Smuzhiyun
1087*4882a593Smuzhiyun	"Provide key/keyring change notifications" (KEY_NOTIFICATIONS)
1088*4882a593Smuzhiyun
1089*4882a593Smuzhiyun
1090*4882a593SmuzhiyunKernel Services
1091*4882a593Smuzhiyun===============
1092*4882a593Smuzhiyun
1093*4882a593SmuzhiyunThe kernel services for key management are fairly simple to deal with. They can
1094*4882a593Smuzhiyunbe broken down into two areas: keys and key types.
1095*4882a593Smuzhiyun
1096*4882a593SmuzhiyunDealing with keys is fairly straightforward. Firstly, the kernel service
1097*4882a593Smuzhiyunregisters its type, then it searches for a key of that type. It should retain
1098*4882a593Smuzhiyunthe key as long as it has need of it, and then it should release it. For a
1099*4882a593Smuzhiyunfilesystem or device file, a search would probably be performed during the open
1100*4882a593Smuzhiyuncall, and the key released upon close. How to deal with conflicting keys due to
1101*4882a593Smuzhiyuntwo different users opening the same file is left to the filesystem author to
1102*4882a593Smuzhiyunsolve.
1103*4882a593Smuzhiyun
1104*4882a593SmuzhiyunTo access the key manager, the following header must be #included::
1105*4882a593Smuzhiyun
1106*4882a593Smuzhiyun	<linux/key.h>
1107*4882a593Smuzhiyun
1108*4882a593SmuzhiyunSpecific key types should have a header file under include/keys/ that should be
1109*4882a593Smuzhiyunused to access that type.  For keys of type "user", for example, that would be::
1110*4882a593Smuzhiyun
1111*4882a593Smuzhiyun	<keys/user-type.h>
1112*4882a593Smuzhiyun
1113*4882a593SmuzhiyunNote that there are two different types of pointers to keys that may be
1114*4882a593Smuzhiyunencountered:
1115*4882a593Smuzhiyun
1116*4882a593Smuzhiyun  *  struct key *
1117*4882a593Smuzhiyun
1118*4882a593Smuzhiyun     This simply points to the key structure itself. Key structures will be at
1119*4882a593Smuzhiyun     least four-byte aligned.
1120*4882a593Smuzhiyun
1121*4882a593Smuzhiyun  *  key_ref_t
1122*4882a593Smuzhiyun
1123*4882a593Smuzhiyun     This is equivalent to a ``struct key *``, but the least significant bit is set
1124*4882a593Smuzhiyun     if the caller "possesses" the key. By "possession" it is meant that the
1125*4882a593Smuzhiyun     calling processes has a searchable link to the key from one of its
1126*4882a593Smuzhiyun     keyrings. There are three functions for dealing with these::
1127*4882a593Smuzhiyun
1128*4882a593Smuzhiyun	key_ref_t make_key_ref(const struct key *key, bool possession);
1129*4882a593Smuzhiyun
1130*4882a593Smuzhiyun	struct key *key_ref_to_ptr(const key_ref_t key_ref);
1131*4882a593Smuzhiyun
1132*4882a593Smuzhiyun	bool is_key_possessed(const key_ref_t key_ref);
1133*4882a593Smuzhiyun
1134*4882a593Smuzhiyun     The first function constructs a key reference from a key pointer and
1135*4882a593Smuzhiyun     possession information (which must be true or false).
1136*4882a593Smuzhiyun
1137*4882a593Smuzhiyun     The second function retrieves the key pointer from a reference and the
1138*4882a593Smuzhiyun     third retrieves the possession flag.
1139*4882a593Smuzhiyun
1140*4882a593SmuzhiyunWhen accessing a key's payload contents, certain precautions must be taken to
1141*4882a593Smuzhiyunprevent access vs modification races. See the section "Notes on accessing
1142*4882a593Smuzhiyunpayload contents" for more information.
1143*4882a593Smuzhiyun
1144*4882a593Smuzhiyun *  To search for a key, call::
1145*4882a593Smuzhiyun
1146*4882a593Smuzhiyun	struct key *request_key(const struct key_type *type,
1147*4882a593Smuzhiyun				const char *description,
1148*4882a593Smuzhiyun				const char *callout_info);
1149*4882a593Smuzhiyun
1150*4882a593Smuzhiyun    This is used to request a key or keyring with a description that matches
1151*4882a593Smuzhiyun    the description specified according to the key type's match_preparse()
1152*4882a593Smuzhiyun    method. This permits approximate matching to occur. If callout_string is
1153*4882a593Smuzhiyun    not NULL, then /sbin/request-key will be invoked in an attempt to obtain
1154*4882a593Smuzhiyun    the key from userspace. In that case, callout_string will be passed as an
1155*4882a593Smuzhiyun    argument to the program.
1156*4882a593Smuzhiyun
1157*4882a593Smuzhiyun    Should the function fail error ENOKEY, EKEYEXPIRED or EKEYREVOKED will be
1158*4882a593Smuzhiyun    returned.
1159*4882a593Smuzhiyun
1160*4882a593Smuzhiyun    If successful, the key will have been attached to the default keyring for
1161*4882a593Smuzhiyun    implicitly obtained request-key keys, as set by KEYCTL_SET_REQKEY_KEYRING.
1162*4882a593Smuzhiyun
1163*4882a593Smuzhiyun    See also Documentation/security/keys/request-key.rst.
1164*4882a593Smuzhiyun
1165*4882a593Smuzhiyun
1166*4882a593Smuzhiyun *  To search for a key in a specific domain, call::
1167*4882a593Smuzhiyun
1168*4882a593Smuzhiyun	struct key *request_key_tag(const struct key_type *type,
1169*4882a593Smuzhiyun				    const char *description,
1170*4882a593Smuzhiyun				    struct key_tag *domain_tag,
1171*4882a593Smuzhiyun				    const char *callout_info);
1172*4882a593Smuzhiyun
1173*4882a593Smuzhiyun    This is identical to request_key(), except that a domain tag may be
1174*4882a593Smuzhiyun    specifies that causes search algorithm to only match keys matching that
1175*4882a593Smuzhiyun    tag.  The domain_tag may be NULL, specifying a global domain that is
1176*4882a593Smuzhiyun    separate from any nominated domain.
1177*4882a593Smuzhiyun
1178*4882a593Smuzhiyun
1179*4882a593Smuzhiyun *  To search for a key, passing auxiliary data to the upcaller, call::
1180*4882a593Smuzhiyun
1181*4882a593Smuzhiyun	struct key *request_key_with_auxdata(const struct key_type *type,
1182*4882a593Smuzhiyun					     const char *description,
1183*4882a593Smuzhiyun					     struct key_tag *domain_tag,
1184*4882a593Smuzhiyun					     const void *callout_info,
1185*4882a593Smuzhiyun					     size_t callout_len,
1186*4882a593Smuzhiyun					     void *aux);
1187*4882a593Smuzhiyun
1188*4882a593Smuzhiyun    This is identical to request_key_tag(), except that the auxiliary data is
1189*4882a593Smuzhiyun    passed to the key_type->request_key() op if it exists, and the
1190*4882a593Smuzhiyun    callout_info is a blob of length callout_len, if given (the length may be
1191*4882a593Smuzhiyun    0).
1192*4882a593Smuzhiyun
1193*4882a593Smuzhiyun
1194*4882a593Smuzhiyun *  To search for a key under RCU conditions, call::
1195*4882a593Smuzhiyun
1196*4882a593Smuzhiyun	struct key *request_key_rcu(const struct key_type *type,
1197*4882a593Smuzhiyun				    const char *description,
1198*4882a593Smuzhiyun				    struct key_tag *domain_tag);
1199*4882a593Smuzhiyun
1200*4882a593Smuzhiyun    which is similar to request_key_tag() except that it does not check for
1201*4882a593Smuzhiyun    keys that are under construction and it will not call out to userspace to
1202*4882a593Smuzhiyun    construct a key if it can't find a match.
1203*4882a593Smuzhiyun
1204*4882a593Smuzhiyun
1205*4882a593Smuzhiyun *  When it is no longer required, the key should be released using::
1206*4882a593Smuzhiyun
1207*4882a593Smuzhiyun	void key_put(struct key *key);
1208*4882a593Smuzhiyun
1209*4882a593Smuzhiyun    Or::
1210*4882a593Smuzhiyun
1211*4882a593Smuzhiyun	void key_ref_put(key_ref_t key_ref);
1212*4882a593Smuzhiyun
1213*4882a593Smuzhiyun    These can be called from interrupt context. If CONFIG_KEYS is not set then
1214*4882a593Smuzhiyun    the argument will not be parsed.
1215*4882a593Smuzhiyun
1216*4882a593Smuzhiyun
1217*4882a593Smuzhiyun *  Extra references can be made to a key by calling one of the following
1218*4882a593Smuzhiyun    functions::
1219*4882a593Smuzhiyun
1220*4882a593Smuzhiyun	struct key *__key_get(struct key *key);
1221*4882a593Smuzhiyun	struct key *key_get(struct key *key);
1222*4882a593Smuzhiyun
1223*4882a593Smuzhiyun    Keys so references will need to be disposed of by calling key_put() when
1224*4882a593Smuzhiyun    they've been finished with.  The key pointer passed in will be returned.
1225*4882a593Smuzhiyun
1226*4882a593Smuzhiyun    In the case of key_get(), if the pointer is NULL or CONFIG_KEYS is not set
1227*4882a593Smuzhiyun    then the key will not be dereferenced and no increment will take place.
1228*4882a593Smuzhiyun
1229*4882a593Smuzhiyun
1230*4882a593Smuzhiyun *  A key's serial number can be obtained by calling::
1231*4882a593Smuzhiyun
1232*4882a593Smuzhiyun	key_serial_t key_serial(struct key *key);
1233*4882a593Smuzhiyun
1234*4882a593Smuzhiyun    If key is NULL or if CONFIG_KEYS is not set then 0 will be returned (in the
1235*4882a593Smuzhiyun    latter case without parsing the argument).
1236*4882a593Smuzhiyun
1237*4882a593Smuzhiyun
1238*4882a593Smuzhiyun *  If a keyring was found in the search, this can be further searched by::
1239*4882a593Smuzhiyun
1240*4882a593Smuzhiyun	key_ref_t keyring_search(key_ref_t keyring_ref,
1241*4882a593Smuzhiyun				 const struct key_type *type,
1242*4882a593Smuzhiyun				 const char *description,
1243*4882a593Smuzhiyun				 bool recurse)
1244*4882a593Smuzhiyun
1245*4882a593Smuzhiyun    This searches the specified keyring only (recurse == false) or keyring tree
1246*4882a593Smuzhiyun    (recurse == true) specified for a matching key. Error ENOKEY is returned
1247*4882a593Smuzhiyun    upon failure (use IS_ERR/PTR_ERR to determine). If successful, the returned
1248*4882a593Smuzhiyun    key will need to be released.
1249*4882a593Smuzhiyun
1250*4882a593Smuzhiyun    The possession attribute from the keyring reference is used to control
1251*4882a593Smuzhiyun    access through the permissions mask and is propagated to the returned key
1252*4882a593Smuzhiyun    reference pointer if successful.
1253*4882a593Smuzhiyun
1254*4882a593Smuzhiyun
1255*4882a593Smuzhiyun *  A keyring can be created by::
1256*4882a593Smuzhiyun
1257*4882a593Smuzhiyun	struct key *keyring_alloc(const char *description, uid_t uid, gid_t gid,
1258*4882a593Smuzhiyun				  const struct cred *cred,
1259*4882a593Smuzhiyun				  key_perm_t perm,
1260*4882a593Smuzhiyun				  struct key_restriction *restrict_link,
1261*4882a593Smuzhiyun				  unsigned long flags,
1262*4882a593Smuzhiyun				  struct key *dest);
1263*4882a593Smuzhiyun
1264*4882a593Smuzhiyun    This creates a keyring with the given attributes and returns it.  If dest
1265*4882a593Smuzhiyun    is not NULL, the new keyring will be linked into the keyring to which it
1266*4882a593Smuzhiyun    points.  No permission checks are made upon the destination keyring.
1267*4882a593Smuzhiyun
1268*4882a593Smuzhiyun    Error EDQUOT can be returned if the keyring would overload the quota (pass
1269*4882a593Smuzhiyun    KEY_ALLOC_NOT_IN_QUOTA in flags if the keyring shouldn't be accounted
1270*4882a593Smuzhiyun    towards the user's quota).  Error ENOMEM can also be returned.
1271*4882a593Smuzhiyun
1272*4882a593Smuzhiyun    If restrict_link is not NULL, it should point to a structure that contains
1273*4882a593Smuzhiyun    the function that will be called each time an attempt is made to link a
1274*4882a593Smuzhiyun    key into the new keyring.  The structure may also contain a key pointer
1275*4882a593Smuzhiyun    and an associated key type.  The function is called to check whether a key
1276*4882a593Smuzhiyun    may be added into the keyring or not.  The key type is used by the garbage
1277*4882a593Smuzhiyun    collector to clean up function or data pointers in this structure if the
1278*4882a593Smuzhiyun    given key type is unregistered.  Callers of key_create_or_update() within
1279*4882a593Smuzhiyun    the kernel can pass KEY_ALLOC_BYPASS_RESTRICTION to suppress the check.
1280*4882a593Smuzhiyun    An example of using this is to manage rings of cryptographic keys that are
1281*4882a593Smuzhiyun    set up when the kernel boots where userspace is also permitted to add keys
1282*4882a593Smuzhiyun    - provided they can be verified by a key the kernel already has.
1283*4882a593Smuzhiyun
1284*4882a593Smuzhiyun    When called, the restriction function will be passed the keyring being
1285*4882a593Smuzhiyun    added to, the key type, the payload of the key being added, and data to be
1286*4882a593Smuzhiyun    used in the restriction check.  Note that when a new key is being created,
1287*4882a593Smuzhiyun    this is called between payload preparsing and actual key creation.  The
1288*4882a593Smuzhiyun    function should return 0 to allow the link or an error to reject it.
1289*4882a593Smuzhiyun
1290*4882a593Smuzhiyun    A convenience function, restrict_link_reject, exists to always return
1291*4882a593Smuzhiyun    -EPERM to in this case.
1292*4882a593Smuzhiyun
1293*4882a593Smuzhiyun
1294*4882a593Smuzhiyun *  To check the validity of a key, this function can be called::
1295*4882a593Smuzhiyun
1296*4882a593Smuzhiyun	int validate_key(struct key *key);
1297*4882a593Smuzhiyun
1298*4882a593Smuzhiyun    This checks that the key in question hasn't expired or and hasn't been
1299*4882a593Smuzhiyun    revoked. Should the key be invalid, error EKEYEXPIRED or EKEYREVOKED will
1300*4882a593Smuzhiyun    be returned. If the key is NULL or if CONFIG_KEYS is not set then 0 will be
1301*4882a593Smuzhiyun    returned (in the latter case without parsing the argument).
1302*4882a593Smuzhiyun
1303*4882a593Smuzhiyun
1304*4882a593Smuzhiyun *  To register a key type, the following function should be called::
1305*4882a593Smuzhiyun
1306*4882a593Smuzhiyun	int register_key_type(struct key_type *type);
1307*4882a593Smuzhiyun
1308*4882a593Smuzhiyun    This will return error EEXIST if a type of the same name is already
1309*4882a593Smuzhiyun    present.
1310*4882a593Smuzhiyun
1311*4882a593Smuzhiyun
1312*4882a593Smuzhiyun *  To unregister a key type, call::
1313*4882a593Smuzhiyun
1314*4882a593Smuzhiyun	void unregister_key_type(struct key_type *type);
1315*4882a593Smuzhiyun
1316*4882a593Smuzhiyun
1317*4882a593SmuzhiyunUnder some circumstances, it may be desirable to deal with a bundle of keys.
1318*4882a593SmuzhiyunThe facility provides access to the keyring type for managing such a bundle::
1319*4882a593Smuzhiyun
1320*4882a593Smuzhiyun	struct key_type key_type_keyring;
1321*4882a593Smuzhiyun
1322*4882a593SmuzhiyunThis can be used with a function such as request_key() to find a specific
1323*4882a593Smuzhiyunkeyring in a process's keyrings.  A keyring thus found can then be searched
1324*4882a593Smuzhiyunwith keyring_search().  Note that it is not possible to use request_key() to
1325*4882a593Smuzhiyunsearch a specific keyring, so using keyrings in this way is of limited utility.
1326*4882a593Smuzhiyun
1327*4882a593Smuzhiyun
1328*4882a593SmuzhiyunNotes On Accessing Payload Contents
1329*4882a593Smuzhiyun===================================
1330*4882a593Smuzhiyun
1331*4882a593SmuzhiyunThe simplest payload is just data stored in key->payload directly.  In this
1332*4882a593Smuzhiyuncase, there's no need to indulge in RCU or locking when accessing the payload.
1333*4882a593Smuzhiyun
1334*4882a593SmuzhiyunMore complex payload contents must be allocated and pointers to them set in the
1335*4882a593Smuzhiyunkey->payload.data[] array.  One of the following ways must be selected to
1336*4882a593Smuzhiyunaccess the data:
1337*4882a593Smuzhiyun
1338*4882a593Smuzhiyun  1) Unmodifiable key type.
1339*4882a593Smuzhiyun
1340*4882a593Smuzhiyun     If the key type does not have a modify method, then the key's payload can
1341*4882a593Smuzhiyun     be accessed without any form of locking, provided that it's known to be
1342*4882a593Smuzhiyun     instantiated (uninstantiated keys cannot be "found").
1343*4882a593Smuzhiyun
1344*4882a593Smuzhiyun  2) The key's semaphore.
1345*4882a593Smuzhiyun
1346*4882a593Smuzhiyun     The semaphore could be used to govern access to the payload and to control
1347*4882a593Smuzhiyun     the payload pointer. It must be write-locked for modifications and would
1348*4882a593Smuzhiyun     have to be read-locked for general access. The disadvantage of doing this
1349*4882a593Smuzhiyun     is that the accessor may be required to sleep.
1350*4882a593Smuzhiyun
1351*4882a593Smuzhiyun  3) RCU.
1352*4882a593Smuzhiyun
1353*4882a593Smuzhiyun     RCU must be used when the semaphore isn't already held; if the semaphore
1354*4882a593Smuzhiyun     is held then the contents can't change under you unexpectedly as the
1355*4882a593Smuzhiyun     semaphore must still be used to serialise modifications to the key. The
1356*4882a593Smuzhiyun     key management code takes care of this for the key type.
1357*4882a593Smuzhiyun
1358*4882a593Smuzhiyun     However, this means using::
1359*4882a593Smuzhiyun
1360*4882a593Smuzhiyun	rcu_read_lock() ... rcu_dereference() ... rcu_read_unlock()
1361*4882a593Smuzhiyun
1362*4882a593Smuzhiyun     to read the pointer, and::
1363*4882a593Smuzhiyun
1364*4882a593Smuzhiyun	rcu_dereference() ... rcu_assign_pointer() ... call_rcu()
1365*4882a593Smuzhiyun
1366*4882a593Smuzhiyun     to set the pointer and dispose of the old contents after a grace period.
1367*4882a593Smuzhiyun     Note that only the key type should ever modify a key's payload.
1368*4882a593Smuzhiyun
1369*4882a593Smuzhiyun     Furthermore, an RCU controlled payload must hold a struct rcu_head for the
1370*4882a593Smuzhiyun     use of call_rcu() and, if the payload is of variable size, the length of
1371*4882a593Smuzhiyun     the payload. key->datalen cannot be relied upon to be consistent with the
1372*4882a593Smuzhiyun     payload just dereferenced if the key's semaphore is not held.
1373*4882a593Smuzhiyun
1374*4882a593Smuzhiyun     Note that key->payload.data[0] has a shadow that is marked for __rcu
1375*4882a593Smuzhiyun     usage.  This is called key->payload.rcu_data0.  The following accessors
1376*4882a593Smuzhiyun     wrap the RCU calls to this element:
1377*4882a593Smuzhiyun
1378*4882a593Smuzhiyun     a) Set or change the first payload pointer::
1379*4882a593Smuzhiyun
1380*4882a593Smuzhiyun		rcu_assign_keypointer(struct key *key, void *data);
1381*4882a593Smuzhiyun
1382*4882a593Smuzhiyun     b) Read the first payload pointer with the key semaphore held::
1383*4882a593Smuzhiyun
1384*4882a593Smuzhiyun		[const] void *dereference_key_locked([const] struct key *key);
1385*4882a593Smuzhiyun
1386*4882a593Smuzhiyun	 Note that the return value will inherit its constness from the key
1387*4882a593Smuzhiyun	 parameter.  Static analysis will give an error if it things the lock
1388*4882a593Smuzhiyun	 isn't held.
1389*4882a593Smuzhiyun
1390*4882a593Smuzhiyun     c) Read the first payload pointer with the RCU read lock held::
1391*4882a593Smuzhiyun
1392*4882a593Smuzhiyun		const void *dereference_key_rcu(const struct key *key);
1393*4882a593Smuzhiyun
1394*4882a593Smuzhiyun
1395*4882a593SmuzhiyunDefining a Key Type
1396*4882a593Smuzhiyun===================
1397*4882a593Smuzhiyun
1398*4882a593SmuzhiyunA kernel service may want to define its own key type. For instance, an AFS
1399*4882a593Smuzhiyunfilesystem might want to define a Kerberos 5 ticket key type. To do this, it
1400*4882a593Smuzhiyunauthor fills in a key_type struct and registers it with the system.
1401*4882a593Smuzhiyun
1402*4882a593SmuzhiyunSource files that implement key types should include the following header file::
1403*4882a593Smuzhiyun
1404*4882a593Smuzhiyun	<linux/key-type.h>
1405*4882a593Smuzhiyun
1406*4882a593SmuzhiyunThe structure has a number of fields, some of which are mandatory:
1407*4882a593Smuzhiyun
1408*4882a593Smuzhiyun  *  ``const char *name``
1409*4882a593Smuzhiyun
1410*4882a593Smuzhiyun     The name of the key type. This is used to translate a key type name
1411*4882a593Smuzhiyun     supplied by userspace into a pointer to the structure.
1412*4882a593Smuzhiyun
1413*4882a593Smuzhiyun
1414*4882a593Smuzhiyun  *  ``size_t def_datalen``
1415*4882a593Smuzhiyun
1416*4882a593Smuzhiyun     This is optional - it supplies the default payload data length as
1417*4882a593Smuzhiyun     contributed to the quota. If the key type's payload is always or almost
1418*4882a593Smuzhiyun     always the same size, then this is a more efficient way to do things.
1419*4882a593Smuzhiyun
1420*4882a593Smuzhiyun     The data length (and quota) on a particular key can always be changed
1421*4882a593Smuzhiyun     during instantiation or update by calling::
1422*4882a593Smuzhiyun
1423*4882a593Smuzhiyun	int key_payload_reserve(struct key *key, size_t datalen);
1424*4882a593Smuzhiyun
1425*4882a593Smuzhiyun     With the revised data length. Error EDQUOT will be returned if this is not
1426*4882a593Smuzhiyun     viable.
1427*4882a593Smuzhiyun
1428*4882a593Smuzhiyun
1429*4882a593Smuzhiyun  *  ``int (*vet_description)(const char *description);``
1430*4882a593Smuzhiyun
1431*4882a593Smuzhiyun     This optional method is called to vet a key description.  If the key type
1432*4882a593Smuzhiyun     doesn't approve of the key description, it may return an error, otherwise
1433*4882a593Smuzhiyun     it should return 0.
1434*4882a593Smuzhiyun
1435*4882a593Smuzhiyun
1436*4882a593Smuzhiyun  *  ``int (*preparse)(struct key_preparsed_payload *prep);``
1437*4882a593Smuzhiyun
1438*4882a593Smuzhiyun     This optional method permits the key type to attempt to parse payload
1439*4882a593Smuzhiyun     before a key is created (add key) or the key semaphore is taken (update or
1440*4882a593Smuzhiyun     instantiate key).  The structure pointed to by prep looks like::
1441*4882a593Smuzhiyun
1442*4882a593Smuzhiyun	struct key_preparsed_payload {
1443*4882a593Smuzhiyun		char		*description;
1444*4882a593Smuzhiyun		union key_payload payload;
1445*4882a593Smuzhiyun		const void	*data;
1446*4882a593Smuzhiyun		size_t		datalen;
1447*4882a593Smuzhiyun		size_t		quotalen;
1448*4882a593Smuzhiyun		time_t		expiry;
1449*4882a593Smuzhiyun	};
1450*4882a593Smuzhiyun
1451*4882a593Smuzhiyun     Before calling the method, the caller will fill in data and datalen with
1452*4882a593Smuzhiyun     the payload blob parameters; quotalen will be filled in with the default
1453*4882a593Smuzhiyun     quota size from the key type; expiry will be set to TIME_T_MAX and the
1454*4882a593Smuzhiyun     rest will be cleared.
1455*4882a593Smuzhiyun
1456*4882a593Smuzhiyun     If a description can be proposed from the payload contents, that should be
1457*4882a593Smuzhiyun     attached as a string to the description field.  This will be used for the
1458*4882a593Smuzhiyun     key description if the caller of add_key() passes NULL or "".
1459*4882a593Smuzhiyun
1460*4882a593Smuzhiyun     The method can attach anything it likes to payload.  This is merely passed
1461*4882a593Smuzhiyun     along to the instantiate() or update() operations.  If set, the expiry
1462*4882a593Smuzhiyun     time will be applied to the key if it is instantiated from this data.
1463*4882a593Smuzhiyun
1464*4882a593Smuzhiyun     The method should return 0 if successful or a negative error code
1465*4882a593Smuzhiyun     otherwise.
1466*4882a593Smuzhiyun
1467*4882a593Smuzhiyun
1468*4882a593Smuzhiyun  *  ``void (*free_preparse)(struct key_preparsed_payload *prep);``
1469*4882a593Smuzhiyun
1470*4882a593Smuzhiyun     This method is only required if the preparse() method is provided,
1471*4882a593Smuzhiyun     otherwise it is unused.  It cleans up anything attached to the description
1472*4882a593Smuzhiyun     and payload fields of the key_preparsed_payload struct as filled in by the
1473*4882a593Smuzhiyun     preparse() method.  It will always be called after preparse() returns
1474*4882a593Smuzhiyun     successfully, even if instantiate() or update() succeed.
1475*4882a593Smuzhiyun
1476*4882a593Smuzhiyun
1477*4882a593Smuzhiyun  *  ``int (*instantiate)(struct key *key, struct key_preparsed_payload *prep);``
1478*4882a593Smuzhiyun
1479*4882a593Smuzhiyun     This method is called to attach a payload to a key during construction.
1480*4882a593Smuzhiyun     The payload attached need not bear any relation to the data passed to this
1481*4882a593Smuzhiyun     function.
1482*4882a593Smuzhiyun
1483*4882a593Smuzhiyun     The prep->data and prep->datalen fields will define the original payload
1484*4882a593Smuzhiyun     blob.  If preparse() was supplied then other fields may be filled in also.
1485*4882a593Smuzhiyun
1486*4882a593Smuzhiyun     If the amount of data attached to the key differs from the size in
1487*4882a593Smuzhiyun     keytype->def_datalen, then key_payload_reserve() should be called.
1488*4882a593Smuzhiyun
1489*4882a593Smuzhiyun     This method does not have to lock the key in order to attach a payload.
1490*4882a593Smuzhiyun     The fact that KEY_FLAG_INSTANTIATED is not set in key->flags prevents
1491*4882a593Smuzhiyun     anything else from gaining access to the key.
1492*4882a593Smuzhiyun
1493*4882a593Smuzhiyun     It is safe to sleep in this method.
1494*4882a593Smuzhiyun
1495*4882a593Smuzhiyun     generic_key_instantiate() is provided to simply copy the data from
1496*4882a593Smuzhiyun     prep->payload.data[] to key->payload.data[], with RCU-safe assignment on
1497*4882a593Smuzhiyun     the first element.  It will then clear prep->payload.data[] so that the
1498*4882a593Smuzhiyun     free_preparse method doesn't release the data.
1499*4882a593Smuzhiyun
1500*4882a593Smuzhiyun
1501*4882a593Smuzhiyun  *  ``int (*update)(struct key *key, const void *data, size_t datalen);``
1502*4882a593Smuzhiyun
1503*4882a593Smuzhiyun     If this type of key can be updated, then this method should be provided.
1504*4882a593Smuzhiyun     It is called to update a key's payload from the blob of data provided.
1505*4882a593Smuzhiyun
1506*4882a593Smuzhiyun     The prep->data and prep->datalen fields will define the original payload
1507*4882a593Smuzhiyun     blob.  If preparse() was supplied then other fields may be filled in also.
1508*4882a593Smuzhiyun
1509*4882a593Smuzhiyun     key_payload_reserve() should be called if the data length might change
1510*4882a593Smuzhiyun     before any changes are actually made. Note that if this succeeds, the type
1511*4882a593Smuzhiyun     is committed to changing the key because it's already been altered, so all
1512*4882a593Smuzhiyun     memory allocation must be done first.
1513*4882a593Smuzhiyun
1514*4882a593Smuzhiyun     The key will have its semaphore write-locked before this method is called,
1515*4882a593Smuzhiyun     but this only deters other writers; any changes to the key's payload must
1516*4882a593Smuzhiyun     be made under RCU conditions, and call_rcu() must be used to dispose of
1517*4882a593Smuzhiyun     the old payload.
1518*4882a593Smuzhiyun
1519*4882a593Smuzhiyun     key_payload_reserve() should be called before the changes are made, but
1520*4882a593Smuzhiyun     after all allocations and other potentially failing function calls are
1521*4882a593Smuzhiyun     made.
1522*4882a593Smuzhiyun
1523*4882a593Smuzhiyun     It is safe to sleep in this method.
1524*4882a593Smuzhiyun
1525*4882a593Smuzhiyun
1526*4882a593Smuzhiyun  *  ``int (*match_preparse)(struct key_match_data *match_data);``
1527*4882a593Smuzhiyun
1528*4882a593Smuzhiyun     This method is optional.  It is called when a key search is about to be
1529*4882a593Smuzhiyun     performed.  It is given the following structure::
1530*4882a593Smuzhiyun
1531*4882a593Smuzhiyun	struct key_match_data {
1532*4882a593Smuzhiyun		bool (*cmp)(const struct key *key,
1533*4882a593Smuzhiyun			    const struct key_match_data *match_data);
1534*4882a593Smuzhiyun		const void	*raw_data;
1535*4882a593Smuzhiyun		void		*preparsed;
1536*4882a593Smuzhiyun		unsigned	lookup_type;
1537*4882a593Smuzhiyun	};
1538*4882a593Smuzhiyun
1539*4882a593Smuzhiyun     On entry, raw_data will be pointing to the criteria to be used in matching
1540*4882a593Smuzhiyun     a key by the caller and should not be modified.  ``(*cmp)()`` will be pointing
1541*4882a593Smuzhiyun     to the default matcher function (which does an exact description match
1542*4882a593Smuzhiyun     against raw_data) and lookup_type will be set to indicate a direct lookup.
1543*4882a593Smuzhiyun
1544*4882a593Smuzhiyun     The following lookup_type values are available:
1545*4882a593Smuzhiyun
1546*4882a593Smuzhiyun       *  KEYRING_SEARCH_LOOKUP_DIRECT - A direct lookup hashes the type and
1547*4882a593Smuzhiyun      	  description to narrow down the search to a small number of keys.
1548*4882a593Smuzhiyun
1549*4882a593Smuzhiyun       *  KEYRING_SEARCH_LOOKUP_ITERATE - An iterative lookup walks all the
1550*4882a593Smuzhiyun      	  keys in the keyring until one is matched.  This must be used for any
1551*4882a593Smuzhiyun      	  search that's not doing a simple direct match on the key description.
1552*4882a593Smuzhiyun
1553*4882a593Smuzhiyun     The method may set cmp to point to a function of its choice that does some
1554*4882a593Smuzhiyun     other form of match, may set lookup_type to KEYRING_SEARCH_LOOKUP_ITERATE
1555*4882a593Smuzhiyun     and may attach something to the preparsed pointer for use by ``(*cmp)()``.
1556*4882a593Smuzhiyun     ``(*cmp)()`` should return true if a key matches and false otherwise.
1557*4882a593Smuzhiyun
1558*4882a593Smuzhiyun     If preparsed is set, it may be necessary to use the match_free() method to
1559*4882a593Smuzhiyun     clean it up.
1560*4882a593Smuzhiyun
1561*4882a593Smuzhiyun     The method should return 0 if successful or a negative error code
1562*4882a593Smuzhiyun     otherwise.
1563*4882a593Smuzhiyun
1564*4882a593Smuzhiyun     It is permitted to sleep in this method, but ``(*cmp)()`` may not sleep as
1565*4882a593Smuzhiyun     locks will be held over it.
1566*4882a593Smuzhiyun
1567*4882a593Smuzhiyun     If match_preparse() is not provided, keys of this type will be matched
1568*4882a593Smuzhiyun     exactly by their description.
1569*4882a593Smuzhiyun
1570*4882a593Smuzhiyun
1571*4882a593Smuzhiyun  *  ``void (*match_free)(struct key_match_data *match_data);``
1572*4882a593Smuzhiyun
1573*4882a593Smuzhiyun     This method is optional.  If given, it called to clean up
1574*4882a593Smuzhiyun     match_data->preparsed after a successful call to match_preparse().
1575*4882a593Smuzhiyun
1576*4882a593Smuzhiyun
1577*4882a593Smuzhiyun  *  ``void (*revoke)(struct key *key);``
1578*4882a593Smuzhiyun
1579*4882a593Smuzhiyun     This method is optional.  It is called to discard part of the payload
1580*4882a593Smuzhiyun     data upon a key being revoked.  The caller will have the key semaphore
1581*4882a593Smuzhiyun     write-locked.
1582*4882a593Smuzhiyun
1583*4882a593Smuzhiyun     It is safe to sleep in this method, though care should be taken to avoid
1584*4882a593Smuzhiyun     a deadlock against the key semaphore.
1585*4882a593Smuzhiyun
1586*4882a593Smuzhiyun
1587*4882a593Smuzhiyun  *  ``void (*destroy)(struct key *key);``
1588*4882a593Smuzhiyun
1589*4882a593Smuzhiyun     This method is optional. It is called to discard the payload data on a key
1590*4882a593Smuzhiyun     when it is being destroyed.
1591*4882a593Smuzhiyun
1592*4882a593Smuzhiyun     This method does not need to lock the key to access the payload; it can
1593*4882a593Smuzhiyun     consider the key as being inaccessible at this time. Note that the key's
1594*4882a593Smuzhiyun     type may have been changed before this function is called.
1595*4882a593Smuzhiyun
1596*4882a593Smuzhiyun     It is not safe to sleep in this method; the caller may hold spinlocks.
1597*4882a593Smuzhiyun
1598*4882a593Smuzhiyun
1599*4882a593Smuzhiyun  *  ``void (*describe)(const struct key *key, struct seq_file *p);``
1600*4882a593Smuzhiyun
1601*4882a593Smuzhiyun     This method is optional. It is called during /proc/keys reading to
1602*4882a593Smuzhiyun     summarise a key's description and payload in text form.
1603*4882a593Smuzhiyun
1604*4882a593Smuzhiyun     This method will be called with the RCU read lock held. rcu_dereference()
1605*4882a593Smuzhiyun     should be used to read the payload pointer if the payload is to be
1606*4882a593Smuzhiyun     accessed. key->datalen cannot be trusted to stay consistent with the
1607*4882a593Smuzhiyun     contents of the payload.
1608*4882a593Smuzhiyun
1609*4882a593Smuzhiyun     The description will not change, though the key's state may.
1610*4882a593Smuzhiyun
1611*4882a593Smuzhiyun     It is not safe to sleep in this method; the RCU read lock is held by the
1612*4882a593Smuzhiyun     caller.
1613*4882a593Smuzhiyun
1614*4882a593Smuzhiyun
1615*4882a593Smuzhiyun  *  ``long (*read)(const struct key *key, char __user *buffer, size_t buflen);``
1616*4882a593Smuzhiyun
1617*4882a593Smuzhiyun     This method is optional. It is called by KEYCTL_READ to translate the
1618*4882a593Smuzhiyun     key's payload into something a blob of data for userspace to deal with.
1619*4882a593Smuzhiyun     Ideally, the blob should be in the same format as that passed in to the
1620*4882a593Smuzhiyun     instantiate and update methods.
1621*4882a593Smuzhiyun
1622*4882a593Smuzhiyun     If successful, the blob size that could be produced should be returned
1623*4882a593Smuzhiyun     rather than the size copied.
1624*4882a593Smuzhiyun
1625*4882a593Smuzhiyun     This method will be called with the key's semaphore read-locked. This will
1626*4882a593Smuzhiyun     prevent the key's payload changing. It is not necessary to use RCU locking
1627*4882a593Smuzhiyun     when accessing the key's payload. It is safe to sleep in this method, such
1628*4882a593Smuzhiyun     as might happen when the userspace buffer is accessed.
1629*4882a593Smuzhiyun
1630*4882a593Smuzhiyun
1631*4882a593Smuzhiyun  *  ``int (*request_key)(struct key_construction *cons, const char *op, void *aux);``
1632*4882a593Smuzhiyun
1633*4882a593Smuzhiyun     This method is optional.  If provided, request_key() and friends will
1634*4882a593Smuzhiyun     invoke this function rather than upcalling to /sbin/request-key to operate
1635*4882a593Smuzhiyun     upon a key of this type.
1636*4882a593Smuzhiyun
1637*4882a593Smuzhiyun     The aux parameter is as passed to request_key_async_with_auxdata() and
1638*4882a593Smuzhiyun     similar or is NULL otherwise.  Also passed are the construction record for
1639*4882a593Smuzhiyun     the key to be operated upon and the operation type (currently only
1640*4882a593Smuzhiyun     "create").
1641*4882a593Smuzhiyun
1642*4882a593Smuzhiyun     This method is permitted to return before the upcall is complete, but the
1643*4882a593Smuzhiyun     following function must be called under all circumstances to complete the
1644*4882a593Smuzhiyun     instantiation process, whether or not it succeeds, whether or not there's
1645*4882a593Smuzhiyun     an error::
1646*4882a593Smuzhiyun
1647*4882a593Smuzhiyun	void complete_request_key(struct key_construction *cons, int error);
1648*4882a593Smuzhiyun
1649*4882a593Smuzhiyun     The error parameter should be 0 on success, -ve on error.  The
1650*4882a593Smuzhiyun     construction record is destroyed by this action and the authorisation key
1651*4882a593Smuzhiyun     will be revoked.  If an error is indicated, the key under construction
1652*4882a593Smuzhiyun     will be negatively instantiated if it wasn't already instantiated.
1653*4882a593Smuzhiyun
1654*4882a593Smuzhiyun     If this method returns an error, that error will be returned to the
1655*4882a593Smuzhiyun     caller of request_key*().  complete_request_key() must be called prior to
1656*4882a593Smuzhiyun     returning.
1657*4882a593Smuzhiyun
1658*4882a593Smuzhiyun     The key under construction and the authorisation key can be found in the
1659*4882a593Smuzhiyun     key_construction struct pointed to by cons:
1660*4882a593Smuzhiyun
1661*4882a593Smuzhiyun      *  ``struct key *key;``
1662*4882a593Smuzhiyun
1663*4882a593Smuzhiyun     	 The key under construction.
1664*4882a593Smuzhiyun
1665*4882a593Smuzhiyun      *  ``struct key *authkey;``
1666*4882a593Smuzhiyun
1667*4882a593Smuzhiyun     	 The authorisation key.
1668*4882a593Smuzhiyun
1669*4882a593Smuzhiyun
1670*4882a593Smuzhiyun  *  ``struct key_restriction *(*lookup_restriction)(const char *params);``
1671*4882a593Smuzhiyun
1672*4882a593Smuzhiyun     This optional method is used to enable userspace configuration of keyring
1673*4882a593Smuzhiyun     restrictions. The restriction parameter string (not including the key type
1674*4882a593Smuzhiyun     name) is passed in, and this method returns a pointer to a key_restriction
1675*4882a593Smuzhiyun     structure containing the relevant functions and data to evaluate each
1676*4882a593Smuzhiyun     attempted key link operation. If there is no match, -EINVAL is returned.
1677*4882a593Smuzhiyun
1678*4882a593Smuzhiyun
1679*4882a593Smuzhiyun  *  ``asym_eds_op`` and ``asym_verify_signature``::
1680*4882a593Smuzhiyun
1681*4882a593Smuzhiyun       int (*asym_eds_op)(struct kernel_pkey_params *params,
1682*4882a593Smuzhiyun			  const void *in, void *out);
1683*4882a593Smuzhiyun       int (*asym_verify_signature)(struct kernel_pkey_params *params,
1684*4882a593Smuzhiyun				    const void *in, const void *in2);
1685*4882a593Smuzhiyun
1686*4882a593Smuzhiyun     These methods are optional.  If provided the first allows a key to be
1687*4882a593Smuzhiyun     used to encrypt, decrypt or sign a blob of data, and the second allows a
1688*4882a593Smuzhiyun     key to verify a signature.
1689*4882a593Smuzhiyun
1690*4882a593Smuzhiyun     In all cases, the following information is provided in the params block::
1691*4882a593Smuzhiyun
1692*4882a593Smuzhiyun	struct kernel_pkey_params {
1693*4882a593Smuzhiyun		struct key	*key;
1694*4882a593Smuzhiyun		const char	*encoding;
1695*4882a593Smuzhiyun		const char	*hash_algo;
1696*4882a593Smuzhiyun		char		*info;
1697*4882a593Smuzhiyun		__u32		in_len;
1698*4882a593Smuzhiyun		union {
1699*4882a593Smuzhiyun			__u32	out_len;
1700*4882a593Smuzhiyun			__u32	in2_len;
1701*4882a593Smuzhiyun		};
1702*4882a593Smuzhiyun		enum kernel_pkey_operation op : 8;
1703*4882a593Smuzhiyun	};
1704*4882a593Smuzhiyun
1705*4882a593Smuzhiyun     This includes the key to be used; a string indicating the encoding to use
1706*4882a593Smuzhiyun     (for instance, "pkcs1" may be used with an RSA key to indicate
1707*4882a593Smuzhiyun     RSASSA-PKCS1-v1.5 or RSAES-PKCS1-v1.5 encoding or "raw" if no encoding);
1708*4882a593Smuzhiyun     the name of the hash algorithm used to generate the data for a signature
1709*4882a593Smuzhiyun     (if appropriate); the sizes of the input and output (or second input)
1710*4882a593Smuzhiyun     buffers; and the ID of the operation to be performed.
1711*4882a593Smuzhiyun
1712*4882a593Smuzhiyun     For a given operation ID, the input and output buffers are used as
1713*4882a593Smuzhiyun     follows::
1714*4882a593Smuzhiyun
1715*4882a593Smuzhiyun	Operation ID		in,in_len	out,out_len	in2,in2_len
1716*4882a593Smuzhiyun	=======================	===============	===============	===============
1717*4882a593Smuzhiyun	kernel_pkey_encrypt	Raw data	Encrypted data	-
1718*4882a593Smuzhiyun	kernel_pkey_decrypt	Encrypted data	Raw data	-
1719*4882a593Smuzhiyun	kernel_pkey_sign	Raw data	Signature	-
1720*4882a593Smuzhiyun	kernel_pkey_verify	Raw data	-		Signature
1721*4882a593Smuzhiyun
1722*4882a593Smuzhiyun     asym_eds_op() deals with encryption, decryption and signature creation as
1723*4882a593Smuzhiyun     specified by params->op.  Note that params->op is also set for
1724*4882a593Smuzhiyun     asym_verify_signature().
1725*4882a593Smuzhiyun
1726*4882a593Smuzhiyun     Encrypting and signature creation both take raw data in the input buffer
1727*4882a593Smuzhiyun     and return the encrypted result in the output buffer.  Padding may have
1728*4882a593Smuzhiyun     been added if an encoding was set.  In the case of signature creation,
1729*4882a593Smuzhiyun     depending on the encoding, the padding created may need to indicate the
1730*4882a593Smuzhiyun     digest algorithm - the name of which should be supplied in hash_algo.
1731*4882a593Smuzhiyun
1732*4882a593Smuzhiyun     Decryption takes encrypted data in the input buffer and returns the raw
1733*4882a593Smuzhiyun     data in the output buffer.  Padding will get checked and stripped off if
1734*4882a593Smuzhiyun     an encoding was set.
1735*4882a593Smuzhiyun
1736*4882a593Smuzhiyun     Verification takes raw data in the input buffer and the signature in the
1737*4882a593Smuzhiyun     second input buffer and checks that the one matches the other.  Padding
1738*4882a593Smuzhiyun     will be validated.  Depending on the encoding, the digest algorithm used
1739*4882a593Smuzhiyun     to generate the raw data may need to be indicated in hash_algo.
1740*4882a593Smuzhiyun
1741*4882a593Smuzhiyun     If successful, asym_eds_op() should return the number of bytes written
1742*4882a593Smuzhiyun     into the output buffer.  asym_verify_signature() should return 0.
1743*4882a593Smuzhiyun
1744*4882a593Smuzhiyun     A variety of errors may be returned, including EOPNOTSUPP if the operation
1745*4882a593Smuzhiyun     is not supported; EKEYREJECTED if verification fails; ENOPKG if the
1746*4882a593Smuzhiyun     required crypto isn't available.
1747*4882a593Smuzhiyun
1748*4882a593Smuzhiyun
1749*4882a593Smuzhiyun  *  ``asym_query``::
1750*4882a593Smuzhiyun
1751*4882a593Smuzhiyun       int (*asym_query)(const struct kernel_pkey_params *params,
1752*4882a593Smuzhiyun			 struct kernel_pkey_query *info);
1753*4882a593Smuzhiyun
1754*4882a593Smuzhiyun     This method is optional.  If provided it allows information about the
1755*4882a593Smuzhiyun     public or asymmetric key held in the key to be determined.
1756*4882a593Smuzhiyun
1757*4882a593Smuzhiyun     The parameter block is as for asym_eds_op() and co. but in_len and out_len
1758*4882a593Smuzhiyun     are unused.  The encoding and hash_algo fields should be used to reduce
1759*4882a593Smuzhiyun     the returned buffer/data sizes as appropriate.
1760*4882a593Smuzhiyun
1761*4882a593Smuzhiyun     If successful, the following information is filled in::
1762*4882a593Smuzhiyun
1763*4882a593Smuzhiyun	struct kernel_pkey_query {
1764*4882a593Smuzhiyun		__u32		supported_ops;
1765*4882a593Smuzhiyun		__u32		key_size;
1766*4882a593Smuzhiyun		__u16		max_data_size;
1767*4882a593Smuzhiyun		__u16		max_sig_size;
1768*4882a593Smuzhiyun		__u16		max_enc_size;
1769*4882a593Smuzhiyun		__u16		max_dec_size;
1770*4882a593Smuzhiyun	};
1771*4882a593Smuzhiyun
1772*4882a593Smuzhiyun     The supported_ops field will contain a bitmask indicating what operations
1773*4882a593Smuzhiyun     are supported by the key, including encryption of a blob, decryption of a
1774*4882a593Smuzhiyun     blob, signing a blob and verifying the signature on a blob.  The following
1775*4882a593Smuzhiyun     constants are defined for this::
1776*4882a593Smuzhiyun
1777*4882a593Smuzhiyun	KEYCTL_SUPPORTS_{ENCRYPT,DECRYPT,SIGN,VERIFY}
1778*4882a593Smuzhiyun
1779*4882a593Smuzhiyun     The key_size field is the size of the key in bits.  max_data_size and
1780*4882a593Smuzhiyun     max_sig_size are the maximum raw data and signature sizes for creation and
1781*4882a593Smuzhiyun     verification of a signature; max_enc_size and max_dec_size are the maximum
1782*4882a593Smuzhiyun     raw data and signature sizes for encryption and decryption.  The
1783*4882a593Smuzhiyun     max_*_size fields are measured in bytes.
1784*4882a593Smuzhiyun
1785*4882a593Smuzhiyun     If successful, 0 will be returned.  If the key doesn't support this,
1786*4882a593Smuzhiyun     EOPNOTSUPP will be returned.
1787*4882a593Smuzhiyun
1788*4882a593Smuzhiyun
1789*4882a593SmuzhiyunRequest-Key Callback Service
1790*4882a593Smuzhiyun============================
1791*4882a593Smuzhiyun
1792*4882a593SmuzhiyunTo create a new key, the kernel will attempt to execute the following command
1793*4882a593Smuzhiyunline::
1794*4882a593Smuzhiyun
1795*4882a593Smuzhiyun	/sbin/request-key create <key> <uid> <gid> \
1796*4882a593Smuzhiyun		<threadring> <processring> <sessionring> <callout_info>
1797*4882a593Smuzhiyun
1798*4882a593Smuzhiyun<key> is the key being constructed, and the three keyrings are the process
1799*4882a593Smuzhiyunkeyrings from the process that caused the search to be issued. These are
1800*4882a593Smuzhiyunincluded for two reasons:
1801*4882a593Smuzhiyun
1802*4882a593Smuzhiyun   1  There may be an authentication token in one of the keyrings that is
1803*4882a593Smuzhiyun      required to obtain the key, eg: a Kerberos Ticket-Granting Ticket.
1804*4882a593Smuzhiyun
1805*4882a593Smuzhiyun   2  The new key should probably be cached in one of these rings.
1806*4882a593Smuzhiyun
1807*4882a593SmuzhiyunThis program should set it UID and GID to those specified before attempting to
1808*4882a593Smuzhiyunaccess any more keys. It may then look around for a user specific process to
1809*4882a593Smuzhiyunhand the request off to (perhaps a path held in placed in another key by, for
1810*4882a593Smuzhiyunexample, the KDE desktop manager).
1811*4882a593Smuzhiyun
1812*4882a593SmuzhiyunThe program (or whatever it calls) should finish construction of the key by
1813*4882a593Smuzhiyuncalling KEYCTL_INSTANTIATE or KEYCTL_INSTANTIATE_IOV, which also permits it to
1814*4882a593Smuzhiyuncache the key in one of the keyrings (probably the session ring) before
1815*4882a593Smuzhiyunreturning.  Alternatively, the key can be marked as negative with KEYCTL_NEGATE
1816*4882a593Smuzhiyunor KEYCTL_REJECT; this also permits the key to be cached in one of the
1817*4882a593Smuzhiyunkeyrings.
1818*4882a593Smuzhiyun
1819*4882a593SmuzhiyunIf it returns with the key remaining in the unconstructed state, the key will
1820*4882a593Smuzhiyunbe marked as being negative, it will be added to the session keyring, and an
1821*4882a593Smuzhiyunerror will be returned to the key requestor.
1822*4882a593Smuzhiyun
1823*4882a593SmuzhiyunSupplementary information may be provided from whoever or whatever invoked this
1824*4882a593Smuzhiyunservice. This will be passed as the <callout_info> parameter. If no such
1825*4882a593Smuzhiyuninformation was made available, then "-" will be passed as this parameter
1826*4882a593Smuzhiyuninstead.
1827*4882a593Smuzhiyun
1828*4882a593Smuzhiyun
1829*4882a593SmuzhiyunSimilarly, the kernel may attempt to update an expired or a soon to expire key
1830*4882a593Smuzhiyunby executing::
1831*4882a593Smuzhiyun
1832*4882a593Smuzhiyun	/sbin/request-key update <key> <uid> <gid> \
1833*4882a593Smuzhiyun		<threadring> <processring> <sessionring>
1834*4882a593Smuzhiyun
1835*4882a593SmuzhiyunIn this case, the program isn't required to actually attach the key to a ring;
1836*4882a593Smuzhiyunthe rings are provided for reference.
1837*4882a593Smuzhiyun
1838*4882a593Smuzhiyun
1839*4882a593SmuzhiyunGarbage Collection
1840*4882a593Smuzhiyun==================
1841*4882a593Smuzhiyun
1842*4882a593SmuzhiyunDead keys (for which the type has been removed) will be automatically unlinked
1843*4882a593Smuzhiyunfrom those keyrings that point to them and deleted as soon as possible by a
1844*4882a593Smuzhiyunbackground garbage collector.
1845*4882a593Smuzhiyun
1846*4882a593SmuzhiyunSimilarly, revoked and expired keys will be garbage collected, but only after a
1847*4882a593Smuzhiyuncertain amount of time has passed.  This time is set as a number of seconds in::
1848*4882a593Smuzhiyun
1849*4882a593Smuzhiyun	/proc/sys/kernel/keys/gc_delay
1850