aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2019-07-03 12:51:25 +0100
committerSrinivas Kandagatla <srinivas.kandagatla@linaro.org>2020-06-29 17:15:42 +0100
commitbbbe83f872fe8095014d9dc1aaf7e1b3d5ed4275 (patch)
tree977debce3c09b9cb18111d165e0a456621578eec
parent0ff054f7020f89be74cd6bf652f48ba0a829ca01 (diff)
soundwire: stream: check defer msg before freeing it
Signed-off-by: Srinivas Kandagatla <srinivas.kandagatla@linaro.org>
-rw-r--r--drivers/soundwire/stream.c24
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: