Hi, On Sun, 2024-01-21 at 20:54 +0100, Mark Wielaard wrote: > GCC 14 notices we play some tricks with the array into which we try > to read the kernel image header. > > image-header.c: In function ‘__libdw_image_header’: > image-header.c:77:18: error: array subscript -496 is outside array bounds of > ‘char[96]’ [-Werror=array-bounds=] > 77 | header = header_buffer - H_START; > | ^ > image-header.c:67:12: note: at offset -496 into object ‘header_buffer’ of > size 96 > 67 | char header_buffer[H_READ_SIZE]; > | ^~~~~~~~~~~~~ > > GCC is correct. The new header pointer is before the actually buffer we > want to read from. Later in the code we "correct" the address again by > adding the "offset" off the elements we want to read. Such pointer > arithmetic is technically invalid. Make it valid by making the buffer > a little bigger, so all pointer arithmetic stays inside the header_buffer. > This does waste 496 bytes on the stack at the front of the buffer that > is never used. > > * libdwfl/image-header.c (__libdw_image_header): Add H_START > to header_buffer size and return
Pushed after briefly discussing with Aaron on irc. Cheers, Mark