diff options
author | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2019-07-03 12:51:25 +0100 |
---|---|---|
committer | Srinivas Kandagatla <srinivas.kandagatla@linaro.org> | 2020-06-29 17:15:42 +0100 |
commit | bbbe83f872fe8095014d9dc1aaf7e1b3d5ed4275 (patch) | |
tree | 977debce3c09b9cb18111d165e0a456621578eec | |
parent | 0ff054f7020f89be74cd6bf652f48ba0a829ca01 (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 a9a72574b34a..cfdc5b95b63d 100644 --- a/drivers/soundwire/stream.c +++ b/drivers/soundwire/stream.c @@ -703,9 +703,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; } @@ -715,7 +718,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; } @@ -748,6 +755,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; @@ -839,9 +847,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: |