[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <X8pBjbZlbaWaOFxe@localhost>
Date: Fri, 4 Dec 2020 15:02:53 +0100
From: Johan Hovold <johan@...nel.org>
To: Rob Herring <robh+dt@...nel.org>,
Greg Kroah-Hartman <gregkh@...uxfoundation.org>,
Jessica Yu <jeyu@...nel.org>,
Linus Torvalds <torvalds@...ux-foundation.org>
Cc: Frank Rowand <frowand.list@...il.com>,
Arnd Bergmann <arnd@...db.de>,
Geert Uytterhoeven <geert@...ux-m68k.org>,
Dmitry Torokhov <dmitry.torokhov@...il.com>,
David Miller <davem@...emloft.net>,
Jakub Jelinek <jakub@...hat.com>,
Peter Zijlstra <peterz@...radead.org>,
Thomas Gleixner <tglx@...utronix.de>,
Steven Rostedt <rostedt@...dmis.org>,
Daniel Kurtz <djkurtz@...omium.org>,
linux-arch@...r.kernel.org, linux-m68k@...ts.linux-m68k.org,
linux-kernel@...r.kernel.org, Johan Hovold <johan@...nel.org>,
stable <stable@...r.kernel.org>
Subject: Re: [PATCH v2 1/8] of: fix linker-section match-table corruption
Rob,
On Mon, Nov 23, 2020 at 11:23:12AM +0100, Johan Hovold wrote:
> Specify type alignment when declaring linker-section match-table entries
> to prevent gcc from increasing alignment and corrupting the various
> tables with padding (e.g. timers, irqchips, clocks, reserved memory).
>
> This is specifically needed on x86 where gcc (typically) aligns larger
> objects like struct of_device_id with static extent on 32-byte
> boundaries which at best prevents matching on anything but the first
> entry. Specifying alignment when declaring variables suppresses this
> optimisation.
>
> Here's a 64-bit example where all entries are corrupt as 16 bytes of
> padding has been inserted before the first entry:
>
> ffffffff8266b4b0 D __clk_of_table
> ffffffff8266b4c0 d __of_table_fixed_factor_clk
> ffffffff8266b5a0 d __of_table_fixed_clk
> ffffffff8266b680 d __clk_of_table_sentinel
>
> And here's a 32-bit example where the 8-byte-aligned table happens to be
> placed on a 32-byte boundary so that all but the first entry are corrupt
> due to the 28 bytes of padding inserted between entries:
>
> 812b3ec0 D __irqchip_of_table
> 812b3ec0 d __of_table_irqchip1
> 812b3fa0 d __of_table_irqchip2
> 812b4080 d __of_table_irqchip3
> 812b4160 d irqchip_of_match_end
>
> Verified on x86 using gcc-9.3 and gcc-4.9 (which uses 64-byte
> alignment), and on arm using gcc-7.2.
>
> Note that there are no in-tree users of these tables on x86 currently
> (even if they are included in the image).
>
> Fixes: 54196ccbe0ba ("of: consolidate linker section OF match table declarations")
> Fixes: f6e916b82022 ("irqchip: add basic infrastructure")
> Cc: stable <stable@...r.kernel.org> # 3.9
> Signed-off-by: Johan Hovold <johan@...nel.org>
> ---
Could you pick this one up for 5.11?
Johan
Powered by blists - more mailing lists