kexec: Annotate struct crash_mem with __counted_by
authorKees Cook <keescook@chromium.org>
Fri, 22 Sep 2023 17:52:24 +0000 (10:52 -0700)
committerKees Cook <keescook@chromium.org>
Tue, 24 Oct 2023 21:09:46 +0000 (14:09 -0700)
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 checking via CONFIG_UBSAN_BOUNDS
(for array indexing) and CONFIG_FORTIFY_SOURCE (for strcpy/memcpy-family
functions).

As found with Coccinelle[1], add __counted_by for struct crash_mem.

[1] https://github.com/kees/kernel-tools/blob/trunk/coccinelle/examples/counted_by.cocci

Cc: Eric Biederman <ebiederm@xmission.com>
Cc: kexec@lists.infradead.org
Acked-by: Baoquan He <bhe@redhat.com>
Link: https://lore.kernel.org/r/20230922175224.work.712-kees@kernel.org
Signed-off-by: Kees Cook <keescook@chromium.org>
include/linux/crash_core.h

index 0c06561bf5ffd3b6b0c20089a18a779e15dbb095..08704c29fdb4fc35114c5f8d280b4b73017c2a48 100644 (file)
@@ -92,7 +92,7 @@ int parse_crashkernel_low(char *cmdline, unsigned long long system_ram,
 struct crash_mem {
        unsigned int max_nr_ranges;
        unsigned int nr_ranges;
-       struct range ranges[];
+       struct range ranges[] __counted_by(max_nr_ranges);
 };
 
 extern int crash_exclude_mem_range(struct crash_mem *mem,