[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20241225153343.134590-1-masahiroy@kernel.org>
Date: Thu, 26 Dec 2024 00:33:34 +0900
From: Masahiro Yamada <masahiroy@...nel.org>
To: linux-kbuild@...r.kernel.org
Cc: linux-arm-kernel@...ts.infradead.org,
linux-kernel@...r.kernel.org,
Masahiro Yamada <masahiroy@...nel.org>,
Greg Kroah-Hartman <gregkh@...e.de>,
Nathan Chancellor <nathan@...nel.org>,
Nicolas Schier <nicolas@...sle.eu>,
Rusty Russell <rusty@...tcorp.com.au>
Subject: [PATCH 0/3] modpost: work around unaligned data access
The latest binutils stopped aligning section data in relocatable ELF.
It saves small number of bytes that were previously inserted between
sections. However, modpost crashes due to unaligned access:
https://sourceware.org/bugzilla/show_bug.cgi?id=32435
https://sourceware.org/bugzilla/show_bug.cgi?id=32493
Similar to kernel space, unaligned data access in userspace can be
problematic on some architectures.
Simple example on ARM:
$ CC=arm-linux-gnueabihf-gcc
$ echo 'int foo(int *p) { return *p + *(p + 1); }' | ${CC} -O2 -x c - -c -o foo.o
$ echo 'int foo(int *p); int main(void) { char str[16] = "helloworld"; return foo((int *)(str + 1)); }' | ${CC} -x c - -c -o main.o
$ ${CC} -static -o unalign-test main.o foo.o
$ qemu-armhf unalign-test
qemu: uncaught target signal 7 (Bus error) - core dumped
Bus error (core dumped)
In this case, the 'ldrd' instruction causes a bus error due to an
unaligned access. If the -O2 flag is omitted, this issue does not occur.
To avoid potential unaligned access, use the get_unaligned() approach
as seen in the kernel space.
Masahiro Yamada (3):
modpost: fix the missed iteration for the max bit in do_input()
modpost: refactor do_vmbus_entry()
modpost: work around unaligned data access error
scripts/mod/file2alias.c | 36 +++++++++++++++++-------------------
scripts/mod/modpost.c | 24 ++++++++++++------------
scripts/mod/modpost.h | 14 ++++++++++++++
3 files changed, 43 insertions(+), 31 deletions(-)
--
2.43.0
Powered by blists - more mailing lists