summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ddi.c
diff options
context:
space:
mode:
authorArnd Bergmann2017-10-05 14:08:26 +0200
committerDaniel Vetter2017-10-05 15:32:15 +0200
commit83482ca3b4fe7312bf3d1f25c7a4e9ff66585eab (patch)
treec8419582694cd3fdcd9cbb88ffd758bceff41064 /drivers/gpu/drm/i915/intel_ddi.c
parentdrm/i915/selftests: fix check for intel IOMMU (diff)
downloadkernel-qcow2-linux-83482ca3b4fe7312bf3d1f25c7a4e9ff66585eab.tar.gz
kernel-qcow2-linux-83482ca3b4fe7312bf3d1f25c7a4e9ff66585eab.tar.xz
kernel-qcow2-linux-83482ca3b4fe7312bf3d1f25c7a4e9ff66585eab.zip
drm/i915: avoid potential uninitialized variable use
One of the recent changes introduced a warning about undefined behavior in the sanity checking: drivers/gpu/drm/i915/intel_ddi.c: In function 'intel_ddi_hdmi_level': drivers/gpu/drm/i915/intel_ddi.c:654:6: error: 'n_hdmi_entries' may be used uninitialized in this function [-Werror=maybe-uninitialized] It seems that the new cnl specific get_buf_trans functions can return uninitialized data if the voltage level is set to an unexpected value. This changes the code to always return '1' in that error case, which seems like the safest choice as we use one less than the number as an array index later on. Fixes: cc9cabfdec38 ("drm/i915/cnl: Move voltage check into ddi buf trans functions.") Signed-off-by: Arnd Bergmann <arnd@arndb.de> [danvet: shut up gcc comment added.] Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> Link: https://patchwork.freedesktop.org/patch/msgid/20171005120835.437022-1-arnd@arndb.de
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ddi.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ddi.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c
index 511aa60e0176..f7c91bb9d13e 100644
--- a/drivers/gpu/drm/i915/intel_ddi.c
+++ b/drivers/gpu/drm/i915/intel_ddi.c
@@ -602,8 +602,10 @@ cnl_get_buf_trans_hdmi(struct drm_i915_private *dev_priv, int *n_entries)
} else if (voltage == VOLTAGE_INFO_1_05V) {
*n_entries = ARRAY_SIZE(cnl_ddi_translations_hdmi_1_05V);
return cnl_ddi_translations_hdmi_1_05V;
- } else
+ } else {
+ *n_entries = 1; /* shut up gcc */
MISSING_CASE(voltage);
+ }
return NULL;
}
@@ -621,8 +623,10 @@ cnl_get_buf_trans_dp(struct drm_i915_private *dev_priv, int *n_entries)
} else if (voltage == VOLTAGE_INFO_1_05V) {
*n_entries = ARRAY_SIZE(cnl_ddi_translations_dp_1_05V);
return cnl_ddi_translations_dp_1_05V;
- } else
+ } else {
+ *n_entries = 1; /* shut up gcc */
MISSING_CASE(voltage);
+ }
return NULL;
}
@@ -641,8 +645,10 @@ cnl_get_buf_trans_edp(struct drm_i915_private *dev_priv, int *n_entries)
} else if (voltage == VOLTAGE_INFO_1_05V) {
*n_entries = ARRAY_SIZE(cnl_ddi_translations_edp_1_05V);
return cnl_ddi_translations_edp_1_05V;
- } else
+ } else {
+ *n_entries = 1; /* shut up gcc */
MISSING_CASE(voltage);
+ }
return NULL;
} else {
return cnl_get_buf_trans_dp(dev_priv, n_entries);