Fake flexible arrays have been deprecated since last millennium. Proper C99 flexible arrays must be used throughout the kernel so CONFIG_FORTIFY_SOURCE and CONFIG_UBSAN_BOUNDS can provide proper array bounds checking. [joe@perches.com: various suggestions] Link: https://lkml.kernel.org/r/20230601160746.up.948-kees@kernel.org Link: https://lore.kernel.org/r/20230517204530.never.151-kees@kernel.org Signed-off-by: Kees Cook <keescook@chromium.org> Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org> Acked-by: Joe Perches <joe@perches.com> Cc: Andy Whitcroft <apw@canonical.com> Cc: Dwaipayan Ray <dwaipayanray1@gmail.com> Cc: Lukas Bulwahn <lukas.bulwahn@gmail.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Unified · Split
| @@ -7418,6 +7418,16 @@ sub process { · 7417 unmodified lines | |||
| 7418 | } | 7418 | } |
| 7419 | } | 7419 | } |
| 7420 | 7420 | ||
| 7421 | # check for array definition/declarations that should use flexible arrays instead | ||
| 7422 | if ($sline =~ /^[\+ ]\s*\}(?:\s*__packed)?\s*;\s*$/ && | ||
| 7423 | $prevline =~ /^\+\s*(?:\}(?:\s*__packed\s*)?|$Type)\s*$Ident\s*\[\s*(0|1)\s*\]\s*;\s*$/) { | ||
| 7424 | if (ERROR("FLEXIBLE_ARRAY", | ||
| 7425 | "Use C99 flexible arrays - see https://docs.kernel.org/process/deprecated.html#zero-length-and-one-element-arrays\n" . $hereprev) && | ||
| 7426 | $1 == '0' && $fix) { | ||
| 7427 | $fixed[$fixlinenr - 1] =~ s/\[\s*0\s*\]/[]/; | ||
| 7428 | } | ||
| 7429 | } | ||
| 7430 | |||
| 7421 | # nested likely/unlikely calls | 7431 | # nested likely/unlikely calls |
| 7422 | if ($line =~ /\b(?:(?:un)?likely)\s*\(\s*!?\s*(IS_ERR(?:_OR_NULL|_VALUE)?|WARN)/) { | 7432 | if ($line =~ /\b(?:(?:un)?likely)\s*\(\s*!?\s*(IS_ERR(?:_OR_NULL|_VALUE)?|WARN)/) { |
| 7423 | WARN("LIKELY_MISUSE", | 7433 | WARN("LIKELY_MISUSE", |