[PATCH libdrm] xf86drm: Fix error handling for drmGetDevices()
Emil Velikov
emil.l.velikov at gmail.com
Thu Oct 1 03:12:34 PDT 2015
Hi Matt,
On 30 September 2015 at 17:30, Matt Roper <matthew.d.roper at intel.com> wrote:
> If the opendir() call in drmGetDevices() returns failure, we jump to an
> error label that calls closedir() and then returns. However this means
> that we're calling closedir(NULL) which may not be safe on all
> implementations. We are also leaking the local_devices array that was
> allocated before the opendir() call.
>
> Fix both of these issues by jumping to an earlier error label (to free
> local_devices) and guarding the closedir() call with a NULL test.
>
> Cc: Emil Velikov <emil.l.velikov at gmail.com>
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> xf86drm.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> diff --git a/xf86drm.c b/xf86drm.c
> index c1cab1b..763d710 100644
> --- a/xf86drm.c
> +++ b/xf86drm.c
> @@ -3209,7 +3209,7 @@ int drmGetDevices(drmDevicePtr devices[], int max_devices)
> sysdir = opendir(DRM_DIR_NAME);
> if (!sysdir) {
> ret = -errno;
> - goto close_sysdir;
> + goto free_locals;
> }
>
> i = 0;
> @@ -3280,9 +3280,10 @@ int drmGetDevices(drmDevicePtr devices[], int max_devices)
>
> free_devices:
> drmFreeDevices(local_devices, i);
> +free_locals:
> free(local_devices);
>
> -close_sysdir:
> - closedir(sysdir);
> + if (sysdir)
> + closedir(sysdir);
Any objections if we move the new label & free() here and drop the if
check above? I can do that before pushing if that's ok with you.
Thanks for catching this.
Emil
More information about the dri-devel
mailing list