[Mesa-dev] [PATCH 11/11] egl: extra null checks for get_xcb_screen() return values
Anuj Phogat
anuj.phogat at gmail.com
Tue Sep 9 15:37:22 PDT 2014
On Mon, Sep 8, 2014 at 11:53 PM, Juha-Pekka Heikkila
<juhapekka.heikkila at gmail.com> wrote:
> verify get_xcb_screen() returned pointer before using it.
>
> Signed-off-by: Juha-Pekka Heikkila <juhapekka.heikkila at gmail.com>
> ---
> src/egl/drivers/dri2/platform_x11.c | 30 ++++++++++++++++++++++++------
> 1 file changed, 24 insertions(+), 6 deletions(-)
>
> diff --git a/src/egl/drivers/dri2/platform_x11.c b/src/egl/drivers/dri2/platform_x11.c
> index a7a7338..316ac18 100644
> --- a/src/egl/drivers/dri2/platform_x11.c
> +++ b/src/egl/drivers/dri2/platform_x11.c
> @@ -205,6 +205,7 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
> xcb_screen_iterator_t s;
> xcb_generic_error_t *error;
> xcb_drawable_t drawable;
> + xcb_screen_t *screen;
>
> STATIC_ASSERT(sizeof(uintptr_t) == sizeof(native_surface));
> drawable = (uintptr_t) native_surface;
> @@ -222,11 +223,16 @@ dri2_x11_create_surface(_EGLDriver *drv, _EGLDisplay *disp, EGLint type,
>
> dri2_surf->region = XCB_NONE;
> if (type == EGL_PBUFFER_BIT) {
> + screen = get_xcb_screen(s, dri2_dpy->screen);
> + if (!screen) {
> + _eglError(EGL_BAD_NATIVE_WINDOW, "dri2_create_surface");
> + goto cleanup_surf;
> + }
> +
> dri2_surf->drawable = xcb_generate_id(dri2_dpy->conn);
> s = xcb_setup_roots_iterator(xcb_get_setup(dri2_dpy->conn));
> xcb_create_pixmap(dri2_dpy->conn, conf->BufferSize,
> - dri2_surf->drawable,
> - get_xcb_screen(s, dri2_dpy->screen)->root,
> + dri2_surf->drawable, screen->root,
> dri2_surf->base.Width, dri2_surf->base.Height);
> } else {
> dri2_surf->drawable = drawable;
> @@ -504,6 +510,7 @@ dri2_x11_connect(struct dri2_egl_display *dri2_dpy)
> xcb_dri2_connect_cookie_t connect_cookie;
> xcb_generic_error_t *error;
> xcb_screen_iterator_t s;
> + xcb_screen_t *screen;
> char *driver_name, *device_name;
> const xcb_query_extension_reply_t *extension;
>
> @@ -527,8 +534,12 @@ dri2_x11_connect(struct dri2_egl_display *dri2_dpy)
> XCB_DRI2_MINOR_VERSION);
>
> s = xcb_setup_roots_iterator(xcb_get_setup(dri2_dpy->conn));
> - connect_cookie = xcb_dri2_connect_unchecked(dri2_dpy->conn,
> - get_xcb_screen(s, dri2_dpy->screen)->root,
> + screen = get_xcb_screen(s, dri2_dpy->screen);
> + if (!screen) {
> + _eglError(EGL_BAD_NATIVE_WINDOW, "dri2_x11_connect");
> + return EGL_FALSE;
> + }
> + connect_cookie = xcb_dri2_connect_unchecked(dri2_dpy->conn, screen->root,
> XCB_DRI2_DRIVER_TYPE_DRI);
>
> xfixes_query =
> @@ -589,12 +600,19 @@ dri2_x11_authenticate(_EGLDisplay *disp, uint32_t id)
> xcb_dri2_authenticate_reply_t *authenticate;
> xcb_dri2_authenticate_cookie_t authenticate_cookie;
> xcb_screen_iterator_t s;
> + xcb_screen_t *screen;
> int ret = 0;
>
> s = xcb_setup_roots_iterator(xcb_get_setup(dri2_dpy->conn));
> +
> + screen = get_xcb_screen(s, dri2_dpy->screen);
> + if (!screen) {
> + _eglError(EGL_BAD_NATIVE_WINDOW, "dri2_x11_authenticate");
> + return -1;
> + }
> +
> authenticate_cookie =
> - xcb_dri2_authenticate_unchecked(dri2_dpy->conn,
> - get_xcb_screen(s, dri2_dpy->screen)->root, id);
> + xcb_dri2_authenticate_unchecked(dri2_dpy->conn, screen->root, id);
> authenticate =
> xcb_dri2_authenticate_reply(dri2_dpy->conn, authenticate_cookie, NULL);
>
> --
> 1.8.5.1
>
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev
With comments in patches 6, 9 addressed, this series is:
Reviewed-by: Anuj Phogat <anuj.phogat at gmail.com>
More information about the mesa-dev
mailing list