summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorTom Rini <[email protected]>2025-10-16 13:27:22 -0600
committerTom Rini <[email protected]>2025-10-16 15:02:14 -0600
commit3a71bae9af71515893483be2c022f05c8d4704aa (patch)
treee3701c4d1166e9db270c526a00633860d060b555 /drivers
parenta157a73720e242f4e16c81e64d36be9d284d2028 (diff)
parent5b9125746dfde0a29911ccd542801da6b8f94239 (diff)
Merge patch series "ti_sci: Address some issues found by Smatch"
Andrew Goodbody <[email protected]> says: Prevent a memory leak from a non-freed malloc. Return an error code on an error path. Assign a value to a pointer before it is dereferenced. Link: https://lore.kernel.org/r/[email protected]
Diffstat (limited to 'drivers')
-rw-r--r--drivers/firmware/ti_sci.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/drivers/firmware/ti_sci.c b/drivers/firmware/ti_sci.c
index 8013afef304..6f57dcfe8de 100644
--- a/drivers/firmware/ti_sci.c
+++ b/drivers/firmware/ti_sci.c
@@ -191,9 +191,9 @@ static int ti_sci_get_response(struct ti_sci_info *info,
/* Sanity check for message response */
if (hdr->seq != info->seq) {
- dev_dbg(info->dev, "%s: Message for %d is not expected\n",
+ dev_err(info->dev, "%s: Message for %d is not expected\n",
__func__, hdr->seq);
- return ret;
+ return -EINVAL;
}
if (msg->len > info->desc->max_msg_size) {
@@ -1365,6 +1365,8 @@ static int ti_sci_cmd_clk_get_parent(const struct ti_sci_handle *handle,
if (ret)
return ret;
+ resp = (struct ti_sci_msg_resp_get_clock_parent *)xfer->tx_message.buf;
+
*parent_id = resp->parent_id;
return ret;
@@ -3083,7 +3085,10 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
dev_err(dev, "%s resource type ids not available\n", of_prop);
return ERR_PTR(sets);
}
- temp = malloc(sets);
+ temp = devm_kmalloc(dev, sets, GFP_KERNEL);
+ if (!temp)
+ return ERR_PTR(-ENOMEM);
+
sets /= sizeof(u32);
res->sets = sets;
@@ -3123,6 +3128,7 @@ devm_ti_sci_get_of_resource(const struct ti_sci_handle *handle,
return ERR_PTR(-ENOMEM);
}
+ devm_kfree(dev, temp);
if (valid_set)
return res;