2023-05-16 23:23:06

by Gustavo A. R. Silva

[permalink] [raw]
Subject: [PATCH 0/2][next] media: venus: hfi_cmds: Replace one-element array with flexible-array member

Hi!

This series aims to replace one-element arrays with flexible-array
members in struct hfi_session_set_buffers_pkt.

This helps with the ongoing efforts to tighten the FORTIFY_SOURCE
routines on memcpy() and help us make progress towards globally
enabling -fstrict-flex-arrays=3 [1].

Link: https://github.com/KSPP/linux/issues/79
Link: https://github.com/KSPP/linux/issues/160
Link: https://github.com/KSPP/linux/issues/292
Link: https://gcc.gnu.org/pipermail/gcc-patches/2022-October/602902.html [1]

Gustavo A. R. Silva (2):
media: venus: hfi_cmds: Replace one-element array with flexible-array
member
media: venus: hfi_cmds: Use struct_size() helper

drivers/media/platform/qcom/venus/hfi_cmds.c | 16 ++++++++--------
drivers/media/platform/qcom/venus/hfi_cmds.h | 2 +-
2 files changed, 9 insertions(+), 9 deletions(-)

--
2.34.1



2023-05-16 23:24:29

by Gustavo A. R. Silva

[permalink] [raw]
Subject: [PATCH 2/2][next] media: venus: hfi_cmds: Use struct_size() helper

Prefer struct_size() over open-coded versions of idiom:

sizeof(struct-with-flex-array) + sizeof(typeof-flex-array-elements) * count

where count is the max number of items the flexible array is supposed to
contain.

Link: https://github.com/KSPP/linux/issues/160
Signed-off-by: Gustavo A. R. Silva <[email protected]>
---
drivers/media/platform/qcom/venus/hfi_cmds.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)

diff --git a/drivers/media/platform/qcom/venus/hfi_cmds.c b/drivers/media/platform/qcom/venus/hfi_cmds.c
index 21d1b3c90dc0..3f74d518ad08 100644
--- a/drivers/media/platform/qcom/venus/hfi_cmds.c
+++ b/drivers/media/platform/qcom/venus/hfi_cmds.c
@@ -209,8 +209,8 @@ int pkt_session_set_buffers(struct hfi_session_set_buffers_pkt *pkt,
}
} else {
pkt->extradata_size = 0;
- pkt->shdr.hdr.size = sizeof(*pkt) +
- bd->num_buffers * sizeof(u32);
+ pkt->shdr.hdr.size = struct_size(pkt, buffer_info,
+ bd->num_buffers);
for (i = 0; i < pkt->num_buffers; i++)
pkt->buffer_info[i] = bd->device_addr;
}
@@ -251,8 +251,8 @@ int pkt_session_unset_buffers(struct hfi_session_release_buffer_pkt *pkt,

pkt->extradata_size = 0;
pkt->shdr.hdr.size =
- sizeof(struct hfi_session_set_buffers_pkt) +
- bd->num_buffers * sizeof(u32);
+ struct_size((struct hfi_session_set_buffers_pkt *)0,
+ buffer_info, bd->num_buffers);
}

pkt->response_req = bd->response_required;
--
2.34.1


2023-05-17 19:26:46

by Kees Cook

[permalink] [raw]
Subject: Re: [PATCH 2/2][next] media: venus: hfi_cmds: Use struct_size() helper

On Tue, May 16, 2023 at 05:14:49PM -0600, Gustavo A. R. Silva wrote:
> Prefer struct_size() over open-coded versions of idiom:
>
> sizeof(struct-with-flex-array) + sizeof(typeof-flex-array-elements) * count
>
> where count is the max number of items the flexible array is supposed to
> contain.
>
> Link: https://github.com/KSPP/linux/issues/160
> Signed-off-by: Gustavo A. R. Silva <[email protected]>

Reviewed-by: Kees Cook <[email protected]>

--
Kees Cook

2023-05-25 12:30:23

by Vikash Garodia

[permalink] [raw]
Subject: Re: [PATCH 2/2][next] media: venus: hfi_cmds: Use struct_size() helper


On 5/17/2023 4:44 AM, Gustavo A. R. Silva wrote:
> Prefer struct_size() over open-coded versions of idiom:
>
> sizeof(struct-with-flex-array) + sizeof(typeof-flex-array-elements) * count
>
> where count is the max number of items the flexible array is supposed to
> contain.
>
> Link: https://github.com/KSPP/linux/issues/160
> Signed-off-by: Gustavo A. R. Silva <[email protected]>

The patch looks good. As stated in previous patch, lets combine this into a
single series.

> ---
> drivers/media/platform/qcom/venus/hfi_cmds.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/media/platform/qcom/venus/hfi_cmds.c b/drivers/media/platform/qcom/venus/hfi_cmds.c
> index 21d1b3c90dc0..3f74d518ad08 100644
> --- a/drivers/media/platform/qcom/venus/hfi_cmds.c
> +++ b/drivers/media/platform/qcom/venus/hfi_cmds.c
> @@ -209,8 +209,8 @@ int pkt_session_set_buffers(struct hfi_session_set_buffers_pkt *pkt,
> }
> } else {
> pkt->extradata_size = 0;
> - pkt->shdr.hdr.size = sizeof(*pkt) +
> - bd->num_buffers * sizeof(u32);
> + pkt->shdr.hdr.size = struct_size(pkt, buffer_info,
> + bd->num_buffers);
> for (i = 0; i < pkt->num_buffers; i++)
> pkt->buffer_info[i] = bd->device_addr;
> }
> @@ -251,8 +251,8 @@ int pkt_session_unset_buffers(struct hfi_session_release_buffer_pkt *pkt,
>
> pkt->extradata_size = 0;
> pkt->shdr.hdr.size =
> - sizeof(struct hfi_session_set_buffers_pkt) +
> - bd->num_buffers * sizeof(u32);
> + struct_size((struct hfi_session_set_buffers_pkt *)0,
> + buffer_info, bd->num_buffers);
> }
>
> pkt->response_req = bd->response_required;