Messages in this thread | | | Date | Fri, 26 May 2023 20:23:28 -0600 | From | "Gustavo A. R. Silva" <> | Subject | Re: [PATCH v3] checkpatch: Check for 0-length and 1-element arrays |
| |
On Fri, May 26, 2023 at 07:09:33PM -0700, Kees Cook wrote: > 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. > > Cc: Andy Whitcroft <apw@canonical.com> > Cc: Dwaipayan Ray <dwaipayanray1@gmail.com> > Cc: Lukas Bulwahn <lukas.bulwahn@gmail.com> > Cc: Gustavo A. R. Silva <gustavoars@kernel.org> > Fixed-by: Joe Perches <joe@perches.com> > Signed-off-by: Kees Cook <keescook@chromium.org>
Acked-by: Gustavo A. R. Silva <gustavoars@kernel.org>
Thanks! -- Gustavo
> Link: https://lore.kernel.org/r/20230517204530.never.151-kees@kernel.org > --- > v3: > - Switch to ERROR from WARN > - drop needless struct/union/enum prefix (joe) > - fix $fixed regs (joe) > v2: https://lore.kernel.org/lkml/20230526173921.gonna.349-kees@kernel.org > v1: https://lore.kernel.org/lkml/20230517204530.never.151-kees@kernel.org > --- > scripts/checkpatch.pl | 15 +++++++++++++++ > 1 file changed, 15 insertions(+) > > diff --git a/scripts/checkpatch.pl b/scripts/checkpatch.pl > index 30b0b4fdb3bf..5307c85b93d8 100755 > --- a/scripts/checkpatch.pl > +++ b/scripts/checkpatch.pl > @@ -7430,6 +7430,21 @@ sub process { > } > } > > +# check for array definition/declarations that should use flexible arrays instead > + if ($sline =~ /^[\+ ]\s*}\s*;\s*$/ && > + $prevline =~ /^\+\s*(?:\}|$Type)\s*$Ident\s*\[\s*(0|1)\s*\]\s*;\s*$/) { > + if ($1 == '0') { > + if (ERROR("ZERO_LENGTH_ARRAY", > + "Use C99 flexible arrays instead of zero-length arrays - see https://github.com/KSPP/linux/issues/78\n" . $hereprev) && > + $fix) { > + $fixed[$fixlinenr - 1] =~ s/\[\s*0\s*\]/[]/; > + } > + } else { > + ERROR("ONE_ELEMENT_ARRAY", > + "Use C99 flexible arrays instead of one-element arrays - see https://github.com/KSPP/linux/issues/79\n" . $hereprev); > + } > + } > + > # nested likely/unlikely calls > if ($line =~ /\b(?:(?:un)?likely)\s*\(\s*!?\s*(IS_ERR(?:_OR_NULL|_VALUE)?|WARN)/) { > WARN("LIKELY_MISUSE", > -- > 2.34.1 >
| |