xref: /aosp_15_r20/external/virglrenderer/tests/test_fuzzer_formats.c (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1*bbecb9d1SAndroid Build Coastguard Worker /**************************************************************************
2*bbecb9d1SAndroid Build Coastguard Worker  *
3*bbecb9d1SAndroid Build Coastguard Worker  * Copyright (C) 2019 Collabora Ltd
4*bbecb9d1SAndroid Build Coastguard Worker  *
5*bbecb9d1SAndroid Build Coastguard Worker  * Permission is hereby granted, free of charge, to any person obtaining a
6*bbecb9d1SAndroid Build Coastguard Worker  * copy of this software and associated documentation files (the "Software"),
7*bbecb9d1SAndroid Build Coastguard Worker  * to deal in the Software without restriction, including without limitation
8*bbecb9d1SAndroid Build Coastguard Worker  * the rights to use, copy, modify, merge, publish, distribute, sublicense,
9*bbecb9d1SAndroid Build Coastguard Worker  * and/or sell copies of the Software, and to permit persons to whom the
10*bbecb9d1SAndroid Build Coastguard Worker  * Software is furnished to do so, subject to the following conditions:
11*bbecb9d1SAndroid Build Coastguard Worker  *
12*bbecb9d1SAndroid Build Coastguard Worker  * The above copyright notice and this permission notice shall be included
13*bbecb9d1SAndroid Build Coastguard Worker  * in all copies or substantial portions of the Software.
14*bbecb9d1SAndroid Build Coastguard Worker  *
15*bbecb9d1SAndroid Build Coastguard Worker  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
16*bbecb9d1SAndroid Build Coastguard Worker  * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17*bbecb9d1SAndroid Build Coastguard Worker  * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
18*bbecb9d1SAndroid Build Coastguard Worker  * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
19*bbecb9d1SAndroid Build Coastguard Worker  * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
20*bbecb9d1SAndroid Build Coastguard Worker  * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
21*bbecb9d1SAndroid Build Coastguard Worker  * OTHER DEALINGS IN THE SOFTWARE.
22*bbecb9d1SAndroid Build Coastguard Worker  *
23*bbecb9d1SAndroid Build Coastguard Worker  **************************************************************************/
24*bbecb9d1SAndroid Build Coastguard Worker 
25*bbecb9d1SAndroid Build Coastguard Worker /*
26*bbecb9d1SAndroid Build Coastguard Worker   This file contains tests that triggered bugs revealed by fuzzying
27*bbecb9d1SAndroid Build Coastguard Worker   Thanks Matthew Shao for reporting these.
28*bbecb9d1SAndroid Build Coastguard Worker */
29*bbecb9d1SAndroid Build Coastguard Worker 
30*bbecb9d1SAndroid Build Coastguard Worker #include <stdint.h>
31*bbecb9d1SAndroid Build Coastguard Worker #include <stddef.h>
32*bbecb9d1SAndroid Build Coastguard Worker #include <sys/uio.h>
33*bbecb9d1SAndroid Build Coastguard Worker #include <assert.h>
34*bbecb9d1SAndroid Build Coastguard Worker #include <unistd.h>
35*bbecb9d1SAndroid Build Coastguard Worker #include <stdlib.h>
36*bbecb9d1SAndroid Build Coastguard Worker #include <string.h>
37*bbecb9d1SAndroid Build Coastguard Worker 
38*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_hw.h"
39*bbecb9d1SAndroid Build Coastguard Worker #include "vrend_winsys_egl.h"
40*bbecb9d1SAndroid Build Coastguard Worker #include "virglrenderer.h"
41*bbecb9d1SAndroid Build Coastguard Worker #include "virgl_protocol.h"
42*bbecb9d1SAndroid Build Coastguard Worker #include <epoxy/egl.h>
43*bbecb9d1SAndroid Build Coastguard Worker 
44*bbecb9d1SAndroid Build Coastguard Worker 
45*bbecb9d1SAndroid Build Coastguard Worker struct fuzzer_cookie
46*bbecb9d1SAndroid Build Coastguard Worker {
47*bbecb9d1SAndroid Build Coastguard Worker    int dummy;
48*bbecb9d1SAndroid Build Coastguard Worker };
49*bbecb9d1SAndroid Build Coastguard Worker 
50*bbecb9d1SAndroid Build Coastguard Worker static struct fuzzer_cookie cookie;
51*bbecb9d1SAndroid Build Coastguard Worker static const uint32_t ctx_id = 1;
52*bbecb9d1SAndroid Build Coastguard Worker static struct virgl_egl *test_egl;
53*bbecb9d1SAndroid Build Coastguard Worker 
fuzzer_write_fence(UNUSED void * opaque,UNUSED uint32_t fence)54*bbecb9d1SAndroid Build Coastguard Worker static void fuzzer_write_fence(UNUSED void *opaque, UNUSED uint32_t fence) {}
55*bbecb9d1SAndroid Build Coastguard Worker 
56*bbecb9d1SAndroid Build Coastguard Worker static virgl_renderer_gl_context
fuzzer_create_gl_context(UNUSED void * cookie,UNUSED int scanout_idx,struct virgl_renderer_gl_ctx_param * param)57*bbecb9d1SAndroid Build Coastguard Worker fuzzer_create_gl_context(UNUSED void *cookie, UNUSED int scanout_idx,
58*bbecb9d1SAndroid Build Coastguard Worker                          struct virgl_renderer_gl_ctx_param *param)
59*bbecb9d1SAndroid Build Coastguard Worker {
60*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_gl_ctx_param vparams;
61*bbecb9d1SAndroid Build Coastguard Worker    vparams.shared = false;
62*bbecb9d1SAndroid Build Coastguard Worker    vparams.major_ver = param->major_ver;
63*bbecb9d1SAndroid Build Coastguard Worker    vparams.minor_ver = param->minor_ver;
64*bbecb9d1SAndroid Build Coastguard Worker    return virgl_egl_create_context(test_egl, &vparams);
65*bbecb9d1SAndroid Build Coastguard Worker }
66*bbecb9d1SAndroid Build Coastguard Worker 
fuzzer_destory_gl_context(UNUSED void * cookie,virgl_renderer_gl_context ctx)67*bbecb9d1SAndroid Build Coastguard Worker static void fuzzer_destory_gl_context(UNUSED void *cookie, virgl_renderer_gl_context ctx)
68*bbecb9d1SAndroid Build Coastguard Worker {
69*bbecb9d1SAndroid Build Coastguard Worker    virgl_egl_destroy_context(test_egl, ctx);
70*bbecb9d1SAndroid Build Coastguard Worker }
71*bbecb9d1SAndroid Build Coastguard Worker 
fuzzer_make_current(UNUSED void * cookie,UNUSED int scanout_idx,virgl_renderer_gl_context ctx)72*bbecb9d1SAndroid Build Coastguard Worker static int fuzzer_make_current(UNUSED void *cookie, UNUSED int scanout_idx,
73*bbecb9d1SAndroid Build Coastguard Worker                                virgl_renderer_gl_context ctx)
74*bbecb9d1SAndroid Build Coastguard Worker {
75*bbecb9d1SAndroid Build Coastguard Worker    return virgl_egl_make_context_current(test_egl, ctx);
76*bbecb9d1SAndroid Build Coastguard Worker }
77*bbecb9d1SAndroid Build Coastguard Worker 
78*bbecb9d1SAndroid Build Coastguard Worker 
79*bbecb9d1SAndroid Build Coastguard Worker static struct virgl_renderer_callbacks fuzzer_cbs = {
80*bbecb9d1SAndroid Build Coastguard Worker    .version = 1,
81*bbecb9d1SAndroid Build Coastguard Worker    .write_fence = fuzzer_write_fence,
82*bbecb9d1SAndroid Build Coastguard Worker    .create_gl_context = fuzzer_create_gl_context,
83*bbecb9d1SAndroid Build Coastguard Worker    .destroy_gl_context = fuzzer_destory_gl_context,
84*bbecb9d1SAndroid Build Coastguard Worker    .make_current = fuzzer_make_current,
85*bbecb9d1SAndroid Build Coastguard Worker };
86*bbecb9d1SAndroid Build Coastguard Worker 
initialize_environment()87*bbecb9d1SAndroid Build Coastguard Worker static void initialize_environment()
88*bbecb9d1SAndroid Build Coastguard Worker {
89*bbecb9d1SAndroid Build Coastguard Worker    setenv("LIBGL_ALWAYS_SOFTWARE", "true", 0);
90*bbecb9d1SAndroid Build Coastguard Worker    setenv("GALLIUM_DRIVER", "softpipe", 0);
91*bbecb9d1SAndroid Build Coastguard Worker    test_egl = virgl_egl_init(NULL, true, true);
92*bbecb9d1SAndroid Build Coastguard Worker    assert(test_egl);
93*bbecb9d1SAndroid Build Coastguard Worker 
94*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_init(&cookie, VIRGL_RENDERER_USE_GLES|
95*bbecb9d1SAndroid Build Coastguard Worker                        VIRGL_RENDERER_USE_SURFACELESS, &fuzzer_cbs);
96*bbecb9d1SAndroid Build Coastguard Worker 
97*bbecb9d1SAndroid Build Coastguard Worker    const char *name = "fuzzctx";
98*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_context_create(ctx_id, (unsigned)strlen(name), name);
99*bbecb9d1SAndroid Build Coastguard Worker }
100*bbecb9d1SAndroid Build Coastguard Worker 
test_format_wrong_size()101*bbecb9d1SAndroid Build Coastguard Worker static void test_format_wrong_size()
102*bbecb9d1SAndroid Build Coastguard Worker {
103*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
104*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 10;
105*bbecb9d1SAndroid Build Coastguard Worker    args.target = 3;
106*bbecb9d1SAndroid Build Coastguard Worker    args.format = 10;
107*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 10;
108*bbecb9d1SAndroid Build Coastguard Worker    args.width = 2;
109*bbecb9d1SAndroid Build Coastguard Worker    args.height = 0;
110*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 0;
111*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
112*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
113*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
114*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
115*bbecb9d1SAndroid Build Coastguard Worker 
116*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
117*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
118*bbecb9d1SAndroid Build Coastguard Worker 
119*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_CMD_BLIT_SIZE + 1];
120*bbecb9d1SAndroid Build Coastguard Worker 
121*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
122*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_CMD_BLIT_SIZE << 16 | 0 << 8 | VIRGL_CCMD_BLIT;
123*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x8000001; // s0
124*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // minxy
125*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // maxxy
126*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //dhandle
127*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dlevel
128*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x1000029; //dformat
129*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dx
130*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dy
131*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dz
132*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dw
133*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dh
134*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dd
135*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //shandle
136*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //slevel
137*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sformat
138*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sx
139*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sy
140*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sz
141*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sw
142*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sh
143*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sd
144*bbecb9d1SAndroid Build Coastguard Worker 
145*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_CMD_BLIT_SIZE + 1);
146*bbecb9d1SAndroid Build Coastguard Worker }
147*bbecb9d1SAndroid Build Coastguard Worker 
test_format_fail_and_double_free()148*bbecb9d1SAndroid Build Coastguard Worker static void test_format_fail_and_double_free()
149*bbecb9d1SAndroid Build Coastguard Worker {
150*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
151*bbecb9d1SAndroid Build Coastguard Worker 
152*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 1;
153*bbecb9d1SAndroid Build Coastguard Worker    args.target = 3;
154*bbecb9d1SAndroid Build Coastguard Worker    args.format = 191;
155*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 10;
156*bbecb9d1SAndroid Build Coastguard Worker    args.width = 49;
157*bbecb9d1SAndroid Build Coastguard Worker    args.height = 0;
158*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 0;
159*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
160*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
161*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
162*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
163*bbecb9d1SAndroid Build Coastguard Worker 
164*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
165*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
166*bbecb9d1SAndroid Build Coastguard Worker }
167*bbecb9d1SAndroid Build Coastguard Worker 
168*bbecb9d1SAndroid Build Coastguard Worker 
169*bbecb9d1SAndroid Build Coastguard Worker 
170*bbecb9d1SAndroid Build Coastguard Worker 
171*bbecb9d1SAndroid Build Coastguard Worker /* Issue #141 */
test_blit_info_format_check()172*bbecb9d1SAndroid Build Coastguard Worker static void test_blit_info_format_check()
173*bbecb9d1SAndroid Build Coastguard Worker {
174*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
175*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 10;
176*bbecb9d1SAndroid Build Coastguard Worker    args.target = 3;
177*bbecb9d1SAndroid Build Coastguard Worker    args.format = 10;
178*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 10;
179*bbecb9d1SAndroid Build Coastguard Worker    args.width = 2;
180*bbecb9d1SAndroid Build Coastguard Worker    args.height = 1;
181*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
182*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
183*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
184*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
185*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
186*bbecb9d1SAndroid Build Coastguard Worker 
187*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
188*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
189*bbecb9d1SAndroid Build Coastguard Worker 
190*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_CMD_BLIT_SIZE + 1];
191*bbecb9d1SAndroid Build Coastguard Worker 
192*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
193*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_CMD_BLIT_SIZE << 16 | 0 << 8 | VIRGL_CCMD_BLIT;
194*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x8000001; // s0
195*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // minxy
196*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // maxxy
197*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //dhandle
198*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dlevel
199*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x1000029; //dformat
200*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dx
201*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dy
202*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dz
203*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dw
204*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dh
205*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dd
206*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //shandle
207*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //slevel
208*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //sformat
209*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sx
210*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sy
211*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sz
212*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sw
213*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sh
214*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sd
215*bbecb9d1SAndroid Build Coastguard Worker 
216*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_CMD_BLIT_SIZE + 1);
217*bbecb9d1SAndroid Build Coastguard Worker }
218*bbecb9d1SAndroid Build Coastguard Worker 
test_blit_info_format_check_null_format()219*bbecb9d1SAndroid Build Coastguard Worker static void test_blit_info_format_check_null_format()
220*bbecb9d1SAndroid Build Coastguard Worker {
221*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
222*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 10;
223*bbecb9d1SAndroid Build Coastguard Worker    args.target = 3;
224*bbecb9d1SAndroid Build Coastguard Worker    args.format = 10;
225*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 10;
226*bbecb9d1SAndroid Build Coastguard Worker    args.width = 2;
227*bbecb9d1SAndroid Build Coastguard Worker    args.height = 1;
228*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
229*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
230*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
231*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
232*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
233*bbecb9d1SAndroid Build Coastguard Worker 
234*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
235*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
236*bbecb9d1SAndroid Build Coastguard Worker 
237*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_CMD_BLIT_SIZE + 1];
238*bbecb9d1SAndroid Build Coastguard Worker 
239*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
240*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_CMD_BLIT_SIZE << 16 | 0 << 8 | VIRGL_CCMD_BLIT;
241*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x8000001; // s0
242*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // minxy
243*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // maxxy
244*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //dhandle
245*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dlevel
246*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; //dformat
247*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dx
248*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dy
249*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dz
250*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dw
251*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dh
252*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dd
253*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //shandle
254*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //slevel
255*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sformat
256*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sx
257*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sy
258*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sz
259*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sw
260*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sh
261*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sd
262*bbecb9d1SAndroid Build Coastguard Worker 
263*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_CMD_BLIT_SIZE + 1);
264*bbecb9d1SAndroid Build Coastguard Worker }
265*bbecb9d1SAndroid Build Coastguard Worker 
266*bbecb9d1SAndroid Build Coastguard Worker /* #142 */
test_format_is_plain_nullptr_deref_trigger()267*bbecb9d1SAndroid Build Coastguard Worker static void  test_format_is_plain_nullptr_deref_trigger()
268*bbecb9d1SAndroid Build Coastguard Worker {
269*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
270*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 10;
271*bbecb9d1SAndroid Build Coastguard Worker    args.target = 0;
272*bbecb9d1SAndroid Build Coastguard Worker    args.format = 126;
273*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 2;
274*bbecb9d1SAndroid Build Coastguard Worker    args.width = 10;
275*bbecb9d1SAndroid Build Coastguard Worker    args.height = 10;
276*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 10;
277*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
278*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
279*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
280*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
281*bbecb9d1SAndroid Build Coastguard Worker 
282*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
283*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
284*bbecb9d1SAndroid Build Coastguard Worker 
285*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_CMD_BLIT_SIZE + 1];
286*bbecb9d1SAndroid Build Coastguard Worker 
287*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
288*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_CMD_BLIT_SIZE << 16 | 0 << 8 | VIRGL_CCMD_BLIT;
289*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // s0
290*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // minxy
291*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // maxxy
292*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //dhandle
293*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dlevel
294*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 445382656; //dformat
295*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 3; //dx
296*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dy
297*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dz
298*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dw
299*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dh
300*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dd
301*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //shandle
302*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //slevel
303*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 126; //sformat
304*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sx
305*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sy
306*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sz
307*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sw
308*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 3; // sh
309*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sd
310*bbecb9d1SAndroid Build Coastguard Worker 
311*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_CMD_BLIT_SIZE + 1);
312*bbecb9d1SAndroid Build Coastguard Worker }
313*bbecb9d1SAndroid Build Coastguard Worker 
314*bbecb9d1SAndroid Build Coastguard Worker /* Issue #143 */
test_format_util_format_is_rgb_nullptr_deref_trigger_illegal_resource()315*bbecb9d1SAndroid Build Coastguard Worker static void test_format_util_format_is_rgb_nullptr_deref_trigger_illegal_resource()
316*bbecb9d1SAndroid Build Coastguard Worker {
317*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
318*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 8;
319*bbecb9d1SAndroid Build Coastguard Worker    args.target = 0;
320*bbecb9d1SAndroid Build Coastguard Worker    args.format = 109;
321*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 8;
322*bbecb9d1SAndroid Build Coastguard Worker    args.width = 2;
323*bbecb9d1SAndroid Build Coastguard Worker    args.height = 0;
324*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 0;
325*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
326*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
327*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
328*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
329*bbecb9d1SAndroid Build Coastguard Worker 
330*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
331*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
332*bbecb9d1SAndroid Build Coastguard Worker 
333*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_OBJ_SAMPLER_VIEW_SIZE + 1];
334*bbecb9d1SAndroid Build Coastguard Worker 
335*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
336*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_OBJ_SAMPLER_VIEW_SIZE << 16 | VIRGL_OBJECT_SAMPLER_VIEW << 8 | VIRGL_CCMD_CREATE_OBJECT;
337*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 35; // handle
338*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 8; // res_handle
339*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 3107; //format
340*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //first element
341*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // last element
342*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //swizzle
343*bbecb9d1SAndroid Build Coastguard Worker 
344*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_OBJ_SAMPLER_VIEW_SIZE + 1);
345*bbecb9d1SAndroid Build Coastguard Worker }
346*bbecb9d1SAndroid Build Coastguard Worker 
test_format_util_format_is_rgb_nullptr_deref_trigger()347*bbecb9d1SAndroid Build Coastguard Worker static void test_format_util_format_is_rgb_nullptr_deref_trigger()
348*bbecb9d1SAndroid Build Coastguard Worker {
349*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
350*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 8;
351*bbecb9d1SAndroid Build Coastguard Worker    args.target = 1;
352*bbecb9d1SAndroid Build Coastguard Worker    args.format = 109;
353*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 8;
354*bbecb9d1SAndroid Build Coastguard Worker    args.width = 2;
355*bbecb9d1SAndroid Build Coastguard Worker    args.height = 2;
356*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 0;
357*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
358*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
359*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
360*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
361*bbecb9d1SAndroid Build Coastguard Worker 
362*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
363*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
364*bbecb9d1SAndroid Build Coastguard Worker 
365*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_OBJ_SAMPLER_VIEW_SIZE + 1];
366*bbecb9d1SAndroid Build Coastguard Worker 
367*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
368*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_OBJ_SAMPLER_VIEW_SIZE << 16 | VIRGL_OBJECT_SAMPLER_VIEW << 8 | VIRGL_CCMD_CREATE_OBJECT;
369*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 35; // handle
370*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 8; // res_handle
371*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 3107; //format
372*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //first element
373*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // last element
374*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //swizzle
375*bbecb9d1SAndroid Build Coastguard Worker 
376*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_OBJ_SAMPLER_VIEW_SIZE + 1);
377*bbecb9d1SAndroid Build Coastguard Worker }
378*bbecb9d1SAndroid Build Coastguard Worker 
379*bbecb9d1SAndroid Build Coastguard Worker /* Test as reported in #139 */
test_double_free_in_vrend_renderer_blit_int_trigger_invalid_formats()380*bbecb9d1SAndroid Build Coastguard Worker static void test_double_free_in_vrend_renderer_blit_int_trigger_invalid_formats()
381*bbecb9d1SAndroid Build Coastguard Worker {
382*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
383*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 1;
384*bbecb9d1SAndroid Build Coastguard Worker    args.target = 0;
385*bbecb9d1SAndroid Build Coastguard Worker    args.format = 262144;
386*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 131072;
387*bbecb9d1SAndroid Build Coastguard Worker    args.width = 1;
388*bbecb9d1SAndroid Build Coastguard Worker    args.height = 1;
389*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
390*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
391*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
392*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
393*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
394*bbecb9d1SAndroid Build Coastguard Worker 
395*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
396*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
397*bbecb9d1SAndroid Build Coastguard Worker 
398*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 6;
399*bbecb9d1SAndroid Build Coastguard Worker    args.target = 4;
400*bbecb9d1SAndroid Build Coastguard Worker    args.format = 1;
401*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 2;
402*bbecb9d1SAndroid Build Coastguard Worker    args.width = 2;
403*bbecb9d1SAndroid Build Coastguard Worker    args.height = 0;
404*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
405*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 6;
406*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 2;
407*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
408*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
409*bbecb9d1SAndroid Build Coastguard Worker 
410*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
411*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
412*bbecb9d1SAndroid Build Coastguard Worker 
413*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 1;
414*bbecb9d1SAndroid Build Coastguard Worker    args.target = 7;
415*bbecb9d1SAndroid Build Coastguard Worker    args.format = 237;
416*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 1;
417*bbecb9d1SAndroid Build Coastguard Worker    args.width = 6;
418*bbecb9d1SAndroid Build Coastguard Worker    args.height = 0;
419*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
420*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
421*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
422*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 6;
423*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
424*bbecb9d1SAndroid Build Coastguard Worker 
425*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
426*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
427*bbecb9d1SAndroid Build Coastguard Worker 
428*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_CMD_BLIT_SIZE + 1];
429*bbecb9d1SAndroid Build Coastguard Worker 
430*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
431*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_CMD_BLIT_SIZE << 16 | 0 << 8 | VIRGL_CCMD_BLIT;
432*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 17113104; // s0
433*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // minxy
434*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 36; // maxxy
435*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 6; //dhandle
436*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dlevel
437*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dformat
438*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dx
439*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dy
440*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dz
441*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 6; //dw
442*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dh
443*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dd
444*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; //shandle
445*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //slevel
446*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sformat
447*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sx
448*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sy
449*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 268435456; // sz
450*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sw
451*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sh
452*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sd
453*bbecb9d1SAndroid Build Coastguard Worker 
454*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_CMD_BLIT_SIZE + 1);
455*bbecb9d1SAndroid Build Coastguard Worker }
456*bbecb9d1SAndroid Build Coastguard Worker 
test_double_free_in_vrend_renderer_blit_int_trigger()457*bbecb9d1SAndroid Build Coastguard Worker static void test_double_free_in_vrend_renderer_blit_int_trigger()
458*bbecb9d1SAndroid Build Coastguard Worker {
459*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
460*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 1;
461*bbecb9d1SAndroid Build Coastguard Worker    args.target = 2;
462*bbecb9d1SAndroid Build Coastguard Worker    args.format = VIRGL_FORMAT_Z32_UNORM;
463*bbecb9d1SAndroid Build Coastguard Worker    args.bind = VIRGL_BIND_SAMPLER_VIEW;
464*bbecb9d1SAndroid Build Coastguard Worker    args.width = 2;
465*bbecb9d1SAndroid Build Coastguard Worker    args.height = 2;
466*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
467*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
468*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
469*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 1;
470*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
471*bbecb9d1SAndroid Build Coastguard Worker 
472*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
473*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
474*bbecb9d1SAndroid Build Coastguard Worker 
475*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 6;
476*bbecb9d1SAndroid Build Coastguard Worker    args.target = 2;
477*bbecb9d1SAndroid Build Coastguard Worker    args.format = VIRGL_FORMAT_Z32_UNORM;
478*bbecb9d1SAndroid Build Coastguard Worker    args.bind = VIRGL_BIND_SAMPLER_VIEW;
479*bbecb9d1SAndroid Build Coastguard Worker    args.width = 2;
480*bbecb9d1SAndroid Build Coastguard Worker    args.height = 2;
481*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
482*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
483*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
484*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
485*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
486*bbecb9d1SAndroid Build Coastguard Worker 
487*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
488*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
489*bbecb9d1SAndroid Build Coastguard Worker 
490*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 1;
491*bbecb9d1SAndroid Build Coastguard Worker    args.target = 7;
492*bbecb9d1SAndroid Build Coastguard Worker    args.format = VIRGL_FORMAT_Z32_UNORM;
493*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 1;
494*bbecb9d1SAndroid Build Coastguard Worker    args.width = 6;
495*bbecb9d1SAndroid Build Coastguard Worker    args.height = 1;
496*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
497*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 2;
498*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
499*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
500*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
501*bbecb9d1SAndroid Build Coastguard Worker 
502*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
503*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
504*bbecb9d1SAndroid Build Coastguard Worker 
505*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_CMD_BLIT_SIZE + 1];
506*bbecb9d1SAndroid Build Coastguard Worker 
507*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
508*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_CMD_BLIT_SIZE << 16 | 0 << 8 | VIRGL_CCMD_BLIT;
509*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x30 ; // s0
510*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // minxy
511*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 36; // maxxy
512*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 6; //dhandle
513*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dlevel
514*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_FORMAT_Z32_UNORM; //dformat
515*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //dx
516*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dy
517*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // dz
518*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 6; //dw
519*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // dh
520*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // dd
521*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; //shandle
522*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //slevel
523*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_FORMAT_Z32_UNORM; //sformat
524*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //sx
525*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sy
526*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // sz
527*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // sw
528*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 2; // sh
529*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // sd
530*bbecb9d1SAndroid Build Coastguard Worker 
531*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_CMD_BLIT_SIZE + 1);
532*bbecb9d1SAndroid Build Coastguard Worker }
533*bbecb9d1SAndroid Build Coastguard Worker 
534*bbecb9d1SAndroid Build Coastguard Worker 
test_format_is_has_alpha_nullptr_deref_trigger_original()535*bbecb9d1SAndroid Build Coastguard Worker static void test_format_is_has_alpha_nullptr_deref_trigger_original()
536*bbecb9d1SAndroid Build Coastguard Worker {
537*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
538*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 8;
539*bbecb9d1SAndroid Build Coastguard Worker    args.target = 0;
540*bbecb9d1SAndroid Build Coastguard Worker    args.format = 10;
541*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 8;
542*bbecb9d1SAndroid Build Coastguard Worker    args.width = 0;
543*bbecb9d1SAndroid Build Coastguard Worker    args.height = 45;
544*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 35;
545*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
546*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
547*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
548*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
549*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
550*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
551*bbecb9d1SAndroid Build Coastguard Worker 
552*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_OBJ_SAMPLER_VIEW_SIZE + 1];
553*bbecb9d1SAndroid Build Coastguard Worker 
554*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
555*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_OBJ_SAMPLER_VIEW_SIZE << 16 | VIRGL_OBJECT_SAMPLER_VIEW << 8 | VIRGL_CCMD_CREATE_OBJECT;
556*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 35; //handle
557*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 8; // res_handle
558*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 524288; //format
559*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //first_ele
560*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //last_ele
561*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //swizzle
562*bbecb9d1SAndroid Build Coastguard Worker 
563*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_OBJ_SAMPLER_VIEW_SIZE + 1);
564*bbecb9d1SAndroid Build Coastguard Worker }
565*bbecb9d1SAndroid Build Coastguard Worker 
566*bbecb9d1SAndroid Build Coastguard Worker 
test_format_is_has_alpha_nullptr_deref_trigger_legal_resource()567*bbecb9d1SAndroid Build Coastguard Worker static void test_format_is_has_alpha_nullptr_deref_trigger_legal_resource()
568*bbecb9d1SAndroid Build Coastguard Worker {
569*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
570*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 8;
571*bbecb9d1SAndroid Build Coastguard Worker    args.target = 2;
572*bbecb9d1SAndroid Build Coastguard Worker    args.format = 10;
573*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 8;
574*bbecb9d1SAndroid Build Coastguard Worker    args.width = 10;
575*bbecb9d1SAndroid Build Coastguard Worker    args.height = 45;
576*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
577*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
578*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
579*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
580*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
581*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
582*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
583*bbecb9d1SAndroid Build Coastguard Worker 
584*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[VIRGL_OBJ_SAMPLER_VIEW_SIZE + 1];
585*bbecb9d1SAndroid Build Coastguard Worker 
586*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
587*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = VIRGL_OBJ_SAMPLER_VIEW_SIZE << 16 | VIRGL_OBJECT_SAMPLER_VIEW << 8 | VIRGL_CCMD_CREATE_OBJECT;
588*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 35; //handle
589*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 8; // res_handle
590*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 524288; //format
591*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //first_ele
592*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; //last_ele
593*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 10; //swizzle
594*bbecb9d1SAndroid Build Coastguard Worker 
595*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, VIRGL_OBJ_SAMPLER_VIEW_SIZE + 1);
596*bbecb9d1SAndroid Build Coastguard Worker }
597*bbecb9d1SAndroid Build Coastguard Worker 
test_heap_overflow_vrend_renderer_transfer_write_iov()598*bbecb9d1SAndroid Build Coastguard Worker static void test_heap_overflow_vrend_renderer_transfer_write_iov()
599*bbecb9d1SAndroid Build Coastguard Worker {
600*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
601*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 4;
602*bbecb9d1SAndroid Build Coastguard Worker    args.target = 0;
603*bbecb9d1SAndroid Build Coastguard Worker    args.format = 4;
604*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 131072;
605*bbecb9d1SAndroid Build Coastguard Worker    args.width = 0;
606*bbecb9d1SAndroid Build Coastguard Worker    args.height = 1;
607*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
608*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
609*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
610*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
611*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0;
612*bbecb9d1SAndroid Build Coastguard Worker 
613*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
614*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
615*bbecb9d1SAndroid Build Coastguard Worker 
616*bbecb9d1SAndroid Build Coastguard Worker    char data[16];
617*bbecb9d1SAndroid Build Coastguard Worker    memset(data, 'A', 16);
618*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[11 + 4 +1];
619*bbecb9d1SAndroid Build Coastguard Worker 
620*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
621*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = (11+4) << 16 | 0 << 8 | VIRGL_CCMD_RESOURCE_INLINE_WRITE;
622*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 4; // handle
623*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // level
624*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // usage
625*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // stride
626*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // layer_stride
627*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // x
628*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // y
629*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // z
630*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x80000000; // w
631*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // h
632*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // d
633*bbecb9d1SAndroid Build Coastguard Worker    memcpy(&cmd[i], data, 16);
634*bbecb9d1SAndroid Build Coastguard Worker 
635*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, 11 + 4 + 1);
636*bbecb9d1SAndroid Build Coastguard Worker }
637*bbecb9d1SAndroid Build Coastguard Worker 
test_heap_overflow_vrend_renderer_transfer_write_iov_compressed_tex()638*bbecb9d1SAndroid Build Coastguard Worker static void test_heap_overflow_vrend_renderer_transfer_write_iov_compressed_tex()
639*bbecb9d1SAndroid Build Coastguard Worker {
640*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
641*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 1;
642*bbecb9d1SAndroid Build Coastguard Worker    args.target = 5;
643*bbecb9d1SAndroid Build Coastguard Worker    args.format = 203;
644*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 1;
645*bbecb9d1SAndroid Build Coastguard Worker    args.width = 100;
646*bbecb9d1SAndroid Build Coastguard Worker    args.height = 1;
647*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 1;
648*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
649*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0;
650*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
651*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 1;
652*bbecb9d1SAndroid Build Coastguard Worker 
653*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
654*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
655*bbecb9d1SAndroid Build Coastguard Worker 
656*bbecb9d1SAndroid Build Coastguard Worker    char data[16];
657*bbecb9d1SAndroid Build Coastguard Worker    memset(data, 'A', 16);
658*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[11 + 4 +1];
659*bbecb9d1SAndroid Build Coastguard Worker 
660*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
661*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = (11+4) << 16 | 0 << 8 | VIRGL_CCMD_RESOURCE_INLINE_WRITE;
662*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // handle
663*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // level
664*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // usage
665*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 135168; // stride
666*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 655361; // layer_stride
667*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // x
668*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // y
669*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // z
670*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 5; // w
671*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 1; // h
672*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0; // d
673*bbecb9d1SAndroid Build Coastguard Worker    memcpy(&cmd[i], data, 16);
674*bbecb9d1SAndroid Build Coastguard Worker 
675*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_submit_cmd((void *) cmd, ctx_id, 11 + 4 + 1);
676*bbecb9d1SAndroid Build Coastguard Worker }
677*bbecb9d1SAndroid Build Coastguard Worker 
678*bbecb9d1SAndroid Build Coastguard Worker 
test_cs_nullpointer_deference()679*bbecb9d1SAndroid Build Coastguard Worker static void test_cs_nullpointer_deference()
680*bbecb9d1SAndroid Build Coastguard Worker {
681*bbecb9d1SAndroid Build Coastguard Worker 
682*bbecb9d1SAndroid Build Coastguard Worker    struct virgl_renderer_resource_create_args args;
683*bbecb9d1SAndroid Build Coastguard Worker    args.handle = 0x6e735f72;
684*bbecb9d1SAndroid Build Coastguard Worker    args.target = 2;
685*bbecb9d1SAndroid Build Coastguard Worker    args.format = 0x101;
686*bbecb9d1SAndroid Build Coastguard Worker    args.bind = 0x19191919;
687*bbecb9d1SAndroid Build Coastguard Worker    args.width = 0x19191919;
688*bbecb9d1SAndroid Build Coastguard Worker    args.height = 0x19191919;
689*bbecb9d1SAndroid Build Coastguard Worker    args.depth = 0x411959;
690*bbecb9d1SAndroid Build Coastguard Worker    args.array_size = 0;
691*bbecb9d1SAndroid Build Coastguard Worker    args.last_level = 0x19190000;
692*bbecb9d1SAndroid Build Coastguard Worker    args.nr_samples = 0;
693*bbecb9d1SAndroid Build Coastguard Worker    args.flags = 0x31313100;
694*bbecb9d1SAndroid Build Coastguard Worker 
695*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_resource_create(&args, NULL, 0);
696*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
697*bbecb9d1SAndroid Build Coastguard Worker 
698*bbecb9d1SAndroid Build Coastguard Worker    uint32_t cmd[9];
699*bbecb9d1SAndroid Build Coastguard Worker    int i = 0;
700*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x0083925;
701*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x00313131;
702*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0;
703*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0;
704*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0;
705*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x25313131;
706*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x39;
707*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x0001370b;
708*bbecb9d1SAndroid Build Coastguard Worker    cmd[i++] = 0x00340000;
709*bbecb9d1SAndroid Build Coastguard Worker 
710*bbecb9d1SAndroid Build Coastguard Worker   virgl_renderer_submit_cmd((void *) cmd, ctx_id, 9);
711*bbecb9d1SAndroid Build Coastguard Worker }
712*bbecb9d1SAndroid Build Coastguard Worker 
test_vrend_set_signle_abo_heap_overflow()713*bbecb9d1SAndroid Build Coastguard Worker static void test_vrend_set_signle_abo_heap_overflow() {
714*bbecb9d1SAndroid Build Coastguard Worker 
715*bbecb9d1SAndroid Build Coastguard Worker     struct virgl_renderer_resource_create_args args;
716*bbecb9d1SAndroid Build Coastguard Worker     args.handle = 0x4c474572;
717*bbecb9d1SAndroid Build Coastguard Worker     args.target = 0;
718*bbecb9d1SAndroid Build Coastguard Worker     args.format = 0x43;
719*bbecb9d1SAndroid Build Coastguard Worker     args.bind = 0x80000;
720*bbecb9d1SAndroid Build Coastguard Worker     args.width = 0x5f5f616d;
721*bbecb9d1SAndroid Build Coastguard Worker     args.height = 0x69667562;
722*bbecb9d1SAndroid Build Coastguard Worker     args.depth = 0x726f706d;
723*bbecb9d1SAndroid Build Coastguard Worker     args.array_size = 0xbbbbbb74;
724*bbecb9d1SAndroid Build Coastguard Worker     args.last_level = 0xbbbbbbbb;
725*bbecb9d1SAndroid Build Coastguard Worker     args.nr_samples = 0xbbbbbbbb;
726*bbecb9d1SAndroid Build Coastguard Worker     args.flags = 0xff;
727*bbecb9d1SAndroid Build Coastguard Worker 
728*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_resource_create(&args, NULL, 0);
729*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_ctx_attach_resource(ctx_id, args.handle);
730*bbecb9d1SAndroid Build Coastguard Worker 
731*bbecb9d1SAndroid Build Coastguard Worker     uint32_t cmd[0xde];
732*bbecb9d1SAndroid Build Coastguard Worker     int i = 0;
733*bbecb9d1SAndroid Build Coastguard Worker 
734*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000e1919;
735*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00003f00;
736*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xc7cf3000;
737*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00083907;
738*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x6e73735f;
739*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x32323232;
740*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19312161;
741*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
742*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
743*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
744*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffbe1959;
745*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbff;
746*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbb29;
747*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
748*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000000ff;
749*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000e1928;
750*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
751*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x4111d000;
752*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xfe010000;
753*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000172;
754*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x32323200;
755*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xe6cedea2;
756*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xe6e6e6e6;
757*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
758*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
759*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffbe1959;
760*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbff;
761*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
762*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
763*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000000ff;
764*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000e1919;
765*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
766*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xc7cfa400;
767*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00083907;
768*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x6e73735f;
769*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x32323232;
770*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19312161;
771*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
772*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
773*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
774*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000159;
775*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbb00;
776*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
777*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
778*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000000ff;
779*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x006e1928;
780*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
781*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbeee3000;
782*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xe6e6ffff;
783*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19e6e6e6;
784*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
785*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x59191919;
786*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffffbe19;
787*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
788*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
789*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffbbbbbb;
790*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19000000;
791*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000e19;
792*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
793*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x07c7cfa4;
794*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x5f000839;
795*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x326e7373;
796*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00390732;
797*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
798*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x4111d000;
799*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xfe010000;
800*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000172;
801*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x32323200;
802*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xe6cedea2;
803*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xe6e6e6e6;
804*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
805*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
806*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffbe1959;
807*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbff;
808*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
809*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
810*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000000ff;
811*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000e1919;
812*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
813*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xc7cfa400;
814*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00083907;
815*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x6e73735f;
816*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x32323232;
817*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19312161;
818*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
819*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
820*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
821*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000159;
822*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbb00;
823*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
824*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
825*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000000ff;
826*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x002e1928;
827*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
828*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbeee3000;
829*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xe6e6ffff;
830*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19e6e6e6;
831*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
832*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x59191919;
833*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffffbe19;
834*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
835*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
836*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffbbbbbb;
837*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19000000;
838*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000a19;
839*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
840*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x07c7cfa4;
841*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x5f000839;
842*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x326e7373;
843*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x08390732;
844*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x73735f00;
845*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x3232326e;
846*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x31216132;
847*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
848*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
849*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
850*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00015919;
851*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbb0000;
852*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
853*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00bbbbbb;
854*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
855*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
856*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
857*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
858*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
859*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
860*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
861*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
862*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
863*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
864*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
865*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
866*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
867*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
868*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
869*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
870*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
871*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbb0000;
872*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000000ff;
873*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x002e1928;
874*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
875*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x08ee3000;
876*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x73735f00;
877*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x3232326e;
878*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x31216132;
879*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
880*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
881*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
882*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00015919;
883*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbb0000;
884*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
885*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00bbbbbb;
886*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
887*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
888*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
889*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
890*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
891*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
892*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
893*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
894*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
895*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
896*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
897*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
898*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
899*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
900*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
901*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
902*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
903*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbb0000;
904*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000000ff;
905*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x002e1928;
906*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
907*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbeee3000;
908*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xe6e6ffff;
909*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19e6e6e6;
910*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
911*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x59191919;
912*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffffbe19;
913*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
914*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
915*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffbbbbbb;
916*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19000000;
917*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x61323219;
918*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19193121;
919*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
920*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x19191919;
921*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbb19;
922*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
923*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffbbbbbb;
924*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x28000000;
925*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00002e19;
926*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
927*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xffbeee30;
928*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00cffeff;
929*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
930*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
931*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
932*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
933*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00006161;
934*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x315d3100;
935*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
936*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
937*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
938*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
939*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
940*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
941*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
942*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
943*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbb000000;
944*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xbbbbbbbb;
945*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000000ff;
946*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x000e1919;
947*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
948*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0xc7cfa400;
949*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x7865745f;
950*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00000000;
951*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x65727574;
952*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x0b87765f;
953*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x40000137;
954*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00004000;
955*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0x00340034;
956*bbecb9d1SAndroid Build Coastguard Worker 
957*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_submit_cmd((void *) cmd, ctx_id, 0xde);
958*bbecb9d1SAndroid Build Coastguard Worker }
959*bbecb9d1SAndroid Build Coastguard Worker 
test_vrend_set_shader_images_overflow()960*bbecb9d1SAndroid Build Coastguard Worker static void test_vrend_set_shader_images_overflow()
961*bbecb9d1SAndroid Build Coastguard Worker {
962*bbecb9d1SAndroid Build Coastguard Worker     uint32_t num_shaders = PIPE_MAX_SHADER_IMAGES + 1;
963*bbecb9d1SAndroid Build Coastguard Worker     uint32_t size = num_shaders * VIRGL_SET_SHADER_IMAGE_ELEMENT_SIZE + 3;
964*bbecb9d1SAndroid Build Coastguard Worker     uint32_t cmd[size];
965*bbecb9d1SAndroid Build Coastguard Worker     int i = 0;
966*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = ((size - 1)<< 16) | 0 << 8 | VIRGL_CCMD_SET_SHADER_IMAGES;
967*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = PIPE_SHADER_FRAGMENT;
968*bbecb9d1SAndroid Build Coastguard Worker     memset(&cmd[i], 0, size - i);
969*bbecb9d1SAndroid Build Coastguard Worker 
970*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_submit_cmd((void *) cmd, ctx_id, size);
971*bbecb9d1SAndroid Build Coastguard Worker }
972*bbecb9d1SAndroid Build Coastguard Worker 
973*bbecb9d1SAndroid Build Coastguard Worker /* Test adapted from [email protected]:
974*bbecb9d1SAndroid Build Coastguard Worker  * https://gitlab.freedesktop.org/virgl/virglrenderer/-/issues/250
975*bbecb9d1SAndroid Build Coastguard Worker */
test_vrend_3d_resource_overflow()976*bbecb9d1SAndroid Build Coastguard Worker static void test_vrend_3d_resource_overflow() {
977*bbecb9d1SAndroid Build Coastguard Worker 
978*bbecb9d1SAndroid Build Coastguard Worker     struct virgl_renderer_resource_create_args resource;
979*bbecb9d1SAndroid Build Coastguard Worker     resource.handle = 0x4c474572;
980*bbecb9d1SAndroid Build Coastguard Worker     resource.target = PIPE_TEXTURE_2D_ARRAY;
981*bbecb9d1SAndroid Build Coastguard Worker     resource.format = VIRGL_FORMAT_Z24X8_UNORM;
982*bbecb9d1SAndroid Build Coastguard Worker     resource.nr_samples = 2;
983*bbecb9d1SAndroid Build Coastguard Worker     resource.last_level = 0;
984*bbecb9d1SAndroid Build Coastguard Worker     resource.array_size = 3;
985*bbecb9d1SAndroid Build Coastguard Worker     resource.bind = VIRGL_BIND_SAMPLER_VIEW;
986*bbecb9d1SAndroid Build Coastguard Worker     resource.depth = 1;
987*bbecb9d1SAndroid Build Coastguard Worker     resource.width = 8;
988*bbecb9d1SAndroid Build Coastguard Worker     resource.height = 4;
989*bbecb9d1SAndroid Build Coastguard Worker     resource.flags = 0;
990*bbecb9d1SAndroid Build Coastguard Worker 
991*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_resource_create(&resource, NULL, 0);
992*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_ctx_attach_resource(ctx_id, resource.handle);
993*bbecb9d1SAndroid Build Coastguard Worker 
994*bbecb9d1SAndroid Build Coastguard Worker     uint32_t size = 0x400;
995*bbecb9d1SAndroid Build Coastguard Worker     uint32_t cmd[size];
996*bbecb9d1SAndroid Build Coastguard Worker     int i = 0;
997*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = (size - 1) << 16 | 0 << 8 | VIRGL_CCMD_RESOURCE_INLINE_WRITE;
998*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = resource.handle;
999*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0; // level
1000*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0; // usage
1001*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0; // stride
1002*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0; // layer_stride
1003*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0; // x
1004*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0; // y
1005*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 0; // z
1006*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 8; // w
1007*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 4; // h
1008*bbecb9d1SAndroid Build Coastguard Worker     cmd[i++] = 3; // d
1009*bbecb9d1SAndroid Build Coastguard Worker     memset(&cmd[i], 0, size - i);
1010*bbecb9d1SAndroid Build Coastguard Worker 
1011*bbecb9d1SAndroid Build Coastguard Worker     virgl_renderer_submit_cmd((void *) cmd, ctx_id, size);
1012*bbecb9d1SAndroid Build Coastguard Worker }
1013*bbecb9d1SAndroid Build Coastguard Worker 
1014*bbecb9d1SAndroid Build Coastguard Worker 
main()1015*bbecb9d1SAndroid Build Coastguard Worker int main()
1016*bbecb9d1SAndroid Build Coastguard Worker {
1017*bbecb9d1SAndroid Build Coastguard Worker    initialize_environment();
1018*bbecb9d1SAndroid Build Coastguard Worker 
1019*bbecb9d1SAndroid Build Coastguard Worker    test_format_wrong_size();
1020*bbecb9d1SAndroid Build Coastguard Worker    test_format_fail_and_double_free();
1021*bbecb9d1SAndroid Build Coastguard Worker    test_blit_info_format_check();
1022*bbecb9d1SAndroid Build Coastguard Worker    test_blit_info_format_check_null_format();
1023*bbecb9d1SAndroid Build Coastguard Worker    test_format_is_plain_nullptr_deref_trigger();
1024*bbecb9d1SAndroid Build Coastguard Worker    test_format_util_format_is_rgb_nullptr_deref_trigger_illegal_resource();
1025*bbecb9d1SAndroid Build Coastguard Worker    test_format_util_format_is_rgb_nullptr_deref_trigger();
1026*bbecb9d1SAndroid Build Coastguard Worker    test_double_free_in_vrend_renderer_blit_int_trigger_invalid_formats();
1027*bbecb9d1SAndroid Build Coastguard Worker    test_double_free_in_vrend_renderer_blit_int_trigger();
1028*bbecb9d1SAndroid Build Coastguard Worker    test_format_is_has_alpha_nullptr_deref_trigger_original();
1029*bbecb9d1SAndroid Build Coastguard Worker    test_format_is_has_alpha_nullptr_deref_trigger_legal_resource();
1030*bbecb9d1SAndroid Build Coastguard Worker 
1031*bbecb9d1SAndroid Build Coastguard Worker    test_heap_overflow_vrend_renderer_transfer_write_iov();
1032*bbecb9d1SAndroid Build Coastguard Worker    test_heap_overflow_vrend_renderer_transfer_write_iov_compressed_tex();
1033*bbecb9d1SAndroid Build Coastguard Worker 
1034*bbecb9d1SAndroid Build Coastguard Worker    test_cs_nullpointer_deference();
1035*bbecb9d1SAndroid Build Coastguard Worker    test_vrend_set_signle_abo_heap_overflow();
1036*bbecb9d1SAndroid Build Coastguard Worker 
1037*bbecb9d1SAndroid Build Coastguard Worker    test_vrend_set_shader_images_overflow();
1038*bbecb9d1SAndroid Build Coastguard Worker    test_vrend_3d_resource_overflow();
1039*bbecb9d1SAndroid Build Coastguard Worker 
1040*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_context_destroy(ctx_id);
1041*bbecb9d1SAndroid Build Coastguard Worker    virgl_renderer_cleanup(&cookie);
1042*bbecb9d1SAndroid Build Coastguard Worker    virgl_egl_destroy(test_egl);
1043*bbecb9d1SAndroid Build Coastguard Worker 
1044*bbecb9d1SAndroid Build Coastguard Worker    return 0;
1045*bbecb9d1SAndroid Build Coastguard Worker }
1046