lkml.org 
[lkml]   [2022]   [Oct]   [24]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 5.15 491/530] soundwire: cadence: Dont overwrite msg->buf during write commands
    Date
    From: Richard Fitzgerald <rf@opensource.cirrus.com>

    [ Upstream commit ba05b39d265bdd16913f7684600d9d41e2796745 ]

    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@opensource.cirrus.com>
    Reviewed-by: Pierre-Louis Bossart <pierre-louis.bossart@linux.intel.com>
    Link: https://lore.kernel.org/r/20220916103505.1562210-1-rf@opensource.cirrus.com
    Signed-off-by: Vinod Koul <vkoul@kernel.org>
    Signed-off-by: Sasha Levin <sashal@kernel.org>
    ---
    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 4fcc3ba93004..18d2f9b3e201 100644
    --- a/drivers/soundwire/cadence_master.c
    +++ b/drivers/soundwire/cadence_master.c
    @@ -545,9 +545,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;
    }
    --
    2.35.1


    \
     
     \ /
      Last update: 2022-10-24 22:16    [W:4.041 / U:0.100 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site