Skip to content

Commit ba21d63

Browse files
GustavoARSilvaandersson
authored andcommitted
soc: qcom: apr: Add __counted_by for struct apr_rx_buf and use struct_size()
Prepare for the coming implementation by GCC and Clang of the __counted_by attribute. Flexible array members annotated with __counted_by can have their accesses bounds-checked at run-time via CONFIG_UBSAN_BOUNDS (for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family functions). While there, use struct_size() helper, instead of the open-coded version, to calculate the size for the allocation of the whole flexible structure, including of course, the flexible-array member. This code was found with the help of Coccinelle, and audited and fixed manually. Signed-off-by: "Gustavo A. R. Silva" <[email protected]> Reviewed-by: Justin Stitt <[email protected]> Reviewed-by: Kees Cook <[email protected]> Link: https://lore.kernel.org/r/ZSRw6RNi3Crhd32H@work Signed-off-by: Bjorn Andersson <[email protected]>
1 parent f86955f commit ba21d63

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

drivers/soc/qcom/apr.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,7 @@ struct packet_router {
4141
struct apr_rx_buf {
4242
struct list_head node;
4343
int len;
44-
uint8_t buf[];
44+
uint8_t buf[] __counted_by(len);
4545
};
4646

4747
/**
@@ -171,7 +171,7 @@ static int apr_callback(struct rpmsg_device *rpdev, void *buf,
171171
return -EINVAL;
172172
}
173173

174-
abuf = kzalloc(sizeof(*abuf) + len, GFP_ATOMIC);
174+
abuf = kzalloc(struct_size(abuf, buf, len), GFP_ATOMIC);
175175
if (!abuf)
176176
return -ENOMEM;
177177

0 commit comments

Comments
 (0)