mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-01-30 09:20:23 +01:00
st/dri: fd management cleanups
Add some checks if the original/dup'd fd is valid and ensure that we
don't leak it on error. The former is implicitly handled within the
pipe_loader, although let's make things explicit and check beforehand.
Spotted by Coverity (CID 1339865)
Cc: mesa-stable@lists.freedesktop.org
Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>
(cherry picked from commit d90ba57c08)
This commit is contained in:
parent
88cd21fefb
commit
a71db1c46e
1 changed files with 14 additions and 2 deletions
|
|
@ -1446,6 +1446,7 @@ dri2_init_screen(__DRIscreen * sPriv)
|
|||
struct pipe_screen *pscreen = NULL;
|
||||
const struct drm_conf_ret *throttle_ret;
|
||||
const struct drm_conf_ret *dmabuf_ret;
|
||||
int fd = -1;
|
||||
|
||||
screen = CALLOC_STRUCT(dri_screen);
|
||||
if (!screen)
|
||||
|
|
@ -1457,7 +1458,10 @@ dri2_init_screen(__DRIscreen * sPriv)
|
|||
|
||||
sPriv->driverPrivate = (void *)screen;
|
||||
|
||||
if (pipe_loader_drm_probe_fd(&screen->dev, dup(screen->fd)))
|
||||
if (screen->fd < 0 || (fd = dup(screen->fd)) < 0)
|
||||
goto fail;
|
||||
|
||||
if (pipe_loader_drm_probe_fd(&screen->dev, fd))
|
||||
pscreen = pipe_loader_create_screen(screen->dev);
|
||||
|
||||
if (!pscreen)
|
||||
|
|
@ -1502,6 +1506,8 @@ fail:
|
|||
dri_destroy_screen_helper(screen);
|
||||
if (screen->dev)
|
||||
pipe_loader_release(&screen->dev, 1);
|
||||
else
|
||||
close(fd);
|
||||
FREE(screen);
|
||||
return NULL;
|
||||
}
|
||||
|
|
@ -1519,6 +1525,7 @@ dri_kms_init_screen(__DRIscreen * sPriv)
|
|||
struct dri_screen *screen;
|
||||
struct pipe_screen *pscreen = NULL;
|
||||
uint64_t cap;
|
||||
int fd = -1;
|
||||
|
||||
screen = CALLOC_STRUCT(dri_screen);
|
||||
if (!screen)
|
||||
|
|
@ -1529,7 +1536,10 @@ dri_kms_init_screen(__DRIscreen * sPriv)
|
|||
|
||||
sPriv->driverPrivate = (void *)screen;
|
||||
|
||||
if (pipe_loader_sw_probe_kms(&screen->dev, dup(screen->fd)))
|
||||
if (screen->fd < 0 || (fd = dup(screen->fd)) < 0)
|
||||
goto fail;
|
||||
|
||||
if (pipe_loader_sw_probe_kms(&screen->dev, fd))
|
||||
pscreen = pipe_loader_create_screen(screen->dev);
|
||||
|
||||
if (!pscreen)
|
||||
|
|
@ -1557,6 +1567,8 @@ fail:
|
|||
dri_destroy_screen_helper(screen);
|
||||
if (screen->dev)
|
||||
pipe_loader_release(&screen->dev, 1);
|
||||
else
|
||||
close(fd);
|
||||
FREE(screen);
|
||||
#endif // GALLIUM_SOFTPIPE
|
||||
return NULL;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue