kernel_samsung_a53x/scripts
Kees Cook 52cc98d1cb stddef: Introduce DECLARE_FLEX_ARRAY() helper
commit 3080ea5553cc909b000d1f1d964a9041962f2c5b upstream.

There are many places where kernel code wants to have several different
typed trailing flexible arrays. This would normally be done with multiple
flexible arrays in a union, but since GCC and Clang don't (on the surface)
allow this, there have been many open-coded workarounds, usually involving
neighboring 0-element arrays at the end of a structure. For example,
instead of something like this:

struct thing {
	...
	union {
		struct type1 foo[];
		struct type2 bar[];
	};
};

code works around the compiler with:

struct thing {
	...
	struct type1 foo[0];
	struct type2 bar[];
};

Another case is when a flexible array is wanted as the single member
within a struct (which itself is usually in a union). For example, this
would be worked around as:

union many {
	...
	struct {
		struct type3 baz[0];
	};
};

These kinds of work-arounds cause problems with size checks against such
zero-element arrays (for example when building with -Warray-bounds and
-Wzero-length-bounds, and with the coming FORTIFY_SOURCE improvements),
so they must all be converted to "real" flexible arrays, avoiding warnings
like this:

fs/hpfs/anode.c: In function 'hpfs_add_sector_to_btree':
fs/hpfs/anode.c:209:27: warning: array subscript 0 is outside the bounds of an interior zero-length array 'struct bplus_internal_node[0]' [-Wzero-length-bounds]
  209 |    anode->btree.u.internal[0].down = cpu_to_le32(a);
      |    ~~~~~~~~~~~~~~~~~~~~~~~^~~
In file included from fs/hpfs/hpfs_fn.h:26,
                 from fs/hpfs/anode.c:10:
fs/hpfs/hpfs.h:412:32: note: while referencing 'internal'
  412 |     struct bplus_internal_node internal[0]; /* (internal) 2-word entries giving
      |                                ^~~~~~~~

drivers/net/can/usb/etas_es58x/es58x_fd.c: In function 'es58x_fd_tx_can_msg':
drivers/net/can/usb/etas_es58x/es58x_fd.c:360:35: warning: array subscript 65535 is outside the bounds of an interior zero-length array 'u8[0]' {aka 'unsigned char[]'} [-Wzero-length-bounds]
  360 |  tx_can_msg = (typeof(tx_can_msg))&es58x_fd_urb_cmd->raw_msg[msg_len];
      |                                   ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
In file included from drivers/net/can/usb/etas_es58x/es58x_core.h:22,
                 from drivers/net/can/usb/etas_es58x/es58x_fd.c:17:
drivers/net/can/usb/etas_es58x/es58x_fd.h:231:6: note: while referencing 'raw_msg'
  231 |   u8 raw_msg[0];
      |      ^~~~~~~

However, it _is_ entirely possible to have one or more flexible arrays
in a struct or union: it just has to be in another struct. And since it
cannot be alone in a struct, such a struct must have at least 1 other
named member -- but that member can be zero sized. Wrap all this nonsense
into the new DECLARE_FLEX_ARRAY() in support of having flexible arrays
in unions (or alone in a struct).

As with struct_group(), since this is needed in UAPI headers as well,
implement the core there, with a non-UAPI wrapper.

Additionally update kernel-doc to understand its existence.

https://github.com/KSPP/linux/issues/137

Cc: Arnd Bergmann <arnd@arndb.de>
Cc: "Gustavo A. R. Silva" <gustavoars@kernel.org>
Signed-off-by: Kees Cook <keescook@chromium.org>
Signed-off-by: Vasiliy Kovalev <kovalev@altlinux.org>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
2024-11-18 12:12:59 +01:00
..
atomic Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
basic Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
clang-tools Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
coccinelle Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
crypto Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dtc Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dummy-tools Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
fmp Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gcc-plugins randstruct: Fix gcc-plugin performance mode to stay in group 2024-11-18 11:43:20 +01:00
gdb Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
genksyms Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kconfig kconfig: fix memory leak from range properties 2024-11-18 12:11:26 +01:00
ksymoops Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
lego Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mod modpost: fix tee MODULE_DEVICE_TABLE built on big-endian host 2024-11-18 11:43:06 +01:00
package Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
selinux Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tracing Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
adjust_autoksyms.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
as-version.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
asn1_compiler.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bin2c.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bloat-o-meter Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bootgraph.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
bpf_helpers_doc.py Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cc-can-link.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
check-sysctl-docs Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
check_extable.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
checkincludes.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
checkkconfigsymbols.py Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
checkpatch.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
checkstack.pl checkstack: fix printed address 2024-11-18 12:11:41 +01:00
checksyscalls.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
checkversion.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
clang-version.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cleanfile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
cleanpatch Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
coccicheck Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
config Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
const_structs.checkpatch Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
decode_stacktrace.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
decodecode Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
depmod.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
dev-needs.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
diffconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
documentation-file-ref-check Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
export_report.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
extract-cert.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
extract-ikconfig Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
extract-module-sig.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
extract-sys-certs.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
extract-vmlinux Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
extract_xc3028.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
faddr2line Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
file-size.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
find-unused-docs.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gcc-goto.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gcc-ld Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gcc-version.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gcc-x86_32-has-stack-protector.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gcc-x86_64-has-stack-protector.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gen_autoksyms.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gen_ksymdeps.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
generate_cfi_kallsyms.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
generate_initcall_order.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
get_abi.pl scripts/get_abi: fix source path leak 2024-11-18 12:12:58 +01:00
get_dvb_firmware Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
get_maintainer.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
gfp-translate Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
headerdep.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
headers_check.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
headers_install.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
insert-sys-cert.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
jobserver-exec Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kallsyms.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kbuild.include Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Kconfig.include Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
kernel-doc stddef: Introduce DECLARE_FLEX_ARRAY() helper 2024-11-18 12:12:59 +01:00
ld-version.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
leaking_addresses.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Lindent Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
link-vmlinux.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
lld-version.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.asm-generic Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.build Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.clean Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.dtbinst Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.extrawarn Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.gcc-plugins Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.headersinst Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.host Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.kasan Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.kcov Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.kcsan Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.lib Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.modfinal Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.modinst Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.modpost Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.modsign Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.package Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.ubsan Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
Makefile.userprogs Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
makelst Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
markup_oops.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mkcompile_h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mkmakefile Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mksysmap Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
mkuboot.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
module.lds.S Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
modules-check.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
nsdeps Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
objdiff Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
pahole-flags.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
parse-maintainers.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
patch-kernel Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
profile2linkerlist.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
prune-kernel Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
recordmcount.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
recordmcount.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
recordmcount.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
setlocalversion scripts: Don't append '-dirty' to Kernel name 2024-06-15 16:21:18 -03:00
show_delta Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sign-file.c sign-file: Fix incorrect return values check 2024-11-18 12:11:49 +01:00
sorttable.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sorttable.h Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
spdxcheck-test.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
spdxcheck.py Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
spelling.txt Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
sphinx-pre-install Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
split-man.pl Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
stackdelta Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
stackusage Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
subarch.include Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tags.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
tools-support-relr.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
unifdef.c Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
ver_linux Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xen-hypercalls.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00
xz_wrap.sh Import A536BXXU9EXDC 2024-06-15 16:02:09 -03:00