diff options
| author | Masahiro Yamada <[email protected]> | 2024-12-25 15:33:37 +0000 |
|---|---|---|
| committer | Masahiro Yamada <[email protected]> | 2024-12-28 14:31:09 +0000 |
| commit | 8fe1a63d3d99d86f1bdc034505aad6fc70424737 (patch) | |
| tree | b21803dee7aff501a86e6be194c1812ac3178b14 /drivers/firmware/psci/psci.c | |
| parent | modpost: refactor do_vmbus_entry() (diff) | |
| download | kernel-8fe1a63d3d99d86f1bdc034505aad6fc70424737.tar.gz kernel-8fe1a63d3d99d86f1bdc034505aad6fc70424737.zip | |
modpost: work around unaligned data access error
With the latest binutils, modpost fails with a bus error on some
architectures such as ARM and sparc64.
Since binutils commit 1f1b5e506bf0 ("bfd/ELF: restrict file alignment
for object files"), the byte offset to each section (sh_offset) in
relocatable ELF is no longer guaranteed to be aligned.
modpost parses MODULE_DEVICE_TABLE() data structures, which are usually
located in the .rodata section. If it is not properly aligned, unaligned
access errors may occur.
To address the issue, this commit imports the get_unaligned() helper
from include/linux/unaligned.h.
The get_unaligned_native() helper caters to the endianness in addition
to handling the unaligned access.
I slightly refactored do_pcmcia_entry() and do_input() to avoid writing
back to an unaligned address. (We would need the put_unaligned() helper
to do that.)
The addend_*_rel() functions need similar adjustments because the .text
sections are not aligned either.
It seems that the .symtab, .rel.* and .rela.* sections are still aligned.
Keep normal pointer access for these sections to avoid unnecessary
performance costs.
Reported-by: Paulo Pisati <[email protected]>
Reported-by: Matthias Klose <[email protected]>
Closes: https://sourceware.org/bugzilla/show_bug.cgi?id=32435
Reported-by: John Paul Adrian Glaubitz <[email protected]>
Closes: https://sourceware.org/bugzilla/show_bug.cgi?id=32493
Signed-off-by: Masahiro Yamada <[email protected]>
Tested-by: John Paul Adrian Glaubitz <[email protected]>
Diffstat (limited to 'drivers/firmware/psci/psci.c')
0 files changed, 0 insertions, 0 deletions
