diff options
author | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2019-07-03 12:51:25 +0100 |
---|---|---|
committer | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2019-10-28 14:08:03 +0000 |
commit | 820d121b75dc658c1edd8fe5810d6e752f08d248 (patch) | |
tree | e25a35cc10a45953b0f894b3e949b31839a40979 | |
parent | 725d612434e64c4aeefeeff7559c4722cbb211fe (diff) |
soundwire: stream: check defer msg before freeing it
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-rw-r--r-- | drivers/soundwire/stream.c | 24 |
1 files changed, 17 insertions, 7 deletions
diff --git a/drivers/soundwire/stream.c b/drivers/soundwire/stream.c index 2a765d30a0159..cb584831f2e84 100644 --- a/drivers/soundwire/stream.c +++ b/drivers/soundwire/stream.c @@ -692,9 +692,12 @@ static int sdw_bank_switch(struct sdw_bus *bus, int m_rt_count) } if (!multi_link) { - kfree(wr_msg); - kfree(wbuf); - bus->defer_msg.msg = NULL; + if (bus->defer_msg.msg) { + kfree(bus->defer_msg.msg->buf); + kfree(bus->defer_msg.msg); + bus->defer_msg.msg = NULL; + } + bus->params.curr_bank = !bus->params.curr_bank; bus->params.next_bank = !bus->params.next_bank; } @@ -704,7 +707,11 @@ static int sdw_bank_switch(struct sdw_bus *bus, int m_rt_count) error: kfree(wbuf); error_1: - kfree(wr_msg); + if (bus->defer_msg.msg) { + kfree(bus->defer_msg.msg); + bus->defer_msg.msg = NULL; + } + return ret; } @@ -737,6 +744,7 @@ static int sdw_ml_sync_bank_switch(struct sdw_bus *bus) if (bus->defer_msg.msg) { kfree(bus->defer_msg.msg->buf); kfree(bus->defer_msg.msg); + bus->defer_msg.msg = NULL; } return 0; @@ -828,9 +836,11 @@ static int do_bank_switch(struct sdw_stream_runtime *stream) error: list_for_each_entry(m_rt, &stream->master_list, stream_node) { bus = m_rt->bus; - - kfree(bus->defer_msg.msg->buf); - kfree(bus->defer_msg.msg); + if (bus->defer_msg.msg) { + kfree(bus->defer_msg.msg->buf); + kfree(bus->defer_msg.msg); + bus->defer_msg.msg = NULL; + } } msg_unlock: |