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

Reply via email to