On 16/03/2025 21:01, Ben Hutchings wrote:
On Sun, 2025-03-16 at 20:21 +0100, Eric Valette wrote:

And yet module loading is going wrong in a way that can't be reproduced
elsewhere.  So please check.

I rather did check after unpacking the initrd as it was needed anyway

kmod binaries are identical

kmod -V (system one)
kmod version 34.1
+ZSTD +XZ -ZLIB +OPENSSL
eric@pink-floyd3:~$ /tmp/cpio3/usr/bin/kmod -V (initrd one)
kmod version 34.1
+ZSTD +XZ -ZLIB +OPENSSL

But I was wondering what lib (via dlopen?), binary or build in code kmod was using to decompress the xz modules. Because unxz binary differ between normal fs and initrd one.

ldd /tmp/cpio3/usr/bin/kmod (paths are wrong but still)
        linux-vdso.so.1 (0x00007ffed0be3000)
libcrypto.so.3 => /lib/x86_64-linux-gnu/libcrypto.so.3 (0x00007faa89400000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007faa8920a000)
        libz.so.1 => /lib/x86_64-linux-gnu/libz.so.1 (0x00007faa899dc000)
libzstd.so.1 => /lib/x86_64-linux-gnu/libzstd.so.1 (0x00007faa89140000)
        /lib64/ld-linux-x86-64.so.2 (0x00007faa89a57000)

ls -l /bin/unxz
lrwxrwxrwx 1 root root 2  1 mars  21:52 /bin/unxz -> xz
ls -l /bin/xz
-rwxr-xr-x 1 root root 92872  1 mars  21:52 /bin/xz

ls -l /tmp/cpio3/usr/bin/unxz
-rwxr-xr-x 269 eric eric 826128  6 oct.  13:30 /tmp/cpio3/usr/bin/unxz

checked manually one module decompression using both, they are identical.

more generally, the modules that exist in the CPIO and the one in the rootfs are identical

