xref: /aosp_15_r20/external/ltp/include/lapi/keyctl.h (revision 49cdfc7efb34551c7342be41a7384b9c40d7cab7)
1*49cdfc7eSAndroid Build Coastguard Worker // SPDX-License-Identifier: GPL-2.0-or-later
2*49cdfc7eSAndroid Build Coastguard Worker /*
3*49cdfc7eSAndroid Build Coastguard Worker  * Copyright (c) 2017 Cyril Hrubis <[email protected]>
4*49cdfc7eSAndroid Build Coastguard Worker  */
5*49cdfc7eSAndroid Build Coastguard Worker 
6*49cdfc7eSAndroid Build Coastguard Worker #ifndef LAPI_KEYCTL_H__
7*49cdfc7eSAndroid Build Coastguard Worker #define LAPI_KEYCTL_H__
8*49cdfc7eSAndroid Build Coastguard Worker 
9*49cdfc7eSAndroid Build Coastguard Worker #include "config.h"
10*49cdfc7eSAndroid Build Coastguard Worker 
11*49cdfc7eSAndroid Build Coastguard Worker #if defined(HAVE_KEYUTILS_H) && defined(HAVE_LIBKEYUTILS)
12*49cdfc7eSAndroid Build Coastguard Worker # include <keyutils.h>
13*49cdfc7eSAndroid Build Coastguard Worker #else
14*49cdfc7eSAndroid Build Coastguard Worker # ifdef HAVE_LINUX_KEYCTL_H
15*49cdfc7eSAndroid Build Coastguard Worker #  include <linux/keyctl.h>
16*49cdfc7eSAndroid Build Coastguard Worker # endif /* HAVE_LINUX_KEYCTL_H */
17*49cdfc7eSAndroid Build Coastguard Worker 
18*49cdfc7eSAndroid Build Coastguard Worker # include <stdarg.h>
19*49cdfc7eSAndroid Build Coastguard Worker # include <stdint.h>
20*49cdfc7eSAndroid Build Coastguard Worker # include "lapi/syscalls.h"
21*49cdfc7eSAndroid Build Coastguard Worker typedef int32_t key_serial_t;
22*49cdfc7eSAndroid Build Coastguard Worker 
add_key(const char * type,const char * description,const void * payload,size_t plen,key_serial_t ringid)23*49cdfc7eSAndroid Build Coastguard Worker static inline key_serial_t add_key(const char *type,
24*49cdfc7eSAndroid Build Coastguard Worker 				   const char *description,
25*49cdfc7eSAndroid Build Coastguard Worker 				   const void *payload,
26*49cdfc7eSAndroid Build Coastguard Worker 				   size_t plen,
27*49cdfc7eSAndroid Build Coastguard Worker 				   key_serial_t ringid)
28*49cdfc7eSAndroid Build Coastguard Worker {
29*49cdfc7eSAndroid Build Coastguard Worker 	return tst_syscall(__NR_add_key,
30*49cdfc7eSAndroid Build Coastguard Worker 		type, description, payload, plen, ringid);
31*49cdfc7eSAndroid Build Coastguard Worker }
32*49cdfc7eSAndroid Build Coastguard Worker 
request_key(const char * type,const char * description,const char * callout_info,key_serial_t destringid)33*49cdfc7eSAndroid Build Coastguard Worker static inline key_serial_t request_key(const char *type,
34*49cdfc7eSAndroid Build Coastguard Worker 				       const char *description,
35*49cdfc7eSAndroid Build Coastguard Worker 				       const char *callout_info,
36*49cdfc7eSAndroid Build Coastguard Worker 				       key_serial_t destringid)
37*49cdfc7eSAndroid Build Coastguard Worker {
38*49cdfc7eSAndroid Build Coastguard Worker 	return tst_syscall(__NR_request_key,
39*49cdfc7eSAndroid Build Coastguard Worker 		type, description, callout_info, destringid);
40*49cdfc7eSAndroid Build Coastguard Worker }
41*49cdfc7eSAndroid Build Coastguard Worker 
keyctl(int cmd,...)42*49cdfc7eSAndroid Build Coastguard Worker static inline long keyctl(int cmd, ...)
43*49cdfc7eSAndroid Build Coastguard Worker {
44*49cdfc7eSAndroid Build Coastguard Worker 	va_list va;
45*49cdfc7eSAndroid Build Coastguard Worker 	unsigned long arg2, arg3, arg4, arg5;
46*49cdfc7eSAndroid Build Coastguard Worker 
47*49cdfc7eSAndroid Build Coastguard Worker 	va_start(va, cmd);
48*49cdfc7eSAndroid Build Coastguard Worker 	arg2 = va_arg(va, unsigned long);
49*49cdfc7eSAndroid Build Coastguard Worker 	arg3 = va_arg(va, unsigned long);
50*49cdfc7eSAndroid Build Coastguard Worker 	arg4 = va_arg(va, unsigned long);
51*49cdfc7eSAndroid Build Coastguard Worker 	arg5 = va_arg(va, unsigned long);
52*49cdfc7eSAndroid Build Coastguard Worker 	va_end(va);
53*49cdfc7eSAndroid Build Coastguard Worker 
54*49cdfc7eSAndroid Build Coastguard Worker 	return tst_syscall(__NR_keyctl, cmd, arg2, arg3, arg4, arg5);
55*49cdfc7eSAndroid Build Coastguard Worker }
56*49cdfc7eSAndroid Build Coastguard Worker 
keyctl_join_session_keyring(const char * name)57*49cdfc7eSAndroid Build Coastguard Worker static inline key_serial_t keyctl_join_session_keyring(const char *name) {
58*49cdfc7eSAndroid Build Coastguard Worker 	return keyctl(KEYCTL_JOIN_SESSION_KEYRING, name);
59*49cdfc7eSAndroid Build Coastguard Worker }
60*49cdfc7eSAndroid Build Coastguard Worker 
61*49cdfc7eSAndroid Build Coastguard Worker #endif /* defined(HAVE_KEYUTILS_H) && defined(HAVE_LIBKEYUTILS) */
62*49cdfc7eSAndroid Build Coastguard Worker 
63*49cdfc7eSAndroid Build Coastguard Worker /* special process keyring shortcut IDs */
64*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_SPEC_THREAD_KEYRING
65*49cdfc7eSAndroid Build Coastguard Worker # define KEY_SPEC_THREAD_KEYRING -1
66*49cdfc7eSAndroid Build Coastguard Worker #endif
67*49cdfc7eSAndroid Build Coastguard Worker 
68*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_SPEC_PROCESS_KEYRING
69*49cdfc7eSAndroid Build Coastguard Worker # define KEY_SPEC_PROCESS_KEYRING -2
70*49cdfc7eSAndroid Build Coastguard Worker #endif
71*49cdfc7eSAndroid Build Coastguard Worker 
72*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_SPEC_SESSION_KEYRING
73*49cdfc7eSAndroid Build Coastguard Worker # define KEY_SPEC_SESSION_KEYRING -3
74*49cdfc7eSAndroid Build Coastguard Worker #endif
75*49cdfc7eSAndroid Build Coastguard Worker 
76*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_SPEC_USER_KEYRING
77*49cdfc7eSAndroid Build Coastguard Worker # define KEY_SPEC_USER_KEYRING -4
78*49cdfc7eSAndroid Build Coastguard Worker #endif
79*49cdfc7eSAndroid Build Coastguard Worker 
80*49cdfc7eSAndroid Build Coastguard Worker 
81*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_SPEC_USER_SESSION_KEYRING
82*49cdfc7eSAndroid Build Coastguard Worker # define KEY_SPEC_USER_SESSION_KEYRING -5
83*49cdfc7eSAndroid Build Coastguard Worker #endif
84*49cdfc7eSAndroid Build Coastguard Worker 
85*49cdfc7eSAndroid Build Coastguard Worker /* request-key default keyrings */
86*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_REQKEY_DEFL_THREAD_KEYRING
87*49cdfc7eSAndroid Build Coastguard Worker # define KEY_REQKEY_DEFL_THREAD_KEYRING 1
88*49cdfc7eSAndroid Build Coastguard Worker #endif
89*49cdfc7eSAndroid Build Coastguard Worker 
90*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_REQKEY_DEFL_SESSION_KEYRING
91*49cdfc7eSAndroid Build Coastguard Worker # define KEY_REQKEY_DEFL_SESSION_KEYRING 3
92*49cdfc7eSAndroid Build Coastguard Worker #endif
93*49cdfc7eSAndroid Build Coastguard Worker 
94*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_REQKEY_DEFL_DEFAULT
95*49cdfc7eSAndroid Build Coastguard Worker # define KEY_REQKEY_DEFL_DEFAULT	0
96*49cdfc7eSAndroid Build Coastguard Worker #endif
97*49cdfc7eSAndroid Build Coastguard Worker 
98*49cdfc7eSAndroid Build Coastguard Worker /* keyctl commands */
99*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_GET_KEYRING_ID
100*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_GET_KEYRING_ID 0
101*49cdfc7eSAndroid Build Coastguard Worker #endif
102*49cdfc7eSAndroid Build Coastguard Worker 
103*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_JOIN_SESSION_KEYRING
104*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_JOIN_SESSION_KEYRING 1
105*49cdfc7eSAndroid Build Coastguard Worker #endif
106*49cdfc7eSAndroid Build Coastguard Worker 
107*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_UPDATE
108*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_UPDATE 2
109*49cdfc7eSAndroid Build Coastguard Worker #endif
110*49cdfc7eSAndroid Build Coastguard Worker 
111*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_REVOKE
112*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_REVOKE 3
113*49cdfc7eSAndroid Build Coastguard Worker #endif
114*49cdfc7eSAndroid Build Coastguard Worker 
115*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_SETPERM
116*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_SETPERM 5
117*49cdfc7eSAndroid Build Coastguard Worker #endif
118*49cdfc7eSAndroid Build Coastguard Worker 
119*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_CLEAR
120*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_CLEAR 7
121*49cdfc7eSAndroid Build Coastguard Worker #endif
122*49cdfc7eSAndroid Build Coastguard Worker 
123*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_UNLINK
124*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_UNLINK 9
125*49cdfc7eSAndroid Build Coastguard Worker #endif
126*49cdfc7eSAndroid Build Coastguard Worker 
127*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_READ
128*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_READ 11
129*49cdfc7eSAndroid Build Coastguard Worker #endif
130*49cdfc7eSAndroid Build Coastguard Worker 
131*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_SET_REQKEY_KEYRING
132*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_SET_REQKEY_KEYRING 14
133*49cdfc7eSAndroid Build Coastguard Worker #endif
134*49cdfc7eSAndroid Build Coastguard Worker 
135*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_SET_TIMEOUT
136*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_SET_TIMEOUT 15
137*49cdfc7eSAndroid Build Coastguard Worker #endif
138*49cdfc7eSAndroid Build Coastguard Worker 
139*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_INVALIDATE
140*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_INVALIDATE 21
141*49cdfc7eSAndroid Build Coastguard Worker #endif
142*49cdfc7eSAndroid Build Coastguard Worker 
143*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEYCTL_WATCH_KEY
144*49cdfc7eSAndroid Build Coastguard Worker # define KEYCTL_WATCH_KEY 32
145*49cdfc7eSAndroid Build Coastguard Worker #endif
146*49cdfc7eSAndroid Build Coastguard Worker 
147*49cdfc7eSAndroid Build Coastguard Worker /* key permissions */
148*49cdfc7eSAndroid Build Coastguard Worker #ifndef KEY_POS_VIEW
149*49cdfc7eSAndroid Build Coastguard Worker # define KEY_POS_VIEW    0x01000000
150*49cdfc7eSAndroid Build Coastguard Worker # define KEY_POS_READ    0x02000000
151*49cdfc7eSAndroid Build Coastguard Worker # define KEY_POS_WRITE   0x04000000
152*49cdfc7eSAndroid Build Coastguard Worker # define KEY_POS_SEARCH  0x08000000
153*49cdfc7eSAndroid Build Coastguard Worker # define KEY_POS_LINK    0x10000000
154*49cdfc7eSAndroid Build Coastguard Worker # define KEY_POS_SETATTR 0x20000000
155*49cdfc7eSAndroid Build Coastguard Worker # define KEY_POS_ALL     0x3f000000
156*49cdfc7eSAndroid Build Coastguard Worker 
157*49cdfc7eSAndroid Build Coastguard Worker # define KEY_USR_VIEW    0x00010000
158*49cdfc7eSAndroid Build Coastguard Worker # define KEY_USR_READ    0x00020000
159*49cdfc7eSAndroid Build Coastguard Worker # define KEY_USR_WRITE   0x00040000
160*49cdfc7eSAndroid Build Coastguard Worker # define KEY_USR_SEARCH  0x00080000
161*49cdfc7eSAndroid Build Coastguard Worker # define KEY_USR_LINK    0x00100000
162*49cdfc7eSAndroid Build Coastguard Worker # define KEY_USR_SETATTR 0x00200000
163*49cdfc7eSAndroid Build Coastguard Worker # define KEY_USR_ALL     0x003f0000
164*49cdfc7eSAndroid Build Coastguard Worker 
165*49cdfc7eSAndroid Build Coastguard Worker # define KEY_GRP_VIEW    0x00000100
166*49cdfc7eSAndroid Build Coastguard Worker # define KEY_GRP_READ    0x00000200
167*49cdfc7eSAndroid Build Coastguard Worker # define KEY_GRP_WRITE   0x00000400
168*49cdfc7eSAndroid Build Coastguard Worker # define KEY_GRP_SEARCH  0x00000800
169*49cdfc7eSAndroid Build Coastguard Worker # define KEY_GRP_LINK    0x00001000
170*49cdfc7eSAndroid Build Coastguard Worker # define KEY_GRP_SETATTR 0x00002000
171*49cdfc7eSAndroid Build Coastguard Worker # define KEY_GRP_ALL     0x00003f00
172*49cdfc7eSAndroid Build Coastguard Worker 
173*49cdfc7eSAndroid Build Coastguard Worker # define KEY_OTH_VIEW    0x00000001
174*49cdfc7eSAndroid Build Coastguard Worker # define KEY_OTH_READ    0x00000002
175*49cdfc7eSAndroid Build Coastguard Worker # define KEY_OTH_WRITE   0x00000004
176*49cdfc7eSAndroid Build Coastguard Worker # define KEY_OTH_SEARCH  0x00000008
177*49cdfc7eSAndroid Build Coastguard Worker # define KEY_OTH_LINK    0x00000010
178*49cdfc7eSAndroid Build Coastguard Worker # define KEY_OTH_SETATTR 0x00000020
179*49cdfc7eSAndroid Build Coastguard Worker # define KEY_OTH_ALL     0x0000003f
180*49cdfc7eSAndroid Build Coastguard Worker #endif /* !KEY_POS_VIEW */
181*49cdfc7eSAndroid Build Coastguard Worker 
182*49cdfc7eSAndroid Build Coastguard Worker #endif	/* LAPI_KEYCTL_H__ */
183