From fdab8fef7aff0270ec173cbdca33d434a43ac8ab Mon Sep 17 00:00:00 2001 From: Shuicheng Lin Date: Tue, 19 Jul 2022 08:23:59 +0000 Subject: [PATCH] iris: return failure if iris_resource_configure_main fail MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit For surface created by eglCreatePbufferSurface with attrib_list is NULL or empty, the width/height info is 0. Then in the next eglMakeCurrent call, it will try to allocate the buffer with the 0 width/height, then call surf_fill_state_s with 0 width/height, so the isl_extent3d returned by isl_get_image_alignment is (0, 0, 0), and the unreachable code will cause process crash with: "stack corruption detected (-fstack-protector)". As the width is 0, it causes row_pitch_B is 0 in isl_calc_row_pitch. And it leads to iris_resource_configure_main return fail. Update code to return fail to avoid the crash. Signed-off-by: Shuicheng Lin Reviewed-by: Tapani Pälli Part-of: --- src/gallium/drivers/iris/iris_resource.c | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/gallium/drivers/iris/iris_resource.c b/src/gallium/drivers/iris/iris_resource.c index d1adaa1722a..03365561713 100644 --- a/src/gallium/drivers/iris/iris_resource.c +++ b/src/gallium/drivers/iris/iris_resource.c @@ -1145,9 +1145,10 @@ iris_resource_create_with_modifiers(struct pipe_screen *pscreen, goto fail; } - UNUSED const bool isl_surf_created_successfully = + const bool isl_surf_created_successfully = iris_resource_configure_main(screen, res, templ, modifier, 0); - assert(isl_surf_created_successfully); + if (!isl_surf_created_successfully) + goto fail; if (!iris_resource_configure_aux(screen, res, false)) goto fail;