diff -q -r /lib/modules/6.6.83 /tmp/cpio2/usr/lib/modules/6.6.83
Seulement dans /lib/modules/6.6.83: build
Seulement dans /lib/modules/6.6.83/kernel/arch/x86/crypto: aesni-intel.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/arch/x86/crypto: crc32-pclmul.ko.xz Seulement dans /lib/modules/6.6.83/kernel/arch/x86/crypto: crct10dif-pclmul.ko.xz Seulement dans /lib/modules/6.6.83/kernel/arch/x86/crypto: ghash-clmulni-intel.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/arch/x86/crypto: sha1-ssse3.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/arch/x86/crypto: sha256-ssse3.ko.xz Seulement dans /lib/modules/6.6.83/kernel/arch/x86/crypto: sha512-ssse3.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/arch/x86: events
Seulement dans /lib/modules/6.6.83/kernel/arch/x86: kernel
Seulement dans /lib/modules/6.6.83/kernel/arch/x86: kvm
Seulement dans /lib/modules/6.6.83/kernel/crypto: af_alg.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: algif_hash.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: algif_skcipher.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: async_tx
Seulement dans /lib/modules/6.6.83/kernel/crypto: ccm.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: cmac.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: cryptd.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: crypto_null.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: crypto_simd.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: ecb.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: ecdh_generic.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: gcm.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: ghash-generic.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/crypto: xor.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers: acpi
Seulement dans /lib/modules/6.6.83/kernel/drivers: base
Seulement dans /lib/modules/6.6.83/kernel/drivers: bluetooth
Seulement dans /lib/modules/6.6.83/kernel/drivers: char
Seulement dans /lib/modules/6.6.83/kernel/drivers: cpufreq
Seulement dans /lib/modules/6.6.83/kernel/drivers: edac
Seulement dans /lib/modules/6.6.83/kernel/drivers: firmware
Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: amd
Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: display
Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: drm_buddy.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: drm_exec.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: drm_kms_helper.ko.xz Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: drm_suballoc_helper.ko.xz Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: drm_ttm_helper.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: scheduler
Seulement dans /lib/modules/6.6.83/kernel/drivers/gpu/drm: ttm
Seulement dans /lib/modules/6.6.83/kernel/drivers: hwmon
Seulement dans /lib/modules/6.6.83/kernel/drivers/i2c: algos
Seulement dans /lib/modules/6.6.83/kernel/drivers/i2c: i2c-mux.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers: infiniband
Seulement dans /lib/modules/6.6.83/kernel/drivers/input: evdev.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/input: joydev.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/input: misc
Seulement dans /lib/modules/6.6.83/kernel/drivers/input: sparse-keymap.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers: leds
Seulement dans /lib/modules/6.6.83/kernel/drivers/md: linear.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/md: md-mod.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/md: multipath.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/md: raid0.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/md: raid10.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/md: raid1.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers/md: raid456.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/drivers: media
Seulement dans /lib/modules/6.6.83/kernel/drivers/net: wireless
Seulement dans /lib/modules/6.6.83/kernel/drivers: parport
Seulement dans /lib/modules/6.6.83/kernel/drivers: platform
Seulement dans /lib/modules/6.6.83/kernel/drivers: powercap
Seulement dans /lib/modules/6.6.83/kernel/fs: autofs
Seulement dans /lib/modules/6.6.83/kernel/fs: binfmt_misc.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/fs: configfs
Seulement dans /lib/modules/6.6.83/kernel/fs: efivarfs
Seulement dans /lib/modules/6.6.83/kernel/fs: exfat
Seulement dans /lib/modules/6.6.83/kernel/fs: fat
Seulement dans /lib/modules/6.6.83/kernel/fs: nls
Seulement dans /lib/modules/6.6.83/kernel/fs: ntfs3
Seulement dans /lib/modules/6.6.83/kernel/fs: squashfs
Seulement dans /lib/modules/6.6.83/kernel: kernel
Seulement dans /lib/modules/6.6.83/kernel/lib: crypto
Seulement dans /lib/modules/6.6.83/kernel/lib: libcrc32c.ko.xz
Seulement dans /lib/modules/6.6.83/kernel/lib: raid6
Seulement dans /lib/modules/6.6.83/kernel/net: bluetooth
Seulement dans /lib/modules/6.6.83/kernel/net: core
Seulement dans /lib/modules/6.6.83/kernel/net: ipv4
Seulement dans /lib/modules/6.6.83/kernel/net: mac80211
Seulement dans /lib/modules/6.6.83/kernel/net: netfilter
Seulement dans /lib/modules/6.6.83/kernel/net: rfkill
Seulement dans /lib/modules/6.6.83/kernel/net: wireless
Seulement dans /lib/modules/6.6.83/kernel: sound
Seulement dans /lib/modules/6.6.83/kernel: virt
Seulement dans /lib/modules/6.6.83: modules.alias
Seulement dans /lib/modules/6.6.83: modules.alias.bin
Seulement dans /lib/modules/6.6.83: modules.builtin
Seulement dans /lib/modules/6.6.83: modules.builtin.alias.bin
Seulement dans /lib/modules/6.6.83: modules.builtin.bin
Seulement dans /lib/modules/6.6.83: modules.builtin.modinfo
Seulement dans /lib/modules/6.6.83: modules.dep
Seulement dans /lib/modules/6.6.83: modules.dep.bin
Seulement dans /lib/modules/6.6.83: modules.devname
Seulement dans /lib/modules/6.6.83: modules.order
Seulement dans /lib/modules/6.6.83: modules.softdep
Seulement dans /lib/modules/6.6.83: modules.symbols
Seulement dans /lib/modules/6.6.83: modules.symbols.bin
Seulement dans /lib/modules/6.6.83: modules.weakdep
Seulement dans /lib/modules/6.6.83: updates

Strangely the "modules." files in initrd are in a diffrent CPIO (CPIO3) than the modules themselves (CPIO2). If the cpios are extracted in memory fs that should not change anything but worth noticing.


[...]

Additional note : enabling this compilation flags, cause the signature
of external modules to be incorrect as XZ with this flag *must* be used
with CRC32 checksum and not the xz default CRC64. I had to add
--check=crc32 to my signature scripts for external modules.
[...]

When does this signature script run?

After I do a dkms. I do not want to put the signature key available
directly in the fs.

Yes, that's a sensible policy.

I was wondering whether the modules installed in the main system are
properly signed but due to some mis-ordering the modules copied into the
initramfs are not.

well I can do insmod of some modules when booted even the one that I sign with my own key. I do not catch the order notion. The binaries are identical so the signature is. The dependency, may be another problem (e.g a modules is not copied but prevent another one needed to be loaded. The depmod should take care of it but).


Can you unpack the initramfs (with unmkinitramfs) and check that the
modules have the same contents as those installed in the main system?
(With the current version of unmkinitramfs, they will be unpacked under
a cpio<n> subdirectory.)

/tmp/cpio2/usr/lib/modules/6.6.83/kernel/fs/ext4:
total 360
-rw-r--r-- 1 eric eric 365588 13 mars  18:06 ext4.ko.xz

ls -l /lib/modules/6.6.83/kernel/fs/ext4/ext4.ko.xz
-rw-r--r-- 1 root root 365588 13 mars 18:06 /lib/modules/6.6.83/kernel/fs/ext4/ext4.ko.xz

md5sum /tmp/cpio2/usr/lib/modules/6.6.83/kernel/fs/ext4/ext4.ko.xz
41686672fcda99eb20db4b2f7d1fa788 /tmp/cpio2/usr/lib/modules/6.6.83/kernel/fs/ext4/ext4.ko.xz eric@pink-floyd3:~$ md5sum /lib/modules/6.6.83/kernel/fs/ext4/ext4.ko.xz 41686672fcda99eb20db4b2f7d1fa788 /lib/modules/6.6.83/kernel/fs/ext4/ext4.ko.xz



I built a kernel from Linux 6.6.80 using the cloud-amd64 configuration
from linux-config-6.6, and an initramfs using initramfs-tools 0.146.
Module loading worked OK, so I don't believe this is a general problem.

I do not use cloud config. Did you check if CONFIG_MODULE_DECOMPRESS=y
is set in this config? If yes then the bug goes untoticed as the kernel
itself decompress the modules not the module loader.

It is not set.

here is my complete module config if it helps (note that I keep the DECOMPRESS so far).

grep CONFIG_MODULE /boot/config-6.6.83
CONFIG_MODULES_USE_ELF_RELA=y
CONFIG_MODULE_SIG_FORMAT=y
CONFIG_MODULES=y
# CONFIG_MODULE_DEBUG is not set
CONFIG_MODULE_FORCE_LOAD=y
CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODULE_UNLOAD_TAINT_TRACKING is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
CONFIG_MODULE_SIG=y
# CONFIG_MODULE_SIG_FORCE is not set
CONFIG_MODULE_SIG_ALL=y
# CONFIG_MODULE_SIG_SHA1 is not set
# CONFIG_MODULE_SIG_SHA224 is not set
CONFIG_MODULE_SIG_SHA256=y
# CONFIG_MODULE_SIG_SHA384 is not set
# CONFIG_MODULE_SIG_SHA512 is not set
CONFIG_MODULE_SIG_HASH="sha256"
# CONFIG_MODULE_COMPRESS_NONE is not set
# CONFIG_MODULE_COMPRESS_GZIP is not set
CONFIG_MODULE_COMPRESS_XZ=y
# CONFIG_MODULE_COMPRESS_ZSTD is not set
CONFIG_MODULE_DECOMPRESS=y
# CONFIG_MODULE_ALLOW_MISSING_NAMESPACE_IMPORTS is not set
CONFIG_MODULES_TREE_LOOKUP=y
CONFIG_MODULE_SIG_KEY="certs/signing_key.pem"
# CONFIG_MODULE_SIG_KEY_TYPE_RSA is not set
CONFIG_MODULE_SIG_KEY_TYPE_ECDSA=y


--
Eric Valette

Reply via email to