lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <42e0adf2-dbf5-9c1b-a18d-05bf5f1960a1@arm.com>
Date:   Thu, 4 Mar 2021 16:21:40 +0000
From:   Vladimir Murzin <vladimir.murzin@....com>
To:     linux-kernel@...r.kernel.org, linux-kbuild@...r.kernel.org
Cc:     Michal Marek <michal.lkml@...kovi.net>,
        Masahiro Yamada <masahiroy@...nel.org>,
        Vladimir Murzin <Vladimir.Murzin@....com>, arnd@...db.de
Subject: Possible regression due to 269a535ca931 "modpost: generate
 vmlinux.symvers and reuse it for the second modpost"

Hi,

Recently, I had to dig awkward build issue for external module (originally with ARCH=arm)
like

MODPOST module/path/Module.symvers
ERROR: modpost: "__put_user_1" [module/path/name.ko] undefined!
ERROR: modpost: "__aeabi_unwind_cpp_pr0" [/module/path/name.ko] undefined!

and it looks like it is happening due to

269a535ca931 "modpost: generate vmlinux.symvers and reuse it for the second modpost"

Here is result of my investigation (with ARCH=arm64)

$ git describe
v5.7-rc5-72-g269a535
# Start with clean build
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 mrproper
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 defconfig
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 -j5 > /dev/null
$ cp vmlinux.symvers vmlinux.symvers.defconfig
$ cp Module.symvers Module.symvers.defconfig
# Alter configuration
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 allnoconfig
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 -j5 > /dev/null
$ cp vmlinux.symvers vmlinux.symvers.allnoconfig
$ cp Module.symvers Module.symvers.allnoconfig
$ diff vmlinux.symvers.defconfig vmlinux.symvers.allnoconfig > /dev/null
$ echo $?
1
$ diff Module.symvers.defconfig Module.symvers.allnoconfig > /dev/null
$ echo $?
0

So, Module.sysver not reflecting changes in configuration, yet IIUC it
it supposed to include vmlinux.symvers

If you are lucky enough with stale Module.symver there is a chance to
fail build of external module in very awkward way

Obviously

$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 mrproper
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 allnoconfig
$ ls *.symvers
vmlinux.symvers

With that external module build would splat

WARNING: Symbol version dump "Module.symvers" is missing.
         Modules may not have dependencies or modversions.

Also, there are several reports on user forums describing
symptoms which could be due to the issue, with workarounds
like "enable random in-tree module" or/and "create empty
Module.symvers"

One commit before 269a535ca931 "modpost: generate vmlinux.symvers and reuse it for the second modpost"

$ git describe
v5.7-rc5-71-gf1005b3
# Start with clean build
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 mrproper
# Build defconfig
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 defconfig
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 -j5 > /dev/null
$ cp Module.symvers Module.symvers.defconfig
# Alter configuration
$ CROSS_COMPILE=make ARCH=arm64 allnoconfig
$ cp Module.symvers Module.symvers.allnoconfig
$ diff Module.symvers.defconfig Module.symvers.allnoconfig > /dev/null
$ echo $?
1

As you can see Module.symvers gets updated

$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 mrproper
$ CROSS_COMPILE=aarch64-none-linux-gnu- make ARCH=arm64 allnoconfig
$ CROSS_COMPILE=make ARCH=arm64 -j5 > /dev/null
$ ls *.symvers
Module.symvers

As you can see Modeule.symver gets created

Does that make sense? What I'm missing?

P.S.
I've also checked v5.12-rc1 and see the same symptoms

Cheers
Vladimir

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