[PATCH] soundwire: cadence: Don't overwrite msg->buf during write commands
Pierre-Louis Bossart
pierre-louis.bossart at linux.intel.com
Fri Sep 16 12:55:31 CEST 2022
On 9/16/22 12:35, Richard Fitzgerald wrote:
> The buf passed in struct sdw_msg must only be written for a READ,
> in that case the RDATA part of the response is the data value of the
> register.
>
> For a write command there is no RDATA, and buf should be assumed to
> be const and unmodifable. The original caller should not expect its data
> buffer to be corrupted by an sdw_nwrite().
>
> Signed-off-by: Richard Fitzgerald <rf at opensource.cirrus.com>
Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart at linux.intel.com>
> ---
> drivers/soundwire/cadence_master.c | 9 ++++++---
> 1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/soundwire/cadence_master.c b/drivers/soundwire/cadence_master.c
> index be9cd47f31ec..3ef472049980 100644
> --- a/drivers/soundwire/cadence_master.c
> +++ b/drivers/soundwire/cadence_master.c
> @@ -544,9 +544,12 @@ cdns_fill_msg_resp(struct sdw_cdns *cdns,
> return SDW_CMD_IGNORED;
> }
>
> - /* fill response */
> - for (i = 0; i < count; i++)
> - msg->buf[i + offset] = FIELD_GET(CDNS_MCP_RESP_RDATA, cdns->response_buf[i]);
> + if (msg->flags == SDW_MSG_FLAG_READ) {
> + /* fill response */
> + for (i = 0; i < count; i++)
> + msg->buf[i + offset] = FIELD_GET(CDNS_MCP_RESP_RDATA,
> + cdns->response_buf[i]);
> + }
>
> return SDW_CMD_OK;
> }
More information about the Alsa-devel
mailing list