dri3: Fix error handling in dri3_buffer_from_pixmap request.

The old info->fd_from_pixmap() driver hook, which is
preferentially used in dri3_fd_from_pixmap(), can return
error codes other than -1, e.g., -EINVAL (-22) on nouveau-ddx.

Not handling the error causes a broken/corrupted X-Connection
resulting from a failed request.

This fixes failure of sddm-greeter to start up under nouveau-ddx
with DRI3 enabled and DRI3 protocol version properly clamped
to 1.0 by the server (see followup patch).

Fixes: 75bba3aedc ("dri3: Use single-FD screen call for single-FD request")
Signed-off-by: Mario Kleiner <mario.kleiner.de@gmail.com>
Reviewed-by: Adam Jackson <ajax@redhat.com>
Cc: Daniel Stone <daniels@collabora.com>
This commit is contained in:
Mario Kleiner 2018-04-30 09:06:07 +02:00 committed by Adam Jackson
parent 19d006ee3d
commit fbc5c5cd53

View File

@ -255,7 +255,7 @@ proc_dri3_buffer_from_pixmap(ClientPtr client)
rep.bpp = pixmap->drawable.bitsPerPixel;
fd = dri3_fd_from_pixmap(pixmap, &rep.stride, &rep.size);
if (fd == -1)
if (fd < 0)
return BadPixmap;
if (client->swapped) {