[PATCH v2 2/2] drm/i915: Validate userspace-provided color management LUT's (v2)

Shankar, Uma uma.shankar at intel.com
Fri Dec 14 14:28:48 UTC 2018



>-----Original Message-----
>From: dri-devel [mailto:dri-devel-bounces at lists.freedesktop.org] On Behalf Of
>Matt Roper
>Sent: Friday, December 14, 2018 3:25 AM
>To: dri-devel at lists.freedesktop.org; intel-gfx at lists.freedesktop.org
>Cc: Shankar, Uma <uma.shankar at intel.com>; Sharma, Swati2
><swati2.sharma at intel.com>
>Subject: [PATCH v2 2/2] drm/i915: Validate userspace-provided color
>management LUT's (v2)
>
>We currently program userspace-provided gamma and degamma LUT's into our
>hardware without really checking to see whether they satisfy our hardware's
>rules.  We should try to catch tables that are invalid for our hardware early and
>reject the atomic transaction.
>
>All of our platforms that accept a degamma LUT expect that the entries in the
>LUT are always flat or increasing, never decreasing.  Also, our GLK and ICL
>platforms only accept degamma tables with r=g=b entries; so we should also add
>the relevant checks for that in anticipation of degamma support landing for those
>platforms.
>
>v2:
> - Use new API (single check function with bitmask of tests to apply)
> - Call helper for our gamma table as well (with no additional tests
>   specified) so that the table size will be validated.

Looks ok to me.
Reviewed-By: Uma Shankar <uma.shankar at intel.com>

>Cc: Uma Shankar <uma.shankar at intel.com>
>Cc: Swati Sharma <swati2.sharma at intel.com>
>Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
>---
> drivers/gpu/drm/i915/intel_color.c | 19 +++++++++++++++++++
> 1 file changed, 19 insertions(+)
>
>diff --git a/drivers/gpu/drm/i915/intel_color.c
>b/drivers/gpu/drm/i915/intel_color.c
>index 37fd9ddf762e..5ad4459a5f3c 100644
>--- a/drivers/gpu/drm/i915/intel_color.c
>+++ b/drivers/gpu/drm/i915/intel_color.c
>@@ -609,10 +609,29 @@ int intel_color_check(struct intel_crtc_state
>*crtc_state)  {
> 	struct drm_i915_private *dev_priv = to_i915(crtc_state->base.crtc->dev);
> 	size_t gamma_length, degamma_length;
>+	uint32_t tests = DRM_COLOR_LUT_INCREASING;
>
> 	degamma_length = INTEL_INFO(dev_priv)->color.degamma_lut_size;
> 	gamma_length = INTEL_INFO(dev_priv)->color.gamma_lut_size;
>
>+	/*
>+	 * All of our platforms mandate that the degamma curve be
>+	 * non-decreasing.  Additionally, GLK and gen11 only accept a single
>+	 * value for red, green, and blue in the degamma table.  Make sure
>+	 * userspace didn't try to pass us something we can't handle.
>+	 *
>+	 * We don't have any extra hardware constraints on the gamma table,
>+	 * so we just test that it's a proper size multiple
>+	 * (tablesize % entrysize == 0).
>+	 */
>+	if (IS_GEMINILAKE(dev_priv) || INTEL_GEN(dev_priv) >= 11)
>+		tests |= DRM_COLOR_LUT_EQUAL_CHANNELS;
>+
>+	if (drm_color_lut_check(crtc_state->base.degamma_lut, tests) != 0)
>+		return -EINVAL;
>+	if (drm_color_lut_check(crtc_state->base.gamma_lut, 0) != 0)
>+		return -EINVAL;
>+
> 	/*
> 	 * We allow both degamma & gamma luts at the right size or
> 	 * NULL.
>--
>2.14.4
>
>_______________________________________________
>dri-devel mailing list
>dri-devel at lists.freedesktop.org
>https://lists.freedesktop.org/mailman/listinfo/dri-devel


More information about the dri-devel mailing list