From c37d8ae82b9d6ad30ebffbc8bf043afa0f5b6cc5 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Tue, 8 Dec 2020 19:17:37 +0100 Subject: [PATCH] egl/wayland: add a NULL guard for the authenticate callback On some platforms, the authenticate callback may be NULL, e.g. on surfaceless. If a client tries to send a wl_drm.authenticate request the handler tries to dereference the NULL pointer. This can be reproduced with libva which unconditionally tries to use wl_drm.authenticate even with render nodes [1]. Run a compositor with a surfaceless context, then try to start e.g. mpv to trigger the segfault. [1]: https://github.com/intel/libva/pull/476 Signed-off-by: Simon Ser Reviewed-by: Adam Jackson Part-of: --- src/egl/wayland/wayland-drm/wayland-drm.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/egl/wayland/wayland-drm/wayland-drm.c b/src/egl/wayland/wayland-drm/wayland-drm.c index b72d10f6911..29558ea910e 100644 --- a/src/egl/wayland/wayland-drm/wayland-drm.c +++ b/src/egl/wayland/wayland-drm/wayland-drm.c @@ -180,7 +180,8 @@ drm_authenticate(struct wl_client *client, { struct wl_drm *drm = wl_resource_get_user_data(resource); - if (drm->callbacks.authenticate(drm->user_data, id) < 0) + if (!drm->callbacks.authenticate || + drm->callbacks.authenticate(drm->user_data, id) < 0) wl_resource_post_error(resource, WL_DRM_ERROR_AUTHENTICATE_FAIL, "authenticate failed");