1*cf84ac9aSAndroid Build Coastguard Worker /*
2*cf84ac9aSAndroid Build Coastguard Worker * Check decoding of keyctl syscall.
3*cf84ac9aSAndroid Build Coastguard Worker *
4*cf84ac9aSAndroid Build Coastguard Worker * Copyright (c) 2016 Eugene Syromyatnikov <[email protected]>
5*cf84ac9aSAndroid Build Coastguard Worker * Copyright (c) 2016-2018 The strace developers.
6*cf84ac9aSAndroid Build Coastguard Worker * All rights reserved.
7*cf84ac9aSAndroid Build Coastguard Worker *
8*cf84ac9aSAndroid Build Coastguard Worker * Redistribution and use in source and binary forms, with or without
9*cf84ac9aSAndroid Build Coastguard Worker * modification, are permitted provided that the following conditions
10*cf84ac9aSAndroid Build Coastguard Worker * are met:
11*cf84ac9aSAndroid Build Coastguard Worker * 1. Redistributions of source code must retain the above copyright
12*cf84ac9aSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer.
13*cf84ac9aSAndroid Build Coastguard Worker * 2. Redistributions in binary form must reproduce the above copyright
14*cf84ac9aSAndroid Build Coastguard Worker * notice, this list of conditions and the following disclaimer in the
15*cf84ac9aSAndroid Build Coastguard Worker * documentation and/or other materials provided with the distribution.
16*cf84ac9aSAndroid Build Coastguard Worker * 3. The name of the author may not be used to endorse or promote products
17*cf84ac9aSAndroid Build Coastguard Worker * derived from this software without specific prior written permission.
18*cf84ac9aSAndroid Build Coastguard Worker *
19*cf84ac9aSAndroid Build Coastguard Worker * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
20*cf84ac9aSAndroid Build Coastguard Worker * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
21*cf84ac9aSAndroid Build Coastguard Worker * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
22*cf84ac9aSAndroid Build Coastguard Worker * IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT,
23*cf84ac9aSAndroid Build Coastguard Worker * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT
24*cf84ac9aSAndroid Build Coastguard Worker * NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
25*cf84ac9aSAndroid Build Coastguard Worker * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
26*cf84ac9aSAndroid Build Coastguard Worker * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
27*cf84ac9aSAndroid Build Coastguard Worker * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF
28*cf84ac9aSAndroid Build Coastguard Worker * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
29*cf84ac9aSAndroid Build Coastguard Worker */
30*cf84ac9aSAndroid Build Coastguard Worker
31*cf84ac9aSAndroid Build Coastguard Worker #include "tests.h"
32*cf84ac9aSAndroid Build Coastguard Worker
33*cf84ac9aSAndroid Build Coastguard Worker #include <asm/unistd.h>
34*cf84ac9aSAndroid Build Coastguard Worker
35*cf84ac9aSAndroid Build Coastguard Worker #ifdef __NR_keyctl
36*cf84ac9aSAndroid Build Coastguard Worker
37*cf84ac9aSAndroid Build Coastguard Worker # include <linux/types.h>
38*cf84ac9aSAndroid Build Coastguard Worker # include <linux/keyctl.h>
39*cf84ac9aSAndroid Build Coastguard Worker
40*cf84ac9aSAndroid Build Coastguard Worker # include <assert.h>
41*cf84ac9aSAndroid Build Coastguard Worker # include <errno.h>
42*cf84ac9aSAndroid Build Coastguard Worker # include <inttypes.h>
43*cf84ac9aSAndroid Build Coastguard Worker # include <stdarg.h>
44*cf84ac9aSAndroid Build Coastguard Worker # include <stdio.h>
45*cf84ac9aSAndroid Build Coastguard Worker # include <stdlib.h>
46*cf84ac9aSAndroid Build Coastguard Worker # include <string.h>
47*cf84ac9aSAndroid Build Coastguard Worker # include <unistd.h>
48*cf84ac9aSAndroid Build Coastguard Worker # include <sys/uio.h>
49*cf84ac9aSAndroid Build Coastguard Worker
50*cf84ac9aSAndroid Build Coastguard Worker /* This check should be before #include "xlat/keyctl_commands.h" */
51*cf84ac9aSAndroid Build Coastguard Worker # ifndef KEYCTL_DH_COMPUTE
52*cf84ac9aSAndroid Build Coastguard Worker struct keyctl_dh_params {
53*cf84ac9aSAndroid Build Coastguard Worker int32_t private;
54*cf84ac9aSAndroid Build Coastguard Worker int32_t prime;
55*cf84ac9aSAndroid Build Coastguard Worker int32_t base;
56*cf84ac9aSAndroid Build Coastguard Worker };
57*cf84ac9aSAndroid Build Coastguard Worker # endif
58*cf84ac9aSAndroid Build Coastguard Worker
59*cf84ac9aSAndroid Build Coastguard Worker # ifndef HAVE_STRUCT_KEYCTL_KDF_PARAMS
60*cf84ac9aSAndroid Build Coastguard Worker struct keyctl_kdf_params {
61*cf84ac9aSAndroid Build Coastguard Worker char *hashname;
62*cf84ac9aSAndroid Build Coastguard Worker char *otherinfo;
63*cf84ac9aSAndroid Build Coastguard Worker uint32_t otherinfolen;
64*cf84ac9aSAndroid Build Coastguard Worker uint32_t __spare[8];
65*cf84ac9aSAndroid Build Coastguard Worker };
66*cf84ac9aSAndroid Build Coastguard Worker # endif
67*cf84ac9aSAndroid Build Coastguard Worker
68*cf84ac9aSAndroid Build Coastguard Worker # include "xlat.h"
69*cf84ac9aSAndroid Build Coastguard Worker # include "xlat/keyctl_commands.h"
70*cf84ac9aSAndroid Build Coastguard Worker
71*cf84ac9aSAndroid Build Coastguard Worker # ifndef KEY_SPEC_REQKEY_AUTH_KEY
72*cf84ac9aSAndroid Build Coastguard Worker # define KEY_SPEC_REQKEY_AUTH_KEY -7
73*cf84ac9aSAndroid Build Coastguard Worker # endif
74*cf84ac9aSAndroid Build Coastguard Worker
75*cf84ac9aSAndroid Build Coastguard Worker # ifndef KEY_SPEC_REQUESTOR_KEYRING
76*cf84ac9aSAndroid Build Coastguard Worker # define KEY_SPEC_REQUESTOR_KEYRING -8
77*cf84ac9aSAndroid Build Coastguard Worker # endif
78*cf84ac9aSAndroid Build Coastguard Worker
79*cf84ac9aSAndroid Build Coastguard Worker static const size_t limit = 10;
80*cf84ac9aSAndroid Build Coastguard Worker
81*cf84ac9aSAndroid Build Coastguard Worker /*
82*cf84ac9aSAndroid Build Coastguard Worker * Well, this is true for DESCRIBE and GET_SECURITY, and false for READ and
83*cf84ac9aSAndroid Build Coastguard Worker * DH_COMPUTE and I see no ability to pass this information without
84*cf84ac9aSAndroid Build Coastguard Worker * significantly breaking interface.
85*cf84ac9aSAndroid Build Coastguard Worker */
86*cf84ac9aSAndroid Build Coastguard Worker bool nul_terminated_buf = true;
87*cf84ac9aSAndroid Build Coastguard Worker bool buf_in_arg;
88*cf84ac9aSAndroid Build Coastguard Worker
89*cf84ac9aSAndroid Build Coastguard Worker /* From ioctl_dm.c */
90*cf84ac9aSAndroid Build Coastguard Worker # define STR32 "AbCdEfGhIjKlMnOpQrStUvWxYz012345"
91*cf84ac9aSAndroid Build Coastguard Worker
92*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_RAW
93*cf84ac9aSAndroid Build Coastguard Worker # define XARG_STR(v_) (v_), STRINGIFY(v_)
94*cf84ac9aSAndroid Build Coastguard Worker #elif XLAT_VERBOSE
95*cf84ac9aSAndroid Build Coastguard Worker # define XARG_STR(v_) (v_), STRINGIFY(v_) " /* " #v_ " */"
96*cf84ac9aSAndroid Build Coastguard Worker #else
97*cf84ac9aSAndroid Build Coastguard Worker # define XARG_STR ARG_STR
98*cf84ac9aSAndroid Build Coastguard Worker #endif
99*cf84ac9aSAndroid Build Coastguard Worker
100*cf84ac9aSAndroid Build Coastguard Worker /*
101*cf84ac9aSAndroid Build Coastguard Worker * When this is called with positive size, the buffer provided is an "out"
102*cf84ac9aSAndroid Build Coastguard Worker * argument and rc contains resulting size (globally defined nul_terminated_buf
103*cf84ac9aSAndroid Build Coastguard Worker * controls whether it is nul-terminated or not). If size is negative,
104*cf84ac9aSAndroid Build Coastguard Worker * it contains "in" argument.
105*cf84ac9aSAndroid Build Coastguard Worker */
106*cf84ac9aSAndroid Build Coastguard Worker void
print_quoted_string_limit(const char * str,size_t size,long rc)107*cf84ac9aSAndroid Build Coastguard Worker print_quoted_string_limit(const char *str, size_t size, long rc)
108*cf84ac9aSAndroid Build Coastguard Worker {
109*cf84ac9aSAndroid Build Coastguard Worker size_t print_size = ((rc >= 0) && (size > 0)) ?
110*cf84ac9aSAndroid Build Coastguard Worker ((unsigned long) rc > size ? size :
111*cf84ac9aSAndroid Build Coastguard Worker (unsigned long) rc) : size;
112*cf84ac9aSAndroid Build Coastguard Worker size_t limited_size = print_size > limit ? limit : print_size;
113*cf84ac9aSAndroid Build Coastguard Worker
114*cf84ac9aSAndroid Build Coastguard Worker if ((rc == -1) && !buf_in_arg) {
115*cf84ac9aSAndroid Build Coastguard Worker printf("%p", str);
116*cf84ac9aSAndroid Build Coastguard Worker return;
117*cf84ac9aSAndroid Build Coastguard Worker }
118*cf84ac9aSAndroid Build Coastguard Worker
119*cf84ac9aSAndroid Build Coastguard Worker if (!nul_terminated_buf ||
120*cf84ac9aSAndroid Build Coastguard Worker (strnlen(str, limited_size) == limited_size)) {
121*cf84ac9aSAndroid Build Coastguard Worker print_quoted_memory(str, limited_size);
122*cf84ac9aSAndroid Build Coastguard Worker if (print_size > limit)
123*cf84ac9aSAndroid Build Coastguard Worker printf("...");
124*cf84ac9aSAndroid Build Coastguard Worker } else
125*cf84ac9aSAndroid Build Coastguard Worker print_quoted_string(str);
126*cf84ac9aSAndroid Build Coastguard Worker }
127*cf84ac9aSAndroid Build Coastguard Worker
128*cf84ac9aSAndroid Build Coastguard Worker static void
print_arg(kernel_ulong_t arg,const char * str,const char * fmt,size_t size,long rc)129*cf84ac9aSAndroid Build Coastguard Worker print_arg(kernel_ulong_t arg, const char *str, const char *fmt, size_t size,
130*cf84ac9aSAndroid Build Coastguard Worker long rc)
131*cf84ac9aSAndroid Build Coastguard Worker {
132*cf84ac9aSAndroid Build Coastguard Worker if (size == (size_t) -1)
133*cf84ac9aSAndroid Build Coastguard Worker size = 0;
134*cf84ac9aSAndroid Build Coastguard Worker
135*cf84ac9aSAndroid Build Coastguard Worker if (str) {
136*cf84ac9aSAndroid Build Coastguard Worker printf("%s", str);
137*cf84ac9aSAndroid Build Coastguard Worker } else {
138*cf84ac9aSAndroid Build Coastguard Worker if (size == sizeof(uint64_t))
139*cf84ac9aSAndroid Build Coastguard Worker printf(fmt, (uint64_t) arg);
140*cf84ac9aSAndroid Build Coastguard Worker else if (size == sizeof(uint32_t))
141*cf84ac9aSAndroid Build Coastguard Worker printf(fmt, (uint32_t) arg);
142*cf84ac9aSAndroid Build Coastguard Worker else
143*cf84ac9aSAndroid Build Coastguard Worker print_quoted_string_limit((void *) (uintptr_t) arg,
144*cf84ac9aSAndroid Build Coastguard Worker size, rc);
145*cf84ac9aSAndroid Build Coastguard Worker }
146*cf84ac9aSAndroid Build Coastguard Worker }
147*cf84ac9aSAndroid Build Coastguard Worker
148*cf84ac9aSAndroid Build Coastguard Worker /*
149*cf84ac9aSAndroid Build Coastguard Worker * Arguments are passed as sz, val, str, fmt. Arguments are read until 4
150*cf84ac9aSAndroid Build Coastguard Worker * arguments are retrieved or size of 0 is occurred.
151*cf84ac9aSAndroid Build Coastguard Worker *
152*cf84ac9aSAndroid Build Coastguard Worker * str == NULL && fmt == NULL && sz not in {4, 8} - print_quoted_string_limit is
153*cf84ac9aSAndroid Build Coastguard Worker * used for argument printing. If sz is negative, in argument is assumed, out
154*cf84ac9aSAndroid Build Coastguard Worker * otherwise.
155*cf84ac9aSAndroid Build Coastguard Worker */
156*cf84ac9aSAndroid Build Coastguard Worker void
do_keyctl(kernel_ulong_t cmd,const char * cmd_str,...)157*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(kernel_ulong_t cmd, const char *cmd_str, ...)
158*cf84ac9aSAndroid Build Coastguard Worker {
159*cf84ac9aSAndroid Build Coastguard Worker kernel_ulong_t args[4] = {
160*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee1badc0de5ULL,
161*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee2badc0de6ULL,
162*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee3badc0de7ULL,
163*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee4badc0de8ULL,
164*cf84ac9aSAndroid Build Coastguard Worker };
165*cf84ac9aSAndroid Build Coastguard Worker const char *arg_str[4] = { NULL };
166*cf84ac9aSAndroid Build Coastguard Worker const char *arg_fmt[4] = { "%llu", "%llu", "%llu", "%llu" };
167*cf84ac9aSAndroid Build Coastguard Worker size_t arg_sz[4] = {
168*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
169*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
170*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
171*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
172*cf84ac9aSAndroid Build Coastguard Worker };
173*cf84ac9aSAndroid Build Coastguard Worker unsigned i;
174*cf84ac9aSAndroid Build Coastguard Worker unsigned cnt = 0;
175*cf84ac9aSAndroid Build Coastguard Worker
176*cf84ac9aSAndroid Build Coastguard Worker va_list ap;
177*cf84ac9aSAndroid Build Coastguard Worker
178*cf84ac9aSAndroid Build Coastguard Worker va_start(ap, cmd_str);
179*cf84ac9aSAndroid Build Coastguard Worker
180*cf84ac9aSAndroid Build Coastguard Worker do {
181*cf84ac9aSAndroid Build Coastguard Worker arg_sz[cnt] = va_arg(ap, size_t);
182*cf84ac9aSAndroid Build Coastguard Worker if (!arg_sz[cnt])
183*cf84ac9aSAndroid Build Coastguard Worker break;
184*cf84ac9aSAndroid Build Coastguard Worker
185*cf84ac9aSAndroid Build Coastguard Worker if (arg_sz[cnt] == sizeof(uint64_t))
186*cf84ac9aSAndroid Build Coastguard Worker args[cnt] = va_arg(ap, uint64_t);
187*cf84ac9aSAndroid Build Coastguard Worker else if (arg_sz[cnt] == sizeof(uint32_t))
188*cf84ac9aSAndroid Build Coastguard Worker args[cnt] = va_arg(ap, uint32_t);
189*cf84ac9aSAndroid Build Coastguard Worker else
190*cf84ac9aSAndroid Build Coastguard Worker args[cnt] = (uintptr_t) va_arg(ap, void *);
191*cf84ac9aSAndroid Build Coastguard Worker
192*cf84ac9aSAndroid Build Coastguard Worker arg_str[cnt] = va_arg(ap, char *);
193*cf84ac9aSAndroid Build Coastguard Worker arg_fmt[cnt] = va_arg(ap, char *);
194*cf84ac9aSAndroid Build Coastguard Worker } while (++cnt < 4);
195*cf84ac9aSAndroid Build Coastguard Worker
196*cf84ac9aSAndroid Build Coastguard Worker long rc = syscall(__NR_keyctl, cmd, args[0], args[1], args[2], args[3]);
197*cf84ac9aSAndroid Build Coastguard Worker const char *errstr = sprintrc(rc);
198*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_RAW
199*cf84ac9aSAndroid Build Coastguard Worker printf("keyctl(%#x", (unsigned) cmd);
200*cf84ac9aSAndroid Build Coastguard Worker #elif XLAT_VERBOSE
201*cf84ac9aSAndroid Build Coastguard Worker printf("keyctl(%#x /* %s */", (unsigned) cmd, cmd_str);
202*cf84ac9aSAndroid Build Coastguard Worker #else
203*cf84ac9aSAndroid Build Coastguard Worker printf("keyctl(%s", cmd_str);
204*cf84ac9aSAndroid Build Coastguard Worker #endif
205*cf84ac9aSAndroid Build Coastguard Worker for (i = 0; i < cnt; i++) {
206*cf84ac9aSAndroid Build Coastguard Worker printf(", ");
207*cf84ac9aSAndroid Build Coastguard Worker print_arg(args[i], arg_str[i], arg_fmt[i], arg_sz[i], rc);
208*cf84ac9aSAndroid Build Coastguard Worker }
209*cf84ac9aSAndroid Build Coastguard Worker printf(") = %s\n", errstr);
210*cf84ac9aSAndroid Build Coastguard Worker }
211*cf84ac9aSAndroid Build Coastguard Worker
212*cf84ac9aSAndroid Build Coastguard Worker int
append_str(char ** buf,size_t * left,const char * fmt,...)213*cf84ac9aSAndroid Build Coastguard Worker append_str(char **buf, size_t *left, const char *fmt, ...)
214*cf84ac9aSAndroid Build Coastguard Worker {
215*cf84ac9aSAndroid Build Coastguard Worker int ret;
216*cf84ac9aSAndroid Build Coastguard Worker va_list ap;
217*cf84ac9aSAndroid Build Coastguard Worker
218*cf84ac9aSAndroid Build Coastguard Worker va_start(ap, fmt);
219*cf84ac9aSAndroid Build Coastguard Worker ret = vsnprintf(*buf, *left, fmt, ap);
220*cf84ac9aSAndroid Build Coastguard Worker va_end(ap);
221*cf84ac9aSAndroid Build Coastguard Worker
222*cf84ac9aSAndroid Build Coastguard Worker assert((ret >= 0) && ((unsigned) ret < *left));
223*cf84ac9aSAndroid Build Coastguard Worker
224*cf84ac9aSAndroid Build Coastguard Worker *left -= ret;
225*cf84ac9aSAndroid Build Coastguard Worker *buf += ret;
226*cf84ac9aSAndroid Build Coastguard Worker
227*cf84ac9aSAndroid Build Coastguard Worker return ret;
228*cf84ac9aSAndroid Build Coastguard Worker }
229*cf84ac9aSAndroid Build Coastguard Worker
230*cf84ac9aSAndroid Build Coastguard Worker const char *
kckdfp_to_str(struct keyctl_kdf_params * kdf,bool deref_hash,bool deref_oi,bool print_spare,const char * hash_str,const char * oi_str)231*cf84ac9aSAndroid Build Coastguard Worker kckdfp_to_str(struct keyctl_kdf_params *kdf, bool deref_hash, bool deref_oi,
232*cf84ac9aSAndroid Build Coastguard Worker bool print_spare, const char *hash_str, const char *oi_str)
233*cf84ac9aSAndroid Build Coastguard Worker {
234*cf84ac9aSAndroid Build Coastguard Worker static char buf[4096];
235*cf84ac9aSAndroid Build Coastguard Worker
236*cf84ac9aSAndroid Build Coastguard Worker size_t left = sizeof(buf);
237*cf84ac9aSAndroid Build Coastguard Worker char *pos = buf;
238*cf84ac9aSAndroid Build Coastguard Worker
239*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "{hashname=");
240*cf84ac9aSAndroid Build Coastguard Worker
241*cf84ac9aSAndroid Build Coastguard Worker if (deref_hash && hash_str) {
242*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "%s", hash_str);
243*cf84ac9aSAndroid Build Coastguard Worker } else if (!kdf->hashname) {
244*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "NULL");
245*cf84ac9aSAndroid Build Coastguard Worker } else if (deref_hash) {
246*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "\"%.*s\"", limit, kdf->hashname);
247*cf84ac9aSAndroid Build Coastguard Worker
248*cf84ac9aSAndroid Build Coastguard Worker if (strnlen(kdf->hashname, limit + 1) > limit)
249*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "...");
250*cf84ac9aSAndroid Build Coastguard Worker } else {
251*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "%p", kdf->hashname);
252*cf84ac9aSAndroid Build Coastguard Worker }
253*cf84ac9aSAndroid Build Coastguard Worker
254*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, ", otherinfo=");
255*cf84ac9aSAndroid Build Coastguard Worker
256*cf84ac9aSAndroid Build Coastguard Worker if (deref_oi && oi_str) {
257*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "%s", oi_str);
258*cf84ac9aSAndroid Build Coastguard Worker } else if (!kdf->otherinfo) {
259*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "NULL");
260*cf84ac9aSAndroid Build Coastguard Worker } else if (deref_oi) {
261*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "\"%.*s\"", limit, kdf->otherinfo);
262*cf84ac9aSAndroid Build Coastguard Worker
263*cf84ac9aSAndroid Build Coastguard Worker if (strnlen(kdf->otherinfo, limit + 1) > limit)
264*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "...");
265*cf84ac9aSAndroid Build Coastguard Worker } else {
266*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "%p", kdf->otherinfo);
267*cf84ac9aSAndroid Build Coastguard Worker }
268*cf84ac9aSAndroid Build Coastguard Worker
269*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, ", otherinfolen=%u", kdf->otherinfolen);
270*cf84ac9aSAndroid Build Coastguard Worker
271*cf84ac9aSAndroid Build Coastguard Worker if (print_spare) {
272*cf84ac9aSAndroid Build Coastguard Worker size_t i;
273*cf84ac9aSAndroid Build Coastguard Worker
274*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, ", __spare=[");
275*cf84ac9aSAndroid Build Coastguard Worker
276*cf84ac9aSAndroid Build Coastguard Worker for (i = 0; i < ARRAY_SIZE(kdf->__spare); i++) {
277*cf84ac9aSAndroid Build Coastguard Worker if (i)
278*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, ", ");
279*cf84ac9aSAndroid Build Coastguard Worker
280*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "%#x", kdf->__spare[i]);
281*cf84ac9aSAndroid Build Coastguard Worker }
282*cf84ac9aSAndroid Build Coastguard Worker
283*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "]");
284*cf84ac9aSAndroid Build Coastguard Worker }
285*cf84ac9aSAndroid Build Coastguard Worker
286*cf84ac9aSAndroid Build Coastguard Worker append_str(&pos, &left, "}");
287*cf84ac9aSAndroid Build Coastguard Worker
288*cf84ac9aSAndroid Build Coastguard Worker return buf;
289*cf84ac9aSAndroid Build Coastguard Worker }
290*cf84ac9aSAndroid Build Coastguard Worker
291*cf84ac9aSAndroid Build Coastguard Worker int
main(void)292*cf84ac9aSAndroid Build Coastguard Worker main(void)
293*cf84ac9aSAndroid Build Coastguard Worker {
294*cf84ac9aSAndroid Build Coastguard Worker enum { PR_LIMIT = 10, IOV_SIZE = 11, IOV_STR_SIZE = 4096 };
295*cf84ac9aSAndroid Build Coastguard Worker
296*cf84ac9aSAndroid Build Coastguard Worker static const char *kulong_fmt =
297*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t) == sizeof(uint64_t) ? "%#llx" : "%#x";
298*cf84ac9aSAndroid Build Coastguard Worker static const char *ksize_fmt =
299*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t) == sizeof(uint64_t) ? "%llu" : "%u";
300*cf84ac9aSAndroid Build Coastguard Worker static const char *ptr_fmt =
301*cf84ac9aSAndroid Build Coastguard Worker sizeof(void *) == sizeof(uint64_t) ? "%#llx" : "%#x";
302*cf84ac9aSAndroid Build Coastguard Worker static const char unterminated1[] = { '\1', '\2', '\3', '\4', '\5' };
303*cf84ac9aSAndroid Build Coastguard Worker static const char unterminated2[] = { '\6', '\7', '\10', '\11', '\12' };
304*cf84ac9aSAndroid Build Coastguard Worker static const char short_type_str[] = "shrt type";
305*cf84ac9aSAndroid Build Coastguard Worker static const char short_desc_str[] = "shrt desc";
306*cf84ac9aSAndroid Build Coastguard Worker static const char long_type_str[] = "overly long key type";
307*cf84ac9aSAndroid Build Coastguard Worker static const char long_desc_str[] = "overly long key description";
308*cf84ac9aSAndroid Build Coastguard Worker static const int32_t bogus_key1 = 0xdeadf00d;
309*cf84ac9aSAndroid Build Coastguard Worker static const int32_t bogus_key2 = 0x1eefdead;
310*cf84ac9aSAndroid Build Coastguard Worker static const kernel_ulong_t bogus_key3 =
311*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdec0ded1dec0ded2ULL;
312*cf84ac9aSAndroid Build Coastguard Worker static const char *bogus_key3_str = "-557785390";
313*cf84ac9aSAndroid Build Coastguard Worker
314*cf84ac9aSAndroid Build Coastguard Worker static const struct keyctl_dh_params kcdhp_data = {
315*cf84ac9aSAndroid Build Coastguard Worker .private = KEY_SPEC_GROUP_KEYRING,
316*cf84ac9aSAndroid Build Coastguard Worker .prime = 1234567890,
317*cf84ac9aSAndroid Build Coastguard Worker .base = 3141592653U
318*cf84ac9aSAndroid Build Coastguard Worker };
319*cf84ac9aSAndroid Build Coastguard Worker static const char *kcdhp_str = "{private="
320*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_RAW || XLAT_VERBOSE
321*cf84ac9aSAndroid Build Coastguard Worker "-6"
322*cf84ac9aSAndroid Build Coastguard Worker #endif
323*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_VERBOSE
324*cf84ac9aSAndroid Build Coastguard Worker " /* "
325*cf84ac9aSAndroid Build Coastguard Worker #endif
326*cf84ac9aSAndroid Build Coastguard Worker #if !XLAT_RAW
327*cf84ac9aSAndroid Build Coastguard Worker "KEY_SPEC_GROUP_KEYRING"
328*cf84ac9aSAndroid Build Coastguard Worker #endif
329*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_VERBOSE
330*cf84ac9aSAndroid Build Coastguard Worker " */"
331*cf84ac9aSAndroid Build Coastguard Worker #endif
332*cf84ac9aSAndroid Build Coastguard Worker ", prime=1234567890, base=-1153374643}";
333*cf84ac9aSAndroid Build Coastguard Worker
334*cf84ac9aSAndroid Build Coastguard Worker /*
335*cf84ac9aSAndroid Build Coastguard Worker * It's bigger than current hash name size limit, but since it's
336*cf84ac9aSAndroid Build Coastguard Worker * implementation-dependent and totally internal, we do not rely
337*cf84ac9aSAndroid Build Coastguard Worker * on it much.
338*cf84ac9aSAndroid Build Coastguard Worker */
339*cf84ac9aSAndroid Build Coastguard Worker static const char long_hash_data[] = STR32 STR32 STR32 STR32 "xxx";
340*cf84ac9aSAndroid Build Coastguard Worker static const char short_hash_data[] = "hmac(aes)";
341*cf84ac9aSAndroid Build Coastguard Worker static const char otherinfo1_data[] = "\1\2 OH HAI THAR\255\0\1";
342*cf84ac9aSAndroid Build Coastguard Worker static const char otherinfo2_data[] = "\1\2\n\255\0\1";
343*cf84ac9aSAndroid Build Coastguard Worker static const struct keyctl_kdf_params kckdfp_data[] = {
344*cf84ac9aSAndroid Build Coastguard Worker [0] = { NULL, NULL, 0, { 0 } },
345*cf84ac9aSAndroid Build Coastguard Worker [1] = { NULL /* Changed to unaccessible address in copy */,
346*cf84ac9aSAndroid Build Coastguard Worker NULL, 0xbadc0dedU, { [7] = 0xdeadfeedU } },
347*cf84ac9aSAndroid Build Coastguard Worker [2] = { NULL /* long_hash_data */,
348*cf84ac9aSAndroid Build Coastguard Worker NULL /* Changed to unaccessible address in copy */,
349*cf84ac9aSAndroid Build Coastguard Worker 0, { 0 } },
350*cf84ac9aSAndroid Build Coastguard Worker [3] = { NULL /* unterminated1 */,
351*cf84ac9aSAndroid Build Coastguard Worker NULL /* otherinfo_data */, 0, { 1 } },
352*cf84ac9aSAndroid Build Coastguard Worker [4] = { NULL /* short_hash_data */,
353*cf84ac9aSAndroid Build Coastguard Worker NULL /* otherinfo1_data */, sizeof(otherinfo1_data),
354*cf84ac9aSAndroid Build Coastguard Worker { 0, 0xfacebeef, 0, 0xba5e1ead } },
355*cf84ac9aSAndroid Build Coastguard Worker [5] = { NULL /* short_hash_data */,
356*cf84ac9aSAndroid Build Coastguard Worker NULL /* otherinfo2_data */, sizeof(otherinfo2_data),
357*cf84ac9aSAndroid Build Coastguard Worker { 0 } },
358*cf84ac9aSAndroid Build Coastguard Worker };
359*cf84ac9aSAndroid Build Coastguard Worker
360*cf84ac9aSAndroid Build Coastguard Worker char *bogus_str = tail_memdup(unterminated1, sizeof(unterminated1));
361*cf84ac9aSAndroid Build Coastguard Worker char *bogus_desc = tail_memdup(unterminated2, sizeof(unterminated2));
362*cf84ac9aSAndroid Build Coastguard Worker char *short_type = tail_memdup(short_type_str, sizeof(short_type_str));
363*cf84ac9aSAndroid Build Coastguard Worker char *short_desc = tail_memdup(short_desc_str, sizeof(short_desc_str));
364*cf84ac9aSAndroid Build Coastguard Worker char *long_type = tail_memdup(long_type_str, sizeof(long_type_str));
365*cf84ac9aSAndroid Build Coastguard Worker char *long_desc = tail_memdup(long_desc_str, sizeof(long_desc_str));
366*cf84ac9aSAndroid Build Coastguard Worker char *kcdhp = tail_memdup(&kcdhp_data, sizeof(kcdhp_data));
367*cf84ac9aSAndroid Build Coastguard Worker char *kckdfp_long_hash = tail_memdup(long_hash_data,
368*cf84ac9aSAndroid Build Coastguard Worker sizeof(long_hash_data));
369*cf84ac9aSAndroid Build Coastguard Worker char *kckdfp_short_hash = tail_memdup(short_hash_data,
370*cf84ac9aSAndroid Build Coastguard Worker sizeof(short_hash_data));
371*cf84ac9aSAndroid Build Coastguard Worker char *kckdfp_otherinfo1 = tail_memdup(otherinfo1_data,
372*cf84ac9aSAndroid Build Coastguard Worker sizeof(otherinfo1_data));
373*cf84ac9aSAndroid Build Coastguard Worker char *kckdfp_otherinfo2 = tail_memdup(otherinfo2_data,
374*cf84ac9aSAndroid Build Coastguard Worker sizeof(otherinfo2_data));
375*cf84ac9aSAndroid Build Coastguard Worker char *kckdfp_char = tail_alloc(sizeof(kckdfp_data[0]));
376*cf84ac9aSAndroid Build Coastguard Worker struct iovec *key_iov = tail_alloc(sizeof(*key_iov) * IOV_SIZE);
377*cf84ac9aSAndroid Build Coastguard Worker char *bogus_buf1 = tail_alloc(9);
378*cf84ac9aSAndroid Build Coastguard Worker char *bogus_buf2 = tail_alloc(256);
379*cf84ac9aSAndroid Build Coastguard Worker char *key_iov_str1;
380*cf84ac9aSAndroid Build Coastguard Worker char *key_iov_str2 = tail_alloc(4096);
381*cf84ac9aSAndroid Build Coastguard Worker ssize_t ret;
382*cf84ac9aSAndroid Build Coastguard Worker ssize_t kis_size = 0;
383*cf84ac9aSAndroid Build Coastguard Worker size_t i;
384*cf84ac9aSAndroid Build Coastguard Worker
385*cf84ac9aSAndroid Build Coastguard Worker key_iov[0].iov_base = short_type;
386*cf84ac9aSAndroid Build Coastguard Worker key_iov[0].iov_len = sizeof(short_type_str);
387*cf84ac9aSAndroid Build Coastguard Worker key_iov[1].iov_base = long_type;
388*cf84ac9aSAndroid Build Coastguard Worker key_iov[1].iov_len = sizeof(long_type_str);
389*cf84ac9aSAndroid Build Coastguard Worker key_iov[2].iov_base = short_desc;
390*cf84ac9aSAndroid Build Coastguard Worker key_iov[2].iov_len = sizeof(short_desc_str);
391*cf84ac9aSAndroid Build Coastguard Worker key_iov[3].iov_base = long_desc;
392*cf84ac9aSAndroid Build Coastguard Worker key_iov[3].iov_len = sizeof(long_desc_str);
393*cf84ac9aSAndroid Build Coastguard Worker key_iov[4].iov_base = bogus_str;
394*cf84ac9aSAndroid Build Coastguard Worker key_iov[4].iov_len = 32;
395*cf84ac9aSAndroid Build Coastguard Worker
396*cf84ac9aSAndroid Build Coastguard Worker for (i = 5; i < IOV_SIZE; i++) {
397*cf84ac9aSAndroid Build Coastguard Worker key_iov[i].iov_base =
398*cf84ac9aSAndroid Build Coastguard Worker (void *) (uintptr_t) (0xfffffacefffff00dULL +
399*cf84ac9aSAndroid Build Coastguard Worker 0x100000001ULL * i);
400*cf84ac9aSAndroid Build Coastguard Worker key_iov[i].iov_len = (size_t) (0xcaffeeeddefaced7ULL +
401*cf84ac9aSAndroid Build Coastguard Worker 0x100000001ULL * i);
402*cf84ac9aSAndroid Build Coastguard Worker }
403*cf84ac9aSAndroid Build Coastguard Worker
404*cf84ac9aSAndroid Build Coastguard Worker ret = asprintf(&key_iov_str1, "[{iov_base=%p, iov_len=%zu}, "
405*cf84ac9aSAndroid Build Coastguard Worker "{iov_base=%p, iov_len=%zu}, "
406*cf84ac9aSAndroid Build Coastguard Worker "{iov_base=%p, iov_len=%zu}, "
407*cf84ac9aSAndroid Build Coastguard Worker "{iov_base=%p, iov_len=%zu}]",
408*cf84ac9aSAndroid Build Coastguard Worker key_iov[IOV_SIZE - 4].iov_base,
409*cf84ac9aSAndroid Build Coastguard Worker key_iov[IOV_SIZE - 4].iov_len,
410*cf84ac9aSAndroid Build Coastguard Worker key_iov[IOV_SIZE - 3].iov_base,
411*cf84ac9aSAndroid Build Coastguard Worker key_iov[IOV_SIZE - 3].iov_len,
412*cf84ac9aSAndroid Build Coastguard Worker key_iov[IOV_SIZE - 2].iov_base,
413*cf84ac9aSAndroid Build Coastguard Worker key_iov[IOV_SIZE - 2].iov_len,
414*cf84ac9aSAndroid Build Coastguard Worker key_iov[IOV_SIZE - 1].iov_base,
415*cf84ac9aSAndroid Build Coastguard Worker key_iov[IOV_SIZE - 1].iov_len);
416*cf84ac9aSAndroid Build Coastguard Worker
417*cf84ac9aSAndroid Build Coastguard Worker if (ret < 0)
418*cf84ac9aSAndroid Build Coastguard Worker error_msg_and_fail("asprintf");
419*cf84ac9aSAndroid Build Coastguard Worker
420*cf84ac9aSAndroid Build Coastguard Worker ret = snprintf(key_iov_str2, IOV_STR_SIZE,
421*cf84ac9aSAndroid Build Coastguard Worker "[{iov_base=\"%s\\0\", iov_len=%zu}, "
422*cf84ac9aSAndroid Build Coastguard Worker "{iov_base=\"%.10s\"..., iov_len=%zu}, "
423*cf84ac9aSAndroid Build Coastguard Worker "{iov_base=\"%s\\0\", iov_len=%zu}, "
424*cf84ac9aSAndroid Build Coastguard Worker "{iov_base=\"%.10s\"..., iov_len=%zu}, ",
425*cf84ac9aSAndroid Build Coastguard Worker (char *) key_iov[0].iov_base, key_iov[0].iov_len,
426*cf84ac9aSAndroid Build Coastguard Worker (char *) key_iov[1].iov_base, key_iov[1].iov_len,
427*cf84ac9aSAndroid Build Coastguard Worker (char *) key_iov[2].iov_base, key_iov[2].iov_len,
428*cf84ac9aSAndroid Build Coastguard Worker (char *) key_iov[3].iov_base, key_iov[3].iov_len);
429*cf84ac9aSAndroid Build Coastguard Worker
430*cf84ac9aSAndroid Build Coastguard Worker if ((ret < 0) || (ret >= IOV_STR_SIZE))
431*cf84ac9aSAndroid Build Coastguard Worker error_msg_and_fail("snprintf");
432*cf84ac9aSAndroid Build Coastguard Worker
433*cf84ac9aSAndroid Build Coastguard Worker for (i = 4; i < PR_LIMIT; i++) {
434*cf84ac9aSAndroid Build Coastguard Worker kis_size += ret;
435*cf84ac9aSAndroid Build Coastguard Worker
436*cf84ac9aSAndroid Build Coastguard Worker ret = snprintf(key_iov_str2 + kis_size, IOV_STR_SIZE - kis_size,
437*cf84ac9aSAndroid Build Coastguard Worker "{iov_base=%p, iov_len=%zu}, ",
438*cf84ac9aSAndroid Build Coastguard Worker key_iov[i].iov_base, key_iov[i].iov_len);
439*cf84ac9aSAndroid Build Coastguard Worker
440*cf84ac9aSAndroid Build Coastguard Worker if ((ret < 0) || (ret >= (IOV_STR_SIZE - kis_size)))
441*cf84ac9aSAndroid Build Coastguard Worker error_msg_and_fail("snprintf");
442*cf84ac9aSAndroid Build Coastguard Worker }
443*cf84ac9aSAndroid Build Coastguard Worker
444*cf84ac9aSAndroid Build Coastguard Worker kis_size += ret;
445*cf84ac9aSAndroid Build Coastguard Worker snprintf(key_iov_str2 + kis_size, IOV_STR_SIZE - kis_size, "...]");
446*cf84ac9aSAndroid Build Coastguard Worker
447*cf84ac9aSAndroid Build Coastguard Worker
448*cf84ac9aSAndroid Build Coastguard Worker /* Invalid command */
449*cf84ac9aSAndroid Build Coastguard Worker do_keyctl((kernel_ulong_t) 0xbadc0dedfacefeedULL,
450*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_VERBOSE
451*cf84ac9aSAndroid Build Coastguard Worker "KEYCTL_???"
452*cf84ac9aSAndroid Build Coastguard Worker #else
453*cf84ac9aSAndroid Build Coastguard Worker "0xfacefeed"
454*cf84ac9aSAndroid Build Coastguard Worker # if !XLAT_RAW
455*cf84ac9aSAndroid Build Coastguard Worker " /* KEYCTL_??? */"
456*cf84ac9aSAndroid Build Coastguard Worker # endif
457*cf84ac9aSAndroid Build Coastguard Worker #endif
458*cf84ac9aSAndroid Build Coastguard Worker ,
459*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
460*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee1badc0de5ULL, NULL,
461*cf84ac9aSAndroid Build Coastguard Worker kulong_fmt,
462*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
463*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee2badc0de6ULL, NULL,
464*cf84ac9aSAndroid Build Coastguard Worker kulong_fmt,
465*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
466*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee3badc0de7ULL, NULL,
467*cf84ac9aSAndroid Build Coastguard Worker kulong_fmt,
468*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
469*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL,
470*cf84ac9aSAndroid Build Coastguard Worker kulong_fmt);
471*cf84ac9aSAndroid Build Coastguard Worker
472*cf84ac9aSAndroid Build Coastguard Worker
473*cf84ac9aSAndroid Build Coastguard Worker /* GET_KEYRING_ID */
474*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_KEYRING_ID),
475*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
476*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
477*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xbadc0dedffffffffLLU, "-1", NULL,
478*cf84ac9aSAndroid Build Coastguard Worker 0UL);
479*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_KEYRING_ID),
480*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), "%d",
481*cf84ac9aSAndroid Build Coastguard Worker sizeof(int), 3141592653U, NULL, "%d", NULL,
482*cf84ac9aSAndroid Build Coastguard Worker 0UL);
483*cf84ac9aSAndroid Build Coastguard Worker
484*cf84ac9aSAndroid Build Coastguard Worker
485*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_JOIN_SESSION_KEYRING */
486*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
487*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), NULL,
488*cf84ac9aSAndroid Build Coastguard Worker 0UL);
489*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
490*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
491*cf84ac9aSAndroid Build Coastguard Worker 0UL);
492*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
493*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), bogus_str, NULL, ptr_fmt,
494*cf84ac9aSAndroid Build Coastguard Worker 0UL);
495*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
496*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR("bogus name"), NULL,
497*cf84ac9aSAndroid Build Coastguard Worker 0UL);
498*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_JOIN_SESSION_KEYRING),
499*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), "very long keyring name", "\"very long \"...",
500*cf84ac9aSAndroid Build Coastguard Worker NULL,
501*cf84ac9aSAndroid Build Coastguard Worker 0UL);
502*cf84ac9aSAndroid Build Coastguard Worker
503*cf84ac9aSAndroid Build Coastguard Worker
504*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_UPDATE */
505*cf84ac9aSAndroid Build Coastguard Worker
506*cf84ac9aSAndroid Build Coastguard Worker buf_in_arg = true;
507*cf84ac9aSAndroid Build Coastguard Worker
508*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_UPDATE),
509*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
510*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), NULL,
511*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 0, NULL, ksize_fmt,
512*cf84ac9aSAndroid Build Coastguard Worker 0UL);
513*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_UPDATE),
514*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
515*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
516*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
517*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
518*cf84ac9aSAndroid Build Coastguard Worker 0UL);
519*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_UPDATE),
520*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
521*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), bogus_str, NULL, ptr_fmt,
522*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
523*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfee4badc0de8ULL, NULL, ksize_fmt,
524*cf84ac9aSAndroid Build Coastguard Worker 0UL);
525*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_UPDATE),
526*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
527*cf84ac9aSAndroid Build Coastguard Worker sizeof(short_desc_str), short_desc, NULL, NULL,
528*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
529*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) sizeof(short_desc_str) - 1, NULL,
530*cf84ac9aSAndroid Build Coastguard Worker ksize_fmt,
531*cf84ac9aSAndroid Build Coastguard Worker 0UL);
532*cf84ac9aSAndroid Build Coastguard Worker
533*cf84ac9aSAndroid Build Coastguard Worker buf_in_arg = false;
534*cf84ac9aSAndroid Build Coastguard Worker
535*cf84ac9aSAndroid Build Coastguard Worker
536*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_REVOKE */
537*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_REVOKE),
538*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
539*cf84ac9aSAndroid Build Coastguard Worker 0UL);
540*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_REVOKE),
541*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
542*cf84ac9aSAndroid Build Coastguard Worker 0UL);
543*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_REVOKE),
544*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
545*cf84ac9aSAndroid Build Coastguard Worker 0UL);
546*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_REVOKE),
547*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
548*cf84ac9aSAndroid Build Coastguard Worker 0UL);
549*cf84ac9aSAndroid Build Coastguard Worker
550*cf84ac9aSAndroid Build Coastguard Worker
551*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_CHOWN */
552*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_CHOWN),
553*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
554*cf84ac9aSAndroid Build Coastguard Worker sizeof(uid_t), ARG_STR(-1), NULL,
555*cf84ac9aSAndroid Build Coastguard Worker sizeof(gid_t), ARG_STR(-1), NULL,
556*cf84ac9aSAndroid Build Coastguard Worker 0UL);
557*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_CHOWN),
558*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
559*cf84ac9aSAndroid Build Coastguard Worker sizeof(uid_t), 2718281828U, NULL, "%u",
560*cf84ac9aSAndroid Build Coastguard Worker sizeof(gid_t), 3141592653U, NULL, "%u",
561*cf84ac9aSAndroid Build Coastguard Worker 0UL);
562*cf84ac9aSAndroid Build Coastguard Worker
563*cf84ac9aSAndroid Build Coastguard Worker
564*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_SETPERM */
565*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SETPERM),
566*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQKEY_AUTH_KEY), NULL,
567*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 0xffffffffU,
568*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_RAW || XLAT_VERBOSE
569*cf84ac9aSAndroid Build Coastguard Worker "0xffffffff"
570*cf84ac9aSAndroid Build Coastguard Worker #endif
571*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_VERBOSE
572*cf84ac9aSAndroid Build Coastguard Worker " /* "
573*cf84ac9aSAndroid Build Coastguard Worker #endif
574*cf84ac9aSAndroid Build Coastguard Worker #if !XLAT_RAW
575*cf84ac9aSAndroid Build Coastguard Worker "KEY_POS_VIEW|KEY_POS_READ|KEY_POS_WRITE|"
576*cf84ac9aSAndroid Build Coastguard Worker "KEY_POS_SEARCH|KEY_POS_LINK|KEY_POS_SETATTR|"
577*cf84ac9aSAndroid Build Coastguard Worker "KEY_USR_VIEW|KEY_USR_READ|KEY_USR_WRITE|"
578*cf84ac9aSAndroid Build Coastguard Worker "KEY_USR_SEARCH|KEY_USR_LINK|KEY_USR_SETATTR|"
579*cf84ac9aSAndroid Build Coastguard Worker "KEY_GRP_VIEW|KEY_GRP_READ|KEY_GRP_WRITE|"
580*cf84ac9aSAndroid Build Coastguard Worker "KEY_GRP_SEARCH|KEY_GRP_LINK|KEY_GRP_SETATTR|"
581*cf84ac9aSAndroid Build Coastguard Worker "KEY_OTH_VIEW|KEY_OTH_READ|KEY_OTH_WRITE|"
582*cf84ac9aSAndroid Build Coastguard Worker "KEY_OTH_SEARCH|KEY_OTH_LINK|KEY_OTH_SETATTR|"
583*cf84ac9aSAndroid Build Coastguard Worker "0xc0c0c0c0"
584*cf84ac9aSAndroid Build Coastguard Worker #endif
585*cf84ac9aSAndroid Build Coastguard Worker #if XLAT_VERBOSE
586*cf84ac9aSAndroid Build Coastguard Worker " */"
587*cf84ac9aSAndroid Build Coastguard Worker #endif
588*cf84ac9aSAndroid Build Coastguard Worker , NULL,
589*cf84ac9aSAndroid Build Coastguard Worker 0UL);
590*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SETPERM),
591*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
592*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 0, NULL, "%#x",
593*cf84ac9aSAndroid Build Coastguard Worker 0UL);
594*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SETPERM),
595*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
596*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 0xc0c0c0c0,
597*cf84ac9aSAndroid Build Coastguard Worker "0xc0c0c0c0"
598*cf84ac9aSAndroid Build Coastguard Worker #if !XLAT_RAW
599*cf84ac9aSAndroid Build Coastguard Worker " /* KEY_??? */"
600*cf84ac9aSAndroid Build Coastguard Worker #endif
601*cf84ac9aSAndroid Build Coastguard Worker ,
602*cf84ac9aSAndroid Build Coastguard Worker NULL,
603*cf84ac9aSAndroid Build Coastguard Worker 0UL);
604*cf84ac9aSAndroid Build Coastguard Worker
605*cf84ac9aSAndroid Build Coastguard Worker
606*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_DESCRIBE */
607*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
608*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
609*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
610*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
611*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
612*cf84ac9aSAndroid Build Coastguard Worker 0UL);
613*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
614*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
615*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
616*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
617*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
618*cf84ac9aSAndroid Build Coastguard Worker 0UL);
619*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
620*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
621*cf84ac9aSAndroid Build Coastguard Worker (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
622*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
623*cf84ac9aSAndroid Build Coastguard Worker 0UL);
624*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
625*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
626*cf84ac9aSAndroid Build Coastguard Worker (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
627*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
628*cf84ac9aSAndroid Build Coastguard Worker 0UL);
629*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DESCRIBE),
630*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
631*cf84ac9aSAndroid Build Coastguard Worker (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
632*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
633*cf84ac9aSAndroid Build Coastguard Worker 0UL);
634*cf84ac9aSAndroid Build Coastguard Worker
635*cf84ac9aSAndroid Build Coastguard Worker
636*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_CLEAR */
637*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_CLEAR),
638*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
639*cf84ac9aSAndroid Build Coastguard Worker 0UL);
640*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_CLEAR),
641*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
642*cf84ac9aSAndroid Build Coastguard Worker 0UL);
643*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_CLEAR),
644*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
645*cf84ac9aSAndroid Build Coastguard Worker 0UL);
646*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_CLEAR),
647*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
648*cf84ac9aSAndroid Build Coastguard Worker 0UL);
649*cf84ac9aSAndroid Build Coastguard Worker
650*cf84ac9aSAndroid Build Coastguard Worker
651*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_LINK */
652*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_LINK),
653*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
654*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
655*cf84ac9aSAndroid Build Coastguard Worker 0UL);
656*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_LINK),
657*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
658*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
659*cf84ac9aSAndroid Build Coastguard Worker 0UL);
660*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_LINK),
661*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
662*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
663*cf84ac9aSAndroid Build Coastguard Worker 0UL);
664*cf84ac9aSAndroid Build Coastguard Worker
665*cf84ac9aSAndroid Build Coastguard Worker
666*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_UNLINK */
667*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_UNLINK),
668*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
669*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
670*cf84ac9aSAndroid Build Coastguard Worker 0UL);
671*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_UNLINK),
672*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
673*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
674*cf84ac9aSAndroid Build Coastguard Worker 0UL);
675*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_UNLINK),
676*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
677*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
678*cf84ac9aSAndroid Build Coastguard Worker 0UL);
679*cf84ac9aSAndroid Build Coastguard Worker
680*cf84ac9aSAndroid Build Coastguard Worker
681*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_SEARCH */
682*cf84ac9aSAndroid Build Coastguard Worker buf_in_arg = true;
683*cf84ac9aSAndroid Build Coastguard Worker
684*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SEARCH),
685*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
686*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), NULL,
687*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), NULL,
688*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d");
689*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SEARCH),
690*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
691*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
692*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
693*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_USER_SESSION_KEYRING),
694*cf84ac9aSAndroid Build Coastguard Worker NULL);
695*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SEARCH),
696*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
697*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), bogus_str, NULL, ptr_fmt,
698*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), bogus_desc, NULL, ptr_fmt,
699*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d");
700*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SEARCH),
701*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
702*cf84ac9aSAndroid Build Coastguard Worker sizeof(short_type_str), short_type, NULL, NULL,
703*cf84ac9aSAndroid Build Coastguard Worker sizeof(short_desc_str), short_desc, NULL, NULL,
704*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d");
705*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SEARCH),
706*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d",
707*cf84ac9aSAndroid Build Coastguard Worker sizeof(long_type_str), long_type, NULL, NULL,
708*cf84ac9aSAndroid Build Coastguard Worker sizeof(long_type_str), long_desc, NULL, NULL,
709*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
710*cf84ac9aSAndroid Build Coastguard Worker
711*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_RESTRICT_KEYRING */
712*cf84ac9aSAndroid Build Coastguard Worker
713*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
714*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_REQUESTOR_KEYRING), NULL,
715*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), NULL,
716*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), NULL,
717*cf84ac9aSAndroid Build Coastguard Worker NULL);
718*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
719*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
720*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
721*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffff00dfffff157ULL, NULL, ptr_fmt,
722*cf84ac9aSAndroid Build Coastguard Worker NULL);
723*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
724*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
725*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), bogus_str, NULL, ptr_fmt,
726*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), bogus_desc, NULL, ptr_fmt,
727*cf84ac9aSAndroid Build Coastguard Worker NULL);
728*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
729*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
730*cf84ac9aSAndroid Build Coastguard Worker sizeof(short_type_str), short_type, NULL, NULL,
731*cf84ac9aSAndroid Build Coastguard Worker sizeof(short_desc_str), short_desc, NULL, NULL,
732*cf84ac9aSAndroid Build Coastguard Worker NULL);
733*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_RESTRICT_KEYRING),
734*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d",
735*cf84ac9aSAndroid Build Coastguard Worker sizeof(long_type_str), long_type, NULL, NULL,
736*cf84ac9aSAndroid Build Coastguard Worker sizeof(long_type_str), long_desc, NULL, NULL,
737*cf84ac9aSAndroid Build Coastguard Worker NULL);
738*cf84ac9aSAndroid Build Coastguard Worker
739*cf84ac9aSAndroid Build Coastguard Worker buf_in_arg = false;
740*cf84ac9aSAndroid Build Coastguard Worker
741*cf84ac9aSAndroid Build Coastguard Worker
742*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_READ */
743*cf84ac9aSAndroid Build Coastguard Worker nul_terminated_buf = false;
744*cf84ac9aSAndroid Build Coastguard Worker
745*cf84ac9aSAndroid Build Coastguard Worker /* Empty result is expected for these */
746*cf84ac9aSAndroid Build Coastguard Worker bogus_buf1[0] = '\377';
747*cf84ac9aSAndroid Build Coastguard Worker bogus_buf2[0] = '\377';
748*cf84ac9aSAndroid Build Coastguard Worker
749*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_READ),
750*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
751*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
752*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
753*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
754*cf84ac9aSAndroid Build Coastguard Worker 0UL);
755*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_READ),
756*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
757*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
758*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
759*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
760*cf84ac9aSAndroid Build Coastguard Worker 0UL);
761*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_READ),
762*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
763*cf84ac9aSAndroid Build Coastguard Worker (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
764*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
765*cf84ac9aSAndroid Build Coastguard Worker 0UL);
766*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_READ),
767*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
768*cf84ac9aSAndroid Build Coastguard Worker (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
769*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
770*cf84ac9aSAndroid Build Coastguard Worker 0UL);
771*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_READ),
772*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
773*cf84ac9aSAndroid Build Coastguard Worker (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
774*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
775*cf84ac9aSAndroid Build Coastguard Worker 0UL);
776*cf84ac9aSAndroid Build Coastguard Worker
777*cf84ac9aSAndroid Build Coastguard Worker nul_terminated_buf = true;
778*cf84ac9aSAndroid Build Coastguard Worker
779*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_INSTANTIATE */
780*cf84ac9aSAndroid Build Coastguard Worker buf_in_arg = true;
781*cf84ac9aSAndroid Build Coastguard Worker
782*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
783*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d",
784*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
785*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
786*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
787*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d");
788*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
789*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
790*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
791*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
792*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadfeedLLU, NULL, ksize_fmt,
793*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d");
794*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
795*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
796*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), bogus_str, NULL, ptr_fmt,
797*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
798*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 32LLU, NULL, ksize_fmt,
799*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d");
800*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
801*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
802*cf84ac9aSAndroid Build Coastguard Worker sizeof(short_type_str), short_desc, NULL, NULL,
803*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
804*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) sizeof(short_type_str) - 1, NULL,
805*cf84ac9aSAndroid Build Coastguard Worker ksize_fmt,
806*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
807*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE),
808*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
809*cf84ac9aSAndroid Build Coastguard Worker sizeof(long_type_str), long_desc, NULL, NULL,
810*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
811*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) sizeof(long_type_str), NULL, ksize_fmt,
812*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
813*cf84ac9aSAndroid Build Coastguard Worker
814*cf84ac9aSAndroid Build Coastguard Worker buf_in_arg = false;
815*cf84ac9aSAndroid Build Coastguard Worker
816*cf84ac9aSAndroid Build Coastguard Worker
817*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_NEGATE */
818*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_NEGATE),
819*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d",
820*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 0, NULL, "%u",
821*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d",
822*cf84ac9aSAndroid Build Coastguard Worker 0UL);
823*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_NEGATE),
824*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
825*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 3141592653U, NULL, "%u",
826*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
827*cf84ac9aSAndroid Build Coastguard Worker 0UL);
828*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_NEGATE),
829*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
830*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
831*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
832*cf84ac9aSAndroid Build Coastguard Worker NULL,
833*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
834*cf84ac9aSAndroid Build Coastguard Worker 0UL);
835*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_NEGATE),
836*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
837*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
838*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661", NULL,
839*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
840*cf84ac9aSAndroid Build Coastguard Worker 0UL);
841*cf84ac9aSAndroid Build Coastguard Worker
842*cf84ac9aSAndroid Build Coastguard Worker
843*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_SET_REQKEY_KEYRING */
844*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
845*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_REQKEY_DEFL_NO_CHANGE), NULL,
846*cf84ac9aSAndroid Build Coastguard Worker 0UL);
847*cf84ac9aSAndroid Build Coastguard Worker /*
848*cf84ac9aSAndroid Build Coastguard Worker * Keep it commented out until proper way of faking syscalls is not
849*cf84ac9aSAndroid Build Coastguard Worker * implemented.
850*cf84ac9aSAndroid Build Coastguard Worker */
851*cf84ac9aSAndroid Build Coastguard Worker /* do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
852*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t),
853*cf84ac9aSAndroid Build Coastguard Worker XARG_STR(KEY_REQKEY_DEFL_REQUESTOR_KEYRING), NULL, 0UL); */
854*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SET_REQKEY_KEYRING),
855*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
856*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU,
857*cf84ac9aSAndroid Build Coastguard Worker "-1159983635"
858*cf84ac9aSAndroid Build Coastguard Worker #if !XLAT_RAW
859*cf84ac9aSAndroid Build Coastguard Worker " /* KEY_REQKEY_DEFL_??? */"
860*cf84ac9aSAndroid Build Coastguard Worker #endif
861*cf84ac9aSAndroid Build Coastguard Worker , NULL, 0UL);
862*cf84ac9aSAndroid Build Coastguard Worker
863*cf84ac9aSAndroid Build Coastguard Worker
864*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_SET_TIMEOUT */
865*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
866*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d",
867*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 0, NULL, "%u",
868*cf84ac9aSAndroid Build Coastguard Worker 0UL);
869*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
870*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
871*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 3141592653U, NULL, "%u",
872*cf84ac9aSAndroid Build Coastguard Worker 0UL);
873*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SET_TIMEOUT),
874*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
875*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
876*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
877*cf84ac9aSAndroid Build Coastguard Worker NULL,
878*cf84ac9aSAndroid Build Coastguard Worker 0UL);
879*cf84ac9aSAndroid Build Coastguard Worker
880*cf84ac9aSAndroid Build Coastguard Worker
881*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_ASSUME_AUTHORITY */
882*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
883*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
884*cf84ac9aSAndroid Build Coastguard Worker 0UL);
885*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
886*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
887*cf84ac9aSAndroid Build Coastguard Worker 0UL);
888*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
889*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
890*cf84ac9aSAndroid Build Coastguard Worker 0UL);
891*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_ASSUME_AUTHORITY),
892*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
893*cf84ac9aSAndroid Build Coastguard Worker 0UL);
894*cf84ac9aSAndroid Build Coastguard Worker
895*cf84ac9aSAndroid Build Coastguard Worker
896*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_GET_SECURITY */
897*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
898*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
899*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
900*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 0xbadc0dedU, NULL, "%u",
901*cf84ac9aSAndroid Build Coastguard Worker 0UL);
902*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
903*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
904*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
905*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
906*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
907*cf84ac9aSAndroid Build Coastguard Worker 0UL);
908*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
909*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
910*cf84ac9aSAndroid Build Coastguard Worker (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
911*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
912*cf84ac9aSAndroid Build Coastguard Worker 0UL);
913*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
914*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
915*cf84ac9aSAndroid Build Coastguard Worker (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
916*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
917*cf84ac9aSAndroid Build Coastguard Worker 0UL);
918*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_SECURITY),
919*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_THREAD_KEYRING), NULL,
920*cf84ac9aSAndroid Build Coastguard Worker (size_t) -4, (uintptr_t) bogus_buf2, NULL, NULL,
921*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) -4, NULL, ksize_fmt,
922*cf84ac9aSAndroid Build Coastguard Worker 0UL);
923*cf84ac9aSAndroid Build Coastguard Worker
924*cf84ac9aSAndroid Build Coastguard Worker
925*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_SESSION_TO_PARENT */
926*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_SESSION_TO_PARENT), 0UL);
927*cf84ac9aSAndroid Build Coastguard Worker
928*cf84ac9aSAndroid Build Coastguard Worker
929*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_REJECT */
930*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_REJECT),
931*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d",
932*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 0, NULL, "%u",
933*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 0, NULL, "%u",
934*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d");
935*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_REJECT),
936*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
937*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 3141592653U, NULL, "%u",
938*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), 2718281828U, NULL, "%u",
939*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d");
940*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_REJECT),
941*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
942*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
943*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xdeadca75facef157LLU, "4207866199",
944*cf84ac9aSAndroid Build Coastguard Worker NULL,
945*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
946*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
947*cf84ac9aSAndroid Build Coastguard Worker NULL,
948*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d");
949*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_REJECT),
950*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
951*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
952*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, "3134983661",
953*cf84ac9aSAndroid Build Coastguard Worker NULL,
954*cf84ac9aSAndroid Build Coastguard Worker sizeof(uint32_t), XARG_STR(ENODEV), NULL,
955*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
956*cf84ac9aSAndroid Build Coastguard Worker
957*cf84ac9aSAndroid Build Coastguard Worker
958*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_INSTANTIATE_IOV */
959*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
960*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d",
961*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
962*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
963*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
964*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), 0, NULL, "%d");
965*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
966*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
967*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffffacefffffeedULL, NULL, ptr_fmt,
968*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 0xdeadfeedLLU, NULL,
969*cf84ac9aSAndroid Build Coastguard Worker ksize_fmt,
970*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d");
971*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
972*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
973*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), key_iov + IOV_SIZE, NULL, ptr_fmt,
974*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 32LLU, NULL,
975*cf84ac9aSAndroid Build Coastguard Worker ksize_fmt,
976*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d");
977*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
978*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
979*cf84ac9aSAndroid Build Coastguard Worker sizeof(key_iov), key_iov + IOV_SIZE - 4, key_iov_str1, NULL,
980*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 4, NULL,
981*cf84ac9aSAndroid Build Coastguard Worker ksize_fmt,
982*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL);
983*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INSTANTIATE_IOV),
984*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
985*cf84ac9aSAndroid Build Coastguard Worker sizeof(key_iov), key_iov, key_iov_str2, NULL,
986*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) IOV_SIZE, NULL,
987*cf84ac9aSAndroid Build Coastguard Worker ksize_fmt,
988*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL);
989*cf84ac9aSAndroid Build Coastguard Worker
990*cf84ac9aSAndroid Build Coastguard Worker
991*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_INVALIDATE */
992*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
993*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
994*cf84ac9aSAndroid Build Coastguard Worker 0UL);
995*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
996*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
997*cf84ac9aSAndroid Build Coastguard Worker 0UL);
998*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
999*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key2, NULL, "%d",
1000*cf84ac9aSAndroid Build Coastguard Worker 0UL);
1001*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_INVALIDATE),
1002*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
1003*cf84ac9aSAndroid Build Coastguard Worker 0UL);
1004*cf84ac9aSAndroid Build Coastguard Worker
1005*cf84ac9aSAndroid Build Coastguard Worker
1006*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_GET_PERSISTENT */
1007*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
1008*cf84ac9aSAndroid Build Coastguard Worker sizeof(uid_t), ARG_STR(-1), NULL,
1009*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), XARG_STR(KEY_SPEC_GROUP_KEYRING), NULL,
1010*cf84ac9aSAndroid Build Coastguard Worker 0UL);
1011*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
1012*cf84ac9aSAndroid Build Coastguard Worker sizeof(uid_t), 2718281828U, NULL, "%u",
1013*cf84ac9aSAndroid Build Coastguard Worker sizeof(int32_t), bogus_key1, NULL, "%d",
1014*cf84ac9aSAndroid Build Coastguard Worker 0UL);
1015*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_GET_PERSISTENT),
1016*cf84ac9aSAndroid Build Coastguard Worker sizeof(uid_t), 2718281828U, NULL, "%u",
1017*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), bogus_key3, bogus_key3_str, NULL,
1018*cf84ac9aSAndroid Build Coastguard Worker 0UL);
1019*cf84ac9aSAndroid Build Coastguard Worker
1020*cf84ac9aSAndroid Build Coastguard Worker
1021*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_DH_COMPUTE */
1022*cf84ac9aSAndroid Build Coastguard Worker nul_terminated_buf = false;
1023*cf84ac9aSAndroid Build Coastguard Worker
1024*cf84ac9aSAndroid Build Coastguard Worker /* Empty result is expected for these */
1025*cf84ac9aSAndroid Build Coastguard Worker bogus_buf1[0] = '\377';
1026*cf84ac9aSAndroid Build Coastguard Worker bogus_buf2[0] = '\377';
1027*cf84ac9aSAndroid Build Coastguard Worker
1028*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
1029*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
1030*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt,
1031*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
1032*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
1033*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt);
1034*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
1035*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), kcdhp + 1, NULL, ptr_fmt,
1036*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), (char *) 0xfffff157ffffdeadULL, NULL, ptr_fmt,
1037*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t),
1038*cf84ac9aSAndroid Build Coastguard Worker (kernel_ulong_t) 0xfeedf157badc0dedLLU, NULL, ksize_fmt,
1039*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt);
1040*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
1041*cf84ac9aSAndroid Build Coastguard Worker sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
1042*cf84ac9aSAndroid Build Coastguard Worker (size_t) 9, (uintptr_t) bogus_buf1, NULL, NULL,
1043*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 9, NULL, ksize_fmt,
1044*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt);
1045*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
1046*cf84ac9aSAndroid Build Coastguard Worker sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
1047*cf84ac9aSAndroid Build Coastguard Worker (size_t) 256, (uintptr_t) bogus_buf2, NULL, NULL,
1048*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) 256, NULL, ksize_fmt,
1049*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), ARG_STR(NULL), ptr_fmt);
1050*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
1051*cf84ac9aSAndroid Build Coastguard Worker sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
1052*cf84ac9aSAndroid Build Coastguard Worker (size_t) -1, (uintptr_t) bogus_buf2, NULL, NULL,
1053*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) -1, NULL, ksize_fmt,
1054*cf84ac9aSAndroid Build Coastguard Worker sizeof(char *), kckdfp_char + 1, NULL, ptr_fmt);
1055*cf84ac9aSAndroid Build Coastguard Worker
1056*cf84ac9aSAndroid Build Coastguard Worker /* KEYCTL_DH_COMPUTE + KDF */
1057*cf84ac9aSAndroid Build Coastguard Worker
1058*cf84ac9aSAndroid Build Coastguard Worker for (i = 0; i < ARRAY_SIZE(kckdfp_data); i++) {
1059*cf84ac9aSAndroid Build Coastguard Worker struct keyctl_kdf_params *kckdfp =
1060*cf84ac9aSAndroid Build Coastguard Worker (struct keyctl_kdf_params *) kckdfp_char;
1061*cf84ac9aSAndroid Build Coastguard Worker bool deref_hash = true;
1062*cf84ac9aSAndroid Build Coastguard Worker bool deref_opts = true;
1063*cf84ac9aSAndroid Build Coastguard Worker bool print_spare = false;
1064*cf84ac9aSAndroid Build Coastguard Worker const char *hash_str = NULL;
1065*cf84ac9aSAndroid Build Coastguard Worker const char *oi_str = NULL;
1066*cf84ac9aSAndroid Build Coastguard Worker
1067*cf84ac9aSAndroid Build Coastguard Worker memcpy(kckdfp, kckdfp_data + i, sizeof(kckdfp_data[i]));
1068*cf84ac9aSAndroid Build Coastguard Worker
1069*cf84ac9aSAndroid Build Coastguard Worker switch (i) {
1070*cf84ac9aSAndroid Build Coastguard Worker case 1:
1071*cf84ac9aSAndroid Build Coastguard Worker deref_hash = false;
1072*cf84ac9aSAndroid Build Coastguard Worker print_spare = true;
1073*cf84ac9aSAndroid Build Coastguard Worker kckdfp->hashname =
1074*cf84ac9aSAndroid Build Coastguard Worker kckdfp_short_hash + sizeof(short_hash_data);
1075*cf84ac9aSAndroid Build Coastguard Worker break;
1076*cf84ac9aSAndroid Build Coastguard Worker case 2:
1077*cf84ac9aSAndroid Build Coastguard Worker deref_opts = false;
1078*cf84ac9aSAndroid Build Coastguard Worker kckdfp->hashname = kckdfp_long_hash;
1079*cf84ac9aSAndroid Build Coastguard Worker kckdfp->otherinfo =
1080*cf84ac9aSAndroid Build Coastguard Worker kckdfp_otherinfo1 + sizeof(otherinfo1_data);
1081*cf84ac9aSAndroid Build Coastguard Worker break;
1082*cf84ac9aSAndroid Build Coastguard Worker case 3:
1083*cf84ac9aSAndroid Build Coastguard Worker deref_opts = false;
1084*cf84ac9aSAndroid Build Coastguard Worker deref_hash = false;
1085*cf84ac9aSAndroid Build Coastguard Worker print_spare = true;
1086*cf84ac9aSAndroid Build Coastguard Worker kckdfp->hashname = bogus_str;
1087*cf84ac9aSAndroid Build Coastguard Worker kckdfp->otherinfo = kckdfp_otherinfo1;
1088*cf84ac9aSAndroid Build Coastguard Worker break;
1089*cf84ac9aSAndroid Build Coastguard Worker case 4:
1090*cf84ac9aSAndroid Build Coastguard Worker oi_str = "\"\\1\\2 OH HAI \"...";
1091*cf84ac9aSAndroid Build Coastguard Worker print_spare = true;
1092*cf84ac9aSAndroid Build Coastguard Worker kckdfp->hashname = kckdfp_short_hash;
1093*cf84ac9aSAndroid Build Coastguard Worker kckdfp->otherinfo = kckdfp_otherinfo1;
1094*cf84ac9aSAndroid Build Coastguard Worker break;
1095*cf84ac9aSAndroid Build Coastguard Worker case 5:
1096*cf84ac9aSAndroid Build Coastguard Worker oi_str = "\"\\1\\2\\n\\255\\0\\1\\0\"";
1097*cf84ac9aSAndroid Build Coastguard Worker kckdfp->hashname = kckdfp_short_hash;
1098*cf84ac9aSAndroid Build Coastguard Worker kckdfp->otherinfo = kckdfp_otherinfo2;
1099*cf84ac9aSAndroid Build Coastguard Worker break;
1100*cf84ac9aSAndroid Build Coastguard Worker }
1101*cf84ac9aSAndroid Build Coastguard Worker
1102*cf84ac9aSAndroid Build Coastguard Worker do_keyctl(ARG_STR(KEYCTL_DH_COMPUTE),
1103*cf84ac9aSAndroid Build Coastguard Worker sizeof(kcdhp), kcdhp, kcdhp_str, NULL,
1104*cf84ac9aSAndroid Build Coastguard Worker (size_t) -1, (uintptr_t) bogus_buf2, NULL, NULL,
1105*cf84ac9aSAndroid Build Coastguard Worker sizeof(kernel_ulong_t), (kernel_ulong_t) -1, NULL,
1106*cf84ac9aSAndroid Build Coastguard Worker ksize_fmt,
1107*cf84ac9aSAndroid Build Coastguard Worker sizeof(kckdfp), kckdfp_char,
1108*cf84ac9aSAndroid Build Coastguard Worker kckdfp_to_str(kckdfp, deref_hash, deref_opts,
1109*cf84ac9aSAndroid Build Coastguard Worker print_spare, hash_str, oi_str),
1110*cf84ac9aSAndroid Build Coastguard Worker NULL);
1111*cf84ac9aSAndroid Build Coastguard Worker }
1112*cf84ac9aSAndroid Build Coastguard Worker
1113*cf84ac9aSAndroid Build Coastguard Worker nul_terminated_buf = true;
1114*cf84ac9aSAndroid Build Coastguard Worker
1115*cf84ac9aSAndroid Build Coastguard Worker puts("+++ exited with 0 +++");
1116*cf84ac9aSAndroid Build Coastguard Worker
1117*cf84ac9aSAndroid Build Coastguard Worker return 0;
1118*cf84ac9aSAndroid Build Coastguard Worker }
1119*cf84ac9aSAndroid Build Coastguard Worker
1120*cf84ac9aSAndroid Build Coastguard Worker #else
1121*cf84ac9aSAndroid Build Coastguard Worker
1122*cf84ac9aSAndroid Build Coastguard Worker SKIP_MAIN_UNDEFINED("__NR_keyctl");
1123*cf84ac9aSAndroid Build Coastguard Worker
1124*cf84ac9aSAndroid Build Coastguard Worker #endif
1125