[PATCH] drm: Fix uabi regression by allowing garbage mode->type from userspace

Thomas Hellstrom thomas at shipmail.org
Thu Mar 22 07:42:11 UTC 2018


On 03/21/2018 10:12 PM, Ville Syrjala wrote:
> From: Ville Syrjälä <ville.syrjala at linux.intel.com>
>
> Apparently xf86-video-vmware leaves the mode->type uninitialized
> when feeding the mode to the kernel. Thus we have no choice but
> to accept the garbage in. We'll just ignore any of the bits we
> don't want. The mode type is just a hint anyway, and more
> useful for the kernel->userspace direction.
>
> Reported-by: Thomas Hellstrom <thomas at shipmail.org>
> CC: Thomas Hellstrom <thomas at shipmail.org>
> Cc: Adam Jackson <ajax at redhat.com>
> Cc: Alex Deucher <alexander.deucher at amd.com>
> Fixes: c6ed6dad5cfb ("drm/uapi: Validate the mode flags/type")
> References: https://lists.freedesktop.org/archives/dri-devel/2018-March/170213.html
> Signed-off-by: Ville Syrjälä <ville.syrjala at linux.intel.com>
> ---
>   drivers/gpu/drm/drm_modes.c | 8 +++++++-
>   1 file changed, 7 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
> index f6b7c0e36a1a..e82b61e08f8c 100644
> --- a/drivers/gpu/drm/drm_modes.c
> +++ b/drivers/gpu/drm/drm_modes.c
> @@ -1611,7 +1611,13 @@ int drm_mode_convert_umode(struct drm_device *dev,
>   	out->vscan = in->vscan;
>   	out->vrefresh = in->vrefresh;
>   	out->flags = in->flags;
> -	out->type = in->type;
> +	/*
> +	 * Old xf86-video-vmware (possibly others too) used to
> +	 * leave 'type' unititialized. Just ignore any bits we
> +	 * don't like. It's a just hint after all, and more
> +	 * useful for the kernel->userspace direction anyway.
> +	 */
> +	out->type = in->type & DRM_MODE_TYPE_ALL;
>   	strncpy(out->name, in->name, DRM_DISPLAY_MODE_LEN);
>   	out->name[DRM_DISPLAY_MODE_LEN-1] = 0;
>   

Tested-by: Thomas Hellstrom <thellstrom at vmware.com>

Thanks,

Thomas




More information about the dri-devel mailing list