xf86drm: Fix error handling for drmGetDevice()

Some of the error conditions in drmGetDevice() can lead to us calling
closedir(NULL) or leaking memory.  Fix these conditions the same way we
did for drmGetDevices() in commit:

        commit 8c4a1cbd98
        Author: Matt Roper <matthew.d.roper@intel.com>
        Date:   Wed Sep 30 09:30:51 2015 -0700

            xf86drm: Fix error handling for drmGetDevices()

Signed-off-by: Matt Roper <matthew.d.roper@intel.com>
Reviewed-by: Emil Velikov <emil.l.velikov@gmail.com>
main
Matt Roper 2015-10-16 15:11:23 -07:00 committed by Emil Velikov
parent 3045523de2
commit cf0f036e3d
1 changed files with 5 additions and 5 deletions

View File

@ -3108,7 +3108,7 @@ int drmGetDevice(int fd, drmDevicePtr *device)
sysdir = opendir(DRM_DIR_NAME);
if (!sysdir) {
ret = -errno;
goto close_sysdir;
goto free_locals;
}
i = 0;
@ -3165,16 +3165,16 @@ int drmGetDevice(int fd, drmDevicePtr *device)
for (i = 1; i < node_count && local_devices[i]; i++)
drmFreeDevice(&local_devices[i]);
free(local_devices);
closedir(sysdir);
free(local_devices);
return 0;
free_devices:
drmFreeDevices(local_devices, i);
free(local_devices);
close_sysdir:
closedir(sysdir);
free_locals:
free(local_devices);
return ret;
}