| From 5463eed827d33a796298cd360ea5663c1aecaba5 Mon Sep 17 00:00:00 2001 |
| From: Damien Lespiau <damien.lespiau@intel.com> |
| Date: Fri, 12 Jul 2013 16:24:40 +0100 |
| Subject: drm/i915: Don't attempt to read an unitialized stack value |
| |
| If intel_sdvo_get_value() fails here, val is unitialized and the cross |
| check will compare the pipe config multiplier with a bogus value. |
| |
| Instead, only set encoder_pixel_multiplier when the sdvo command has |
| been successful. The cross check will compare the pipe config value with |
| 0 otherwise. |
| |
| v2: Do the cross check with the initial value of encoder_pixel_multiplier (0) |
| if the sdvo command fails (and thus keep the warning) (Daniel Vetter) |
| |
| Signed-off-by: Damien Lespiau <damien.lespiau@intel.com> |
| Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch> |
| (cherry picked from commit 53b914084950e5766b40228c4e08706e28745fa5) |
| Signed-off-by: Darren Hart <dvhart@linux.intel.com> |
| --- |
| drivers/gpu/drm/i915/intel_sdvo.c | 24 +++++++++++++----------- |
| 1 file changed, 13 insertions(+), 11 deletions(-) |
| |
| diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c |
| index 8415d6a610dd..798df114cfd3 100644 |
| --- a/drivers/gpu/drm/i915/intel_sdvo.c |
| +++ b/drivers/gpu/drm/i915/intel_sdvo.c |
| @@ -1357,17 +1357,19 @@ static void intel_sdvo_get_config(struct intel_encoder *encoder, |
| } |
| |
| /* Cross check the port pixel multiplier with the sdvo encoder state. */ |
| - intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_CLOCK_RATE_MULT, &val, 1); |
| - switch (val) { |
| - case SDVO_CLOCK_RATE_MULT_1X: |
| - encoder_pixel_multiplier = 1; |
| - break; |
| - case SDVO_CLOCK_RATE_MULT_2X: |
| - encoder_pixel_multiplier = 2; |
| - break; |
| - case SDVO_CLOCK_RATE_MULT_4X: |
| - encoder_pixel_multiplier = 4; |
| - break; |
| + if (intel_sdvo_get_value(intel_sdvo, SDVO_CMD_GET_CLOCK_RATE_MULT, |
| + &val, 1)) { |
| + switch (val) { |
| + case SDVO_CLOCK_RATE_MULT_1X: |
| + encoder_pixel_multiplier = 1; |
| + break; |
| + case SDVO_CLOCK_RATE_MULT_2X: |
| + encoder_pixel_multiplier = 2; |
| + break; |
| + case SDVO_CLOCK_RATE_MULT_4X: |
| + encoder_pixel_multiplier = 4; |
| + break; |
| + } |
| } |
| |
| WARN(encoder_pixel_multiplier != pipe_config->pixel_multiplier, |
| -- |
| 1.8.5.rc3 |
| |