On Thu, Oct 05, 2017 at 02:08:26PM +0200, Arnd Bergmann wrote: > 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@xxxxxxxx> > --- > drivers/gpu/drm/i915/intel_ddi.c | 12 +++++++++--- > 1 file changed, 9 insertions(+), 3 deletions(-) > > diff --git a/drivers/gpu/drm/i915/intel_ddi.c b/drivers/gpu/drm/i915/intel_ddi.c > index 93cbbcbbc193..d0b786078bea 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; > MISSING_CASE(voltage); > + } Somewhat meh on this, so added a /* shut up gcc */ comment and merged. Thanks, Daniel > 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; > 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; > MISSING_CASE(voltage); > + } > return NULL; > } else { > return cnl_get_buf_trans_dp(dev_priv, n_entries); > -- > 2.9.0 > -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel