mirror of
https://github.com/Dasharo/linux.git
synced 2026-03-06 15:25:10 -08:00
Merge tag 'hardening-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux
Pull hardening updates from Kees Cook: "There are three areas of note: A bunch of strlcpy()->strscpy() conversions ended up living in my tree since they were either Acked by maintainers for me to carry, or got ignored for multiple weeks (and were trivial changes). The compiler option '-fstrict-flex-arrays=3' has been enabled globally, and has been in -next for the entire devel cycle. This changes compiler diagnostics (though mainly just -Warray-bounds which is disabled) and potential UBSAN_BOUNDS and FORTIFY _warning_ coverage. In other words, there are no new restrictions, just potentially new warnings. Any new FORTIFY warnings we've seen have been fixed (usually in their respective subsystem trees). For more details, see commitdf8fc4e934. The under-development compiler attribute __counted_by has been added so that we can start annotating flexible array members with their associated structure member that tracks the count of flexible array elements at run-time. It is possible (likely?) that the exact syntax of the attribute will change before it is finalized, but GCC and Clang are working together to sort it out. Any changes can be made to the macro while we continue to add annotations. As an example of that last case, I have a treewide commit waiting with such annotations found via Coccinelle: https://git.kernel.org/linus/adc5b3cb48a049563dc673f348eab7b6beba8a9b Also see commitdd06e72e68for more details. Summary: - Fix KMSAN vs FORTIFY in strlcpy/strlcat (Alexander Potapenko) - Convert strreplace() to return string start (Andy Shevchenko) - Flexible array conversions (Arnd Bergmann, Wyes Karny, Kees Cook) - Add missing function prototypes seen with W=1 (Arnd Bergmann) - Fix strscpy() kerndoc typo (Arne Welzel) - Replace strlcpy() with strscpy() across many subsystems which were either Acked by respective maintainers or were trivial changes that went ignored for multiple weeks (Azeem Shaikh) - Remove unneeded cc-option test for UBSAN_TRAP (Nick Desaulniers) - Add KUnit tests for strcat()-family - Enable KUnit tests of FORTIFY wrappers under UML - Add more complete FORTIFY protections for strlcat() - Add missed disabling of FORTIFY for all arch purgatories. - Enable -fstrict-flex-arrays=3 globally - Tightening UBSAN_BOUNDS when using GCC - Improve checkpatch to check for strcpy, strncpy, and fake flex arrays - Improve use of const variables in FORTIFY - Add requested struct_size_t() helper for types not pointers - Add __counted_by macro for annotating flexible array size members" * tag 'hardening-v6.5-rc1' of git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux: (54 commits) netfilter: ipset: Replace strlcpy with strscpy uml: Replace strlcpy with strscpy um: Use HOST_DIR for mrproper kallsyms: Replace all non-returning strlcpy with strscpy sh: Replace all non-returning strlcpy with strscpy of/flattree: Replace all non-returning strlcpy with strscpy sparc64: Replace all non-returning strlcpy with strscpy Hexagon: Replace all non-returning strlcpy with strscpy kobject: Use return value of strreplace() lib/string_helpers: Change returned value of the strreplace() jbd2: Avoid printing outside the boundary of the buffer checkpatch: Check for 0-length and 1-element arrays riscv/purgatory: Do not use fortified string functions s390/purgatory: Do not use fortified string functions x86/purgatory: Do not use fortified string functions acpi: Replace struct acpi_table_slit 1-element array with flex-array clocksource: Replace all non-returning strlcpy with strscpy string: use __builtin_memcpy() in strlcpy/strlcat staging: most: Replace all non-returning strlcpy with strscpy drm/i2c: tda998x: Replace all non-returning strlcpy with strscpy ...
This commit is contained in:
@@ -196,7 +196,7 @@ information and return operation results::
|
||||
struct args_ismountpoint ismountpoint;
|
||||
};
|
||||
|
||||
char path[0];
|
||||
char path[];
|
||||
};
|
||||
|
||||
The ioctlfd field is a mount point file descriptor of an autofs mount
|
||||
|
||||
@@ -467,7 +467,7 @@ Each ioctl is passed a pointer to an `autofs_dev_ioctl` structure::
|
||||
struct args_ismountpoint ismountpoint;
|
||||
};
|
||||
|
||||
char path[0];
|
||||
char path[];
|
||||
};
|
||||
|
||||
For the **OPEN_MOUNT** and **IS_MOUNTPOINT** commands, the target
|
||||
|
||||
@@ -8099,6 +8099,7 @@ T: git git://git.kernel.org/pub/scm/linux/kernel/git/kees/linux.git for-next/har
|
||||
F: include/linux/fortify-string.h
|
||||
F: lib/fortify_kunit.c
|
||||
F: lib/memcpy_kunit.c
|
||||
F: lib/strcat_kunit.c
|
||||
F: lib/strscpy_kunit.c
|
||||
F: lib/test_fortify/*
|
||||
F: scripts/test_fortify.sh
|
||||
|
||||
6
Makefile
6
Makefile
@@ -1026,6 +1026,12 @@ KBUILD_CFLAGS += -Wno-pointer-sign
|
||||
# globally built with -Wcast-function-type.
|
||||
KBUILD_CFLAGS += $(call cc-option, -Wcast-function-type)
|
||||
|
||||
# To gain proper coverage for CONFIG_UBSAN_BOUNDS and CONFIG_FORTIFY_SOURCE,
|
||||
# the kernel uses only C99 flexible arrays for dynamically sized trailing
|
||||
# arrays. Enforce this for everything that may examine structure sizes and
|
||||
# perform bounds checking.
|
||||
KBUILD_CFLAGS += $(call cc-option, -fstrict-flex-arrays=3)
|
||||
|
||||
# disable stringop warnings in gcc 8+
|
||||
KBUILD_CFLAGS += $(call cc-disable-warning, stringop-truncation)
|
||||
|
||||
|
||||
@@ -66,9 +66,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
on_simulator = 0;
|
||||
|
||||
if (p[0] != '\0')
|
||||
strlcpy(boot_command_line, p, COMMAND_LINE_SIZE);
|
||||
strscpy(boot_command_line, p, COMMAND_LINE_SIZE);
|
||||
else
|
||||
strlcpy(boot_command_line, default_command_line,
|
||||
strscpy(boot_command_line, default_command_line,
|
||||
COMMAND_LINE_SIZE);
|
||||
|
||||
/*
|
||||
@@ -76,7 +76,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
* are both picked up by the init code. If no reason to
|
||||
* make them different, pass the same pointer back.
|
||||
*/
|
||||
strlcpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE);
|
||||
strscpy(cmd_line, boot_command_line, COMMAND_LINE_SIZE);
|
||||
*cmdline_p = cmd_line;
|
||||
|
||||
parse_early_param();
|
||||
|
||||
@@ -20,7 +20,7 @@ void __init early_init_devtree(void *params)
|
||||
|
||||
early_init_dt_scan(params);
|
||||
if (!strlen(boot_command_line))
|
||||
strlcpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE);
|
||||
strscpy(boot_command_line, cmd_line, COMMAND_LINE_SIZE);
|
||||
|
||||
memblock_allow_resize();
|
||||
|
||||
|
||||
@@ -31,7 +31,7 @@ $(obj)/strncmp.o: $(srctree)/arch/riscv/lib/strncmp.S FORCE
|
||||
$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
|
||||
$(call if_changed_rule,cc_o_c)
|
||||
|
||||
CFLAGS_sha256.o := -D__DISABLE_EXPORTS
|
||||
CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
|
||||
CFLAGS_string.o := -D__DISABLE_EXPORTS
|
||||
CFLAGS_ctype.o := -D__DISABLE_EXPORTS
|
||||
|
||||
|
||||
@@ -10,7 +10,7 @@ PURGATORY_OBJS = $(addprefix $(obj)/,$(purgatory-y))
|
||||
$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
|
||||
$(call if_changed_rule,cc_o_c)
|
||||
|
||||
CFLAGS_sha256.o := -D__DISABLE_EXPORTS
|
||||
CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
|
||||
|
||||
$(obj)/mem.o: $(srctree)/arch/s390/lib/mem.S FORCE
|
||||
$(call if_changed_rule,as_o_S)
|
||||
|
||||
@@ -198,7 +198,7 @@ int request_dma(unsigned int chan, const char *dev_id)
|
||||
if (atomic_xchg(&channel->busy, 1))
|
||||
return -EBUSY;
|
||||
|
||||
strlcpy(channel->dev_id, dev_id, sizeof(channel->dev_id));
|
||||
strscpy(channel->dev_id, dev_id, sizeof(channel->dev_id));
|
||||
|
||||
if (info->ops->request) {
|
||||
result = info->ops->request(channel);
|
||||
|
||||
@@ -305,9 +305,9 @@ void __init setup_arch(char **cmdline_p)
|
||||
bss_resource.end = virt_to_phys(__bss_stop)-1;
|
||||
|
||||
#ifdef CONFIG_CMDLINE_OVERWRITE
|
||||
strlcpy(command_line, CONFIG_CMDLINE, sizeof(command_line));
|
||||
strscpy(command_line, CONFIG_CMDLINE, sizeof(command_line));
|
||||
#else
|
||||
strlcpy(command_line, COMMAND_LINE, sizeof(command_line));
|
||||
strscpy(command_line, COMMAND_LINE, sizeof(command_line));
|
||||
#ifdef CONFIG_CMDLINE_EXTEND
|
||||
strlcat(command_line, " ", sizeof(command_line));
|
||||
strlcat(command_line, CONFIG_CMDLINE, sizeof(command_line));
|
||||
|
||||
@@ -191,7 +191,7 @@ static void __iomem *_sparc_alloc_io(unsigned int busno, unsigned long phys,
|
||||
tack += sizeof (struct resource);
|
||||
}
|
||||
|
||||
strlcpy(tack, name, XNMLN+1);
|
||||
strscpy(tack, name, XNMLN+1);
|
||||
res->name = tack;
|
||||
|
||||
va = _sparc_ioremap(res, busno, phys, size);
|
||||
|
||||
@@ -302,7 +302,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
|
||||
/* Initialize PROM console and command line. */
|
||||
*cmdline_p = prom_getbootargs();
|
||||
strlcpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);
|
||||
strscpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);
|
||||
parse_early_param();
|
||||
|
||||
boot_flags_init(*cmdline_p);
|
||||
|
||||
@@ -636,7 +636,7 @@ void __init setup_arch(char **cmdline_p)
|
||||
{
|
||||
/* Initialize PROM console and command line. */
|
||||
*cmdline_p = prom_getbootargs();
|
||||
strlcpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);
|
||||
strscpy(boot_command_line, *cmdline_p, COMMAND_LINE_SIZE);
|
||||
parse_early_param();
|
||||
|
||||
boot_flags_init(*cmdline_p);
|
||||
|
||||
@@ -52,7 +52,7 @@ prom_getbootargs(void)
|
||||
* V3 PROM cannot supply as with more than 128 bytes
|
||||
* of an argument. But a smart bootstrap loader can.
|
||||
*/
|
||||
strlcpy(barg_buf, *romvec->pv_v2bootargs.bootargs, sizeof(barg_buf));
|
||||
strscpy(barg_buf, *romvec->pv_v2bootargs.bootargs, sizeof(barg_buf));
|
||||
break;
|
||||
default:
|
||||
break;
|
||||
|
||||
@@ -149,7 +149,7 @@ export CFLAGS_vmlinux := $(LINK-y) $(LINK_WRAPS) $(LD_FLAGS_CMDLINE) $(CC_FLAGS_
|
||||
# When cleaning we don't include .config, so we don't include
|
||||
# TT or skas makefiles and don't clean skas_ptregs.h.
|
||||
CLEAN_FILES += linux x.i gmon.out
|
||||
MRPROPER_FILES += arch/$(SUBARCH)/include/generated
|
||||
MRPROPER_FILES += $(HOST_DIR)/include/generated
|
||||
|
||||
archclean:
|
||||
@find . \( -name '*.bb' -o -name '*.bbg' -o -name '*.da' \
|
||||
|
||||
@@ -52,6 +52,7 @@ static inline int printk(const char *fmt, ...)
|
||||
extern int in_aton(char *str);
|
||||
extern size_t strlcpy(char *, const char *, size_t);
|
||||
extern size_t strlcat(char *, const char *, size_t);
|
||||
extern size_t strscpy(char *, const char *, size_t);
|
||||
|
||||
/* Copied from linux/compiler-gcc.h since we can't include it directly */
|
||||
#define barrier() __asm__ __volatile__("": : :"memory")
|
||||
|
||||
@@ -146,7 +146,7 @@ static int tuntap_open(void *data)
|
||||
}
|
||||
memset(&ifr, 0, sizeof(ifr));
|
||||
ifr.ifr_flags = IFF_TAP | IFF_NO_PI;
|
||||
strlcpy(ifr.ifr_name, pri->dev_name, sizeof(ifr.ifr_name));
|
||||
strscpy(ifr.ifr_name, pri->dev_name, sizeof(ifr.ifr_name));
|
||||
if (ioctl(pri->fd, TUNSETIFF, &ifr) < 0) {
|
||||
err = -errno;
|
||||
printk(UM_KERN_ERR "TUNSETIFF failed, errno = %d\n",
|
||||
|
||||
@@ -12,7 +12,7 @@ $(obj)/string.o: $(srctree)/arch/x86/boot/compressed/string.c FORCE
|
||||
$(obj)/sha256.o: $(srctree)/lib/crypto/sha256.c FORCE
|
||||
$(call if_changed_rule,cc_o_c)
|
||||
|
||||
CFLAGS_sha256.o := -D__DISABLE_EXPORTS
|
||||
CFLAGS_sha256.o := -D__DISABLE_EXPORTS -D__NO_FORTIFY
|
||||
|
||||
# When profile-guided optimization is enabled, llvm emits two different
|
||||
# overlapping text sections, which is not supported by kexec. Remove profile
|
||||
|
||||
@@ -1509,7 +1509,7 @@ struct atom_context *amdgpu_atom_parse(struct card_info *card, void *bios)
|
||||
str = CSTR(idx);
|
||||
if (*str != '\0') {
|
||||
pr_info("ATOM BIOS: %s\n", str);
|
||||
strlcpy(ctx->vbios_version, str, sizeof(ctx->vbios_version));
|
||||
strscpy(ctx->vbios_version, str, sizeof(ctx->vbios_version));
|
||||
}
|
||||
|
||||
atom_rom_header = (struct _ATOM_ROM_HEADER *)CSTR(base);
|
||||
|
||||
@@ -794,7 +794,7 @@ void amdgpu_add_thermal_controller(struct amdgpu_device *adev)
|
||||
struct i2c_board_info info = { };
|
||||
const char *name = pp_lib_thermal_controller_names[controller->ucType];
|
||||
info.addr = controller->ucI2cAddress >> 1;
|
||||
strlcpy(info.type, name, sizeof(info.type));
|
||||
strscpy(info.type, name, sizeof(info.type));
|
||||
i2c_new_client_device(&adev->pm.i2c_bus->adapter, &info);
|
||||
}
|
||||
} else {
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user