0c7abaf23f
commit aeb84412037b89e06f45e382f044da6f200e12f8 upstream. GCC 11 (incorrectly[1]) assumes that literal values cast to (void *) should be treated like a NULL pointer with an offset, and raises diagnostics when doing bounds checking under -Warray-bounds. GCC 12 got "smarter" about finding these: In function 'rdfs8', inlined from 'vga_recalc_vertical' at /srv/code/arch/x86/boot/video-mode.c:124:29, inlined from 'set_mode' at /srv/code/arch/x86/boot/video-mode.c:163:3: /srv/code/arch/x86/boot/boot.h:114:9: warning: array subscript 0 is outside array bounds of 'u8[0]' {aka 'unsigned char[]'} [-Warray-bounds] 114 | asm volatile("movb %%fs:%1,%0" : "=q" (v) : "m" (*(u8 *)addr)); | ^~~ This has been solved in other places[2] already by using the recently added absolute_pointer() macro. Do the same here. [1] https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99578 [2] https://lore.kernel.org/all/20210912160149.2227137-1-linux@roeck-us.net/ Signed-off-by: Kees Cook <keescook@chromium.org> Signed-off-by: Borislav Petkov <bp@suse.de> Reviewed-by: Guenter Roeck <linux@roeck-us.net> Link: https://lore.kernel.org/r/20220227195918.705219-1-keescook@chromium.org Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
||
---|---|---|
.. | ||
compressed | ||
tools | ||
.gitignore | ||
a20.c | ||
apm.c | ||
bioscall.S | ||
bitops.h | ||
boot.h | ||
cmdline.c | ||
code16gcc.h | ||
copy.S | ||
cpu.c | ||
cpucheck.c | ||
cpuflags.c | ||
cpuflags.h | ||
ctype.h | ||
early_serial_console.c | ||
edd.c | ||
genimage.sh | ||
header.S | ||
install.sh | ||
main.c | ||
Makefile | ||
memory.c | ||
mkcpustr.c | ||
mtools.conf.in | ||
pm.c | ||
pmjump.S | ||
printf.c | ||
regs.c | ||
setup.ld | ||
string.c | ||
string.h | ||
tty.c | ||
version.c | ||
vesa.h | ||
video-bios.c | ||
video-mode.c | ||
video-vesa.c | ||
video-vga.c | ||
video.c | ||
video.h |