modpost: fix null pointer dereference
authorMax Kellermann <max.kellermann@ionos.com>
Thu, 15 Feb 2024 14:13:21 +0000 (15:13 +0100)
committerMasahiro Yamada <masahiroy@kernel.org>
Mon, 18 Mar 2024 17:30:03 +0000 (02:30 +0900)
If the find_fromsym() call fails and returns NULL, the warn() call
will dereference this NULL pointer and cause the program to crash.

This happened when I tried to build with "test_user_copy" module.
With this fix, it prints lots of warnings like this:

 WARNING: modpost: lib/test_user_copy: section mismatch in reference: (unknown)+0x4 (section: .text.fixup) -> (unknown) (section: .init.text)

masahiroy@kernel.org:
 The issue is reproduced with ARCH=arm allnoconfig + CONFIG_MODULES=y +
 CONFIG_RUNTIME_TESTING_MENU=y + CONFIG_TEST_USER_COPY=m

Signed-off-by: Max Kellermann <max.kellermann@ionos.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/mod/modpost.c

index 267b9a0a3abcd849fe4f0bae4cddd8a287d26184..9106fe7579466938d3c9d40630045c1e83f88f92 100644 (file)
@@ -1050,7 +1050,9 @@ static void default_mismatch_handler(const char *modname, struct elf_info *elf,
        sec_mismatch_count++;
 
        warn("%s: section mismatch in reference: %s+0x%x (section: %s) -> %s (section: %s)\n",
-            modname, fromsym, (unsigned int)(faddr - from->st_value), fromsec, tosym, tosec);
+            modname, fromsym,
+            (unsigned int)(faddr - (from ? from->st_value : 0)),
+            fromsec, tosym, tosec);
 
        if (mismatch->mismatch == EXTABLE_TO_NON_TEXT) {
                if (match(tosec, mismatch->bad_tosec))