[Intel-gfx] [PATCH] drm/i915: intel_audio clear eld buf when disconnecting monitor

Takashi Iwai tiwai at suse.de
Mon Mar 21 10:44:38 UTC 2016


On Mon, 21 Mar 2016 06:03:29 +0100,
libin.yang at linux.intel.com wrote:
> 
> From: Libin Yang <libin.yang at linux.intel.com>
> 
> When disconnecting monitor, dev_priv->dig_port_map[port]
> will be set NULL, which causes eld will not be updated in
> i915_audio_component_get_eld().
> 
> This patch clears the eld buf when dev_priv->dig_port_map[port]
> is NULL.
> 
> Signed-off-by: Libin Yang <libin.yang at linux.intel.com>

While this isn't certainly bad, I don't think it's mandatory.  The
function returns zero, i.e. no data is copied.  So the caller
shouldn't expect that the buffer is cleared in this case.

Actually, if we do zero-clear, a safer fix would be to do it at the
beginning.  The similar "leak" can be seen, as we do memcpy() only for
drm_eld_size() bytes at max.


thanks,

Takashi

> ---
>  drivers/gpu/drm/i915/intel_audio.c | 7 +++++++
>  1 file changed, 7 insertions(+)
> 
> diff --git a/drivers/gpu/drm/i915/intel_audio.c b/drivers/gpu/drm/i915/intel_audio.c
> index fdc8b2a..9d3879e 100644
> --- a/drivers/gpu/drm/i915/intel_audio.c
> +++ b/drivers/gpu/drm/i915/intel_audio.c
> @@ -732,6 +732,13 @@ static int i915_audio_component_get_eld(struct device *dev, int port,
>  			ret = drm_eld_size(eld);
>  			memcpy(buf, eld, min(max_bytes, ret));
>  		}
> +	} else {
> +		/* dev_priv->dig_port_map[port] will be set NULL in
> +		 * intel_audio_codec_disable when disconnecting monitor.
> +		 * We need clear the eld buf.
> +		 */
> +		memset(buf, 0, max_bytes);
> +		ret = 0;
>  	}
>  
>  	mutex_unlock(&dev_priv->av_mutex);
> -- 
> 1.9.1
> 


More information about the Intel-gfx mailing list