diff options
author | Gustavo A. R. Silva <gustavo@embeddedor.com> | 2019-08-30 10:14:06 -0500 |
---|---|---|
committer | Bjorn Andersson <bjorn.andersson@linaro.org> | 2020-01-20 10:50:54 -0800 |
commit | c87846571587f1c2217f16104586fd33216fc9e0 (patch) | |
tree | 9c4a8f82787aa55709ea2f1da51bb919621c5cf9 /drivers/remoteproc | |
parent | a8f40111d184098cd2b3dc0c7170c42250a5fa09 (diff) | |
download | lwn-c87846571587f1c2217f16104586fd33216fc9e0.tar.gz lwn-c87846571587f1c2217f16104586fd33216fc9e0.zip |
remoteproc: use struct_size() helper
One of the more common cases of allocation size calculations is finding
the size of a structure that has a zero-sized array at the end, along
with memory for some number of elements for that array. For example:
struct fw_rsc_vdev {
...
struct fw_rsc_vdev_vring vring[0];
} __packed;
Make use of the struct_size() helper instead of an open-coded version
in order to avoid any potential type mistakes.
So, replace the following form:
sizeof(*rsc) + rsc->num_of_vrings * sizeof(struct fw_rsc_vdev_vring)
with:
struct_size(rsc, vring, rsc->num_of_vrings)
This code was detected with the help of Coccinelle.
Signed-off-by: Gustavo A. R. Silva <gustavo@embeddedor.com>
Link: https://lore.kernel.org/r/20190830151406.GA23274@embeddedor
Signed-off-by: Bjorn Andersson <bjorn.andersson@linaro.org>
Diffstat (limited to 'drivers/remoteproc')
-rw-r--r-- | drivers/remoteproc/remoteproc_core.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/remoteproc/remoteproc_core.c b/drivers/remoteproc/remoteproc_core.c index 8115f945151b..097f33e4f1f3 100644 --- a/drivers/remoteproc/remoteproc_core.c +++ b/drivers/remoteproc/remoteproc_core.c @@ -477,8 +477,8 @@ static int rproc_handle_vdev(struct rproc *rproc, struct fw_rsc_vdev *rsc, char name[16]; /* make sure resource isn't truncated */ - if (sizeof(*rsc) + rsc->num_of_vrings * sizeof(struct fw_rsc_vdev_vring) - + rsc->config_len > avail) { + if (struct_size(rsc, vring, rsc->num_of_vrings) + rsc->config_len > + avail) { dev_err(dev, "vdev rsc is truncated\n"); return -EINVAL; } |