Skip to content

Commit ac7110d

Browse files
GustavoARSilvakees
authored andcommitted
atags_proc: Add __counted_by for struct buffer 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: Kees Cook <[email protected]> Reviewed-by: Justin Stitt <[email protected]> Link: https://lore.kernel.org/r/ZSVHurzo/4aFQcT3@work Signed-off-by: Kees Cook <[email protected]>
1 parent 8a3750e commit ac7110d

File tree

1 file changed

+2
-2
lines changed

1 file changed

+2
-2
lines changed

arch/arm/kernel/atags_proc.c

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77

88
struct buffer {
99
size_t size;
10-
char data[];
10+
char data[] __counted_by(size);
1111
};
1212

1313
static ssize_t atags_read(struct file *file, char __user *buf,
@@ -54,7 +54,7 @@ static int __init init_atags_procfs(void)
5454

5555
WARN_ON(tag->hdr.tag != ATAG_NONE);
5656

57-
b = kmalloc(sizeof(*b) + size, GFP_KERNEL);
57+
b = kmalloc(struct_size(b, data, size), GFP_KERNEL);
5858
if (!b)
5959
goto nomem;
6060

0 commit comments

Comments
 (0)