Recently, we added an ARRAY_END() macro to simplify finding a pointer one past the last element in an array. Such a pointer is often called the 'end', and thus the macro name. Make it easy to find more places where that macro should be used. See also: 436debc9cad8 ("array_size.h: add ARRAY_END()") 8118f197b7b7 ("mm: fix benign off-by-one bugs") a9e5620c9a9e ("kernel: fix off-by-one benign bugs") 61e9210e2392 ("mm: use ARRAY_END() instead of open-coding it") Cc: Kees Cook Cc: Markus Elfring Cc: Julia Lawall Cc: Nicolas Palix Signed-off-by: Alejandro Colomar --- Hi Julia, Resent the patch now, as you asked me to do. Cheers, Alex Here's the original message that came with the patch: Hi! This v3 only has one change: I've removed the comment about the false negatives. They were due to spatch(1) not being able to correctly parse unrelated code elsewhere. See range-diff and interdiff at the bottom. Have a lovely night! Alex scripts/coccinelle/misc/array_end.cocci | 73 +++++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 scripts/coccinelle/misc/array_end.cocci diff --git a/scripts/coccinelle/misc/array_end.cocci b/scripts/coccinelle/misc/array_end.cocci new file mode 100644 index 00000000..88c664de --- /dev/null +++ b/scripts/coccinelle/misc/array_end.cocci @@ -0,0 +1,73 @@ +// SPDX-License-Identifier: GPL-2.0-only +/// Use ARRAY_END instead of an expression derived from ARRAY_SIZE +// +// Confidence: High +// Copyright: 2026, Alejandro Colomar +// Options: --no-includes --include-headers + +virtual patch +virtual context +virtual org +virtual report + +@depends on context@ +type T; +T[] a; +expression b; +@@ +( +* (a + ARRAY_SIZE(a)) +| +* (&a[0] + ARRAY_SIZE(a)) +| +* (&a[ARRAY_SIZE(a)]) +| +* (&a[ARRAY_SIZE(a) - b]) +) + +@depends on patch@ +type T; +T[] a; +expression b; +@@ +( +- (a + ARRAY_SIZE(a)) ++ ARRAY_END(a) +| +- (&a[0] + ARRAY_SIZE(a)) ++ ARRAY_END(a) +| +- (&a[ARRAY_SIZE(a)]) ++ ARRAY_END(a) +| +- (&a[ARRAY_SIZE(a) - b]) ++ ARRAY_END(a) - b +) + +@r depends on org || report@ +type T; +T[] a; +expression b; +position p; +@@ +( + (a@p + ARRAY_SIZE(a)) +| + (&a[0]@p + ARRAY_SIZE(a)) +| + (&a[ARRAY_SIZE(a)]@p) +| + (&a[ARRAY_SIZE(a)@p - b]) +) + +@script:python depends on org@ +p << r.p; +@@ + +coccilib.org.print_todo(p[0], "WARNING should use ARRAY_END") + +@script:python depends on report@ +p << r.p; +@@ + +coccilib.report.print_report(p[0], "WARNING: opportunity for ARRAY_END") Range-diff: 1: 9fd8d3d1 ! 1: 2ae22f8b scripts/coccinelle: Add script for using ARRAY_END() @@ scripts/coccinelle/misc/array_end.cocci (new) +// +// Confidence: High +// Copyright: 2026, Alejandro Colomar -+// Comments: No known false positives, but has a few false negatives +// Options: --no-includes --include-headers + +virtual patch -- 2.53.0 ----- End forwarded message ----- --