mirror of
https://mirrors.bfsu.edu.cn/git/linux.git
synced 2024-12-12 05:24:12 +08:00
iommu/virtio: Add __counted_by for struct viommu_request 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 <gustavoars@kernel.org> Reviewed-by: Jean-Philippe Brucker <jean-philippe@linaro.org> Reviewed-by: Justin Stitt <justinstitt@google.com> Link: https://lore.kernel.org/r/ZSRFW0yDlDo8+at3@work Signed-off-by: Joerg Roedel <jroedel@suse.de>
This commit is contained in:
parent
6465e260f4
commit
9e13ec61de
@ -85,7 +85,7 @@ struct viommu_request {
|
||||
void *writeback;
|
||||
unsigned int write_offset;
|
||||
unsigned int len;
|
||||
char buf[];
|
||||
char buf[] __counted_by(len);
|
||||
};
|
||||
|
||||
#define VIOMMU_FAULT_RESV_MASK 0xffffff00
|
||||
@ -230,7 +230,7 @@ static int __viommu_add_req(struct viommu_dev *viommu, void *buf, size_t len,
|
||||
if (write_offset <= 0)
|
||||
return -EINVAL;
|
||||
|
||||
req = kzalloc(sizeof(*req) + len, GFP_ATOMIC);
|
||||
req = kzalloc(struct_size(req, buf, len), GFP_ATOMIC);
|
||||
if (!req)
|
||||
return -ENOMEM;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user