Re: Build regressions/improvements in v6.2-rc4

From: Guenter Roeck
Date: Tue Jan 17 2023 - 04:10:11 EST


On 1/17/23 00:57, Heiko Carstens wrote:
On Mon, Jan 16, 2023 at 10:41:27AM -0800, Guenter Roeck wrote:
On Mon, Jan 16, 2023 at 05:40:00PM +0100, Heiko Carstens wrote:
On Mon, Jan 16, 2023 at 01:36:34PM +0100, Geert Uytterhoeven wrote:
On Mon, 16 Jan 2023, Geert Uytterhoeven wrote:
JFYI, when comparing v6.2-rc4[1] to v6.2-rc3-8-g1fe4fd6f5cad346e[3], the summaries are:
- build errors: +1/-5

+ /kisskb/src/include/linux/fortify-string.h: error: '__builtin_memcpy' reading 128 bytes from a region of size 0 [-Werror=stringop-overread]: => 57:33

s390x-gcc11/s390-allmodconfig

/kisskb/src/arch/s390/kernel/setup.c: In function 'setup_lowcore_dat_on':
/kisskb/src/include/linux/fortify-string.h:57:33: error: '__builtin_memcpy' reading 128 bytes from a region of size 0 [-Werror=stringop-overread]
57 | #define __underlying_memcpy __builtin_memcpy
| ^
/kisskb/src/include/linux/fortify-string.h:578:9: note: in expansion of macro '__underlying_memcpy'
578 | __underlying_##op(p, q, __fortify_size); \
| ^~~~~~~~~~~~~
/kisskb/src/include/linux/fortify-string.h:623:26: note: in expansion of macro '__fortify_memcpy_chk'
623 | #define memcpy(p, q, s) __fortify_memcpy_chk(p, q, s, \
| ^~~~~~~~~~~~~~~~~~~~
/kisskb/src/arch/s390/kernel/setup.c:526:9: note: in expansion of macro 'memcpy'
526 | memcpy(abs_lc->cregs_save_area, S390_lowcore.cregs_save_area,
| ^~~~~~

Looks like this was "'__builtin_memcpy' offset [0, 127] is out of the bounds
[0, 0]" before.

Thanks for reporting. Of course this doesn't happen with gcc-12, and
this code will be rewritten with the next merge window anyway.
But to workaround this with gcc-11, we could go with the below:


This is because of

#define S390_lowcore (*((struct lowcore *) 0))

and is fixed with something like

#define S390_lowcore (*((struct lowcore *) absolute_pointer(0)))

See commit f6b5f1a56987 ("compiler.h: Introduce absolute_pointer macro").

Yes, I'm aware of that. However absolute_pointer() is not an option for
S390_lowcore. See also commit f0be87c42cbd ("gcc-12: disable
'-Warray-bounds' universally for now") and the referenced s390 commit.


Interesting. It works (builds) just fine for me after the above suggested
change.

Guenter

The problem is only seen with gcc 11.2. I don't see it with 11.3 or 12.2.

FWIW, the compile warning is seen with gcc 11.1 and 11.2, but not with any
other compiler. Given that this isn't the first report, I'm tempted to
workaround this now.