openEuler/龙蜥OS:不同内核版本的驱动模块可以交叉加载吗?

openEuler/龙蜥OS:不同内核版本的驱动模块可以交叉加载吗?

1. 安装openEuler

  • 虚拟机未开启 Secure Boot
  • 版本:openEuler-22.03-LTS-SP3
  • 内核:5.10.0-182.0.0.95.oe2203sp3.x86_64(默认内核)
[root@localhost ~]# uname -r
5.10.0-182.0.0.95.oe2203sp3.x86_64

2. 安装不同版本的内核

  • 搜索不同内核版本 yum serach --showduplicates kernel
[root@localhost ~]# yum search --showduplicates kernel | grep kernel-5.10
Last metadata expiration check: 0:51:08 ago on Mon 17 Feb 2025 10:05:11 AM CST.
kernel-5.10.0-182.0.0.95.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-182.0.0.95.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-182.0.0.95.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-182.0.0.95.oe2203sp3.src : Linux Kernel
kernel-5.10.0-183.0.0.96.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-184.0.0.97.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-185.0.0.98.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-186.0.0.99.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-187.0.0.100.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-188.0.0.101.oe2203sp3.x86_64 : Linux Kernel
kernel-5.10.0-189.0.0.102.oe2203sp3.x86_64 : Linux Kernel
...省略...
  • 安装不同版本的内核
    • 选择 kernel-5.10.0-183.0.0.96.oe2203sp3.x86_64
[root@localhost ~]# yum install kernel-5.10.0-183.0.0.96.oe2203sp3.x86_64

3. 选择实验用的驱动模块

  • 列出所有当前加载的模块
[root@localhost ~]# lsmod
Module                  Size  Used by
vfat                   20480  0
btrfs                1679360  0
xor                    24576  1 btrfs
raid6_pq              122880  1 btrfs
ntfs                  122880  0
msdos                  20480  0
fat                    86016  2 msdos,vfat
xfs                  1847296  0
nft_ct                 24576  0
nft_chain_nat          16384  0
nf_nat                 57344  1 nft_chain_nat
nf_conntrack          180224  2 nf_nat,nft_ct
nf_defrag_ipv6         24576  1 nf_conntrack
nf_defrag_ipv4         16384  1 nf_conntrack
ip_set                 61440  0
rfkill                 32768  0
nf_tables             278528  2 nft_ct,nft_chain_nat
libcrc32c              16384  5 nf_conntrack,nf_nat,btrfs,nf_tables,xfs
nfnetlink              20480  2 nf_tables,ip_set
vmwgfx                393216  1
ttm                   118784  1 vmwgfx
snd_ens1371            36864  0
snd_ac97_codec        184320  1 snd_ens1371
intel_rapl_msr         20480  0
intel_rapl_common      32768  1 intel_rapl_msr
ac97_bus               16384  1 snd_ac97_codec
snd_rawmidi            45056  1 snd_ens1371
snd_seq_device         16384  1 snd_rawmidi
isst_if_mbox_msr       20480  0
snd_pcm               139264  2 snd_ac97_codec,snd_ens1371
isst_if_common         20480  1 isst_if_mbox_msr
drm_kms_helper        286720  1 vmwgfx
nfit                   81920  0
snd_timer              49152  1 snd_pcm
libnvdimm             221184  1 nfit
snd                   114688  6 snd_seq_device,snd_timer,snd_ac97_codec,snd_pcm,snd_rawmidi,snd_ens1371
vmw_balloon            28672  0
sg                     45056  0
syscopyarea            16384  1 drm_kms_helper
sysfillrect            16384  1 drm_kms_helper
sysimgblt              16384  1 drm_kms_helper
rapl                   24576  0
fb_sys_fops            16384  1 drm_kms_helper
joydev                 28672  0
pcspkr                 16384  0
soundcore              16384  1 snd
cec                    53248  1 drm_kms_helper
vmw_vmci               94208  1 vmw_balloon
i2c_piix4              28672  0
drm                   638976  4 vmwgfx,drm_kms_helper,ttm
fuse                  180224  1
ext4                  983040  2
mbcache                16384  1 ext4
jbd2                  167936  1 ext4
sr_mod                 28672  0
cdrom                  86016  1 sr_mod
ata_generic            16384  0
crct10dif_pclmul       16384  1
crc32_pclmul           16384  0
ata_piix               40960  0
crc32c_intel           24576  5
nvme                   49152  2
libata                307200  2 ata_piix,ata_generic
vmxnet3                69632  0
nvme_core             131072  4 nvme
ghash_clmulni_intel    16384  0
serio_raw              20480  0
t10_pi                 16384  1 nvme_core
dm_mirror              28672  0
dm_region_hash         24576  1 dm_mirror
dm_log                 20480  2 dm_region_hash,dm_mirror
dm_mod                167936  8 dm_log,dm_mirror
  • 选择一个没有被其它模块使用的模块,例如 vfat 模块!
    • /lib/modules/5.10.0-182.0.0.95.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
[root@localhost ~]# modinfo vfat
filename:       /lib/modules/5.10.0-182.0.0.95.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
author:         Gordon Chaffee
description:    VFAT filesystem support
license:        GPL
alias:          fs-vfat
srcversion:     444A191E60E27ED025AA29E
depends:        fat
retpoline:      Y
intree:         Y
name:           vfat
vermagic:       5.10.0-182.0.0.95.oe2203sp3.x86_64 SMP mod_unload modversions
sig_id:         PKCS#7
signer:         openEuler kernel signing key
sig_key:        07:FF:37:42:50:77:7E:17:83:B8:90:F6:BA:C5:5A:8F:B0:55:7C:74
sig_hashalgo:   sha256
signature:      2C:DF:AB:79:00:49:33:A4:E6:B0:9F:75:52:CD:45:C1:33:BC:92:C0:
                6D:5F:39:3B:0D:F9:97:D4:8E:8D:19:1F:59:B5:01:3D:C0:9A:98:CA:
                66:60:29:15:01:4A:F2:D2:96:D9:E1:BF:7F:26:81:72:27:9C:83:9F:
                E9:36:08:D0:C6:3E:E2:EC:5F:A2:49:19:87:E6:0F:82:25:67:85:C4:
                38:12:9E:F4:10:60:D4:32:D0:4C:B7:21:5D:6C:0D:C8:90:C4:42:C0:
                D2:CF:AD:2F:7B:6B:83:F1:A0:DF:6C:8D:25:DF:CD:03:6E:63:AC:8A:
                D2:7E:4D:44:B4:CE:1F:54:20:68:B4:F1:F6:42:7A:F2:01:EA:71:B5:
                4D:FE:9B:4B:12:43:9C:51:37:C5:53:6D:6E:49:BF:B8:F6:A9:29:3D:
                E1:05:1F:37:46:A1:A6:41:2B:08:AB:C5:9A:09:5B:E0:2F:71:EB:19:
                EB:D3:2C:DC:B6:E3:32:17:B0:9E:D1:A7:3B:5B:B6:FE:84:92:8B:5E:
                99:FC:8C:6B:17:51:45:AD:1F:77:D4:A1:7E:24:F5:DB:C7:1B:28:F5:
                6A:B7:88:B8:07:D1:59:06:22:0D:D6:70:5F:AC:F1:50:67:C0:BB:32:
                07:3F:A0:12:93:34:4D:36:26:FC:44:B3:9F:D9:11:F2:BB:4A:3B:0F:
                37:B1:D1:21:70:60:8B:2F:3F:B7:88:54:64:95:6D:B7:F5:35:45:A2:
                29:90:62:20:63:77:AA:AC:02:9D:80:14:00:82:15:67:7F:FE:0D:21:
                50:7D:44:41:33:5D:40:33:7E:D3:89:3D:63:22:C3:84:BC:78:25:F5:
                77:76:7D:A6:AE:D3:52:19:B0:83:03:FE:CB:1B:6A:52:56:DF:82:C2:
                A0:D2:56:D1:58:BB:C6:29:FF:A9:A7:7F:C2:9F:1B:8D:00:E4:64:CD:
                75:34:B9:C2:CE:E6:2B:23:4E:18:FE:B0:67:D8:2F:CB:1A:03:F9:B6:
                FF:17:0B:D1:B1:83:2A:FE:FF:33:EE:50:33:E5:51:B6:5E:58:72:B0:
                0D:68:A2:C1:66:68:34:EC:3A:9F:3D:BC:43:91:7A:45:66:74:34:D0:
                BF:7B:2A:95:3C:B5:78:16:95:17:04:91:64:0E:72:D4:B2:70:1E:96:
                56:B8:A0:92:09:4E:D1:B0:68:F5:AC:5B:8C:10:F5:7A:70:82:3C:B3:
                3B:60:77:0C:6C:E6:C2:82:89:9D:BB:C5:89:45:4C:15:9D:6B:3A:76:
                7A:8F:BF:30:7E:AC:72:A4:67:D2:A9:40:69:44:C0:23:17:99:8D:6A:
                2A:6E:D1:B2:8A:EB:5D:70:8D:EC:A7:79
  • 测试vfat动态卸载与加载
[root@localhost ~]# rmmod vfat
[root@localhost ~]# insmod /lib/modules/5.10.0-182.0.0.95.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz

4. 老内核加载新内核的驱动模块

[root@localhost ~]# rmmod vfat
[root@localhost ~]# lsmod | grep vfat
[root@localhost ~]# uname -r
5.10.0-182.0.0.95.oe2203sp3.x86_64
[root@localhost ~]# insmod /lib/modules/5.10.0-183.0.0.96.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
[root@localhost ~]# dmesg | grep vfat
[ 5832.797612] vfat: module verification failed: signature and/or required key missing - tainting kernel
[root@localhost ~]# lsmod | grep vfat
vfat                   20480  0
fat                    86016  2 msdos,vfat
  • 老内核5.10.0-182.0.0.95.oe2203sp3.x86_64
  • 新内核5.10.0-183.0.0.96.oe2203sp3.x86_64
  • insmod加载模块时,使用绝对路径加载新内核5.10.0-183.0.0.96.oe2203sp3.x86_64的vfat驱动
  • dmesg报告:vfat: module verification failed: signature and/or required key missing - tainting kernel
  • lsmod显示实际上vfat已经加载,奇怪!

5. 新内核加载旧内核的驱动模块

[root@localhost ~]# uname -r
5.10.0-183.0.0.96.oe2203sp3.x86_64
[root@localhost ~]# lsmod | grep vfat
[root@localhost ~]# modprobe vfat
[root@localhost ~]# lsmod | grep vfat
vfat                   20480  0
fat                    86016  1 vfat
[root@localhost ~]# rmmod vfat
[root@localhost ~]# lsmod | grep vfat
[root@localhost ~]# insmod /lib/modules/5.10.0-182.0.0.95.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
[root@localhost ~]# dmesg | grep vfat
[   97.051488] vfat: module verification failed: signature and/or required key missing - tainting kernel
[root@localhost ~]# lsmod | grep vfat
vfat                   20480  0
fat                    86016  1 vfat
  • 老内核5.10.0-182.0.0.95.oe2203sp3.x86_64
  • 新内核5.10.0-183.0.0.96.oe2203sp3.x86_64
  • insmod加载模块时,使用绝对路径加载旧内核5.10.0-182.0.0.95.oe2203sp3.x86_64的vfat驱动
  • dmesg报告:vfat: module verification failed: signature and/or required key missing - tainting kernel
  • lsmod显示实际上vfat已经加载,奇怪!

6. 解读vfat: module verification failed: signature and/or required key missing - tainting kernel

对比modinfo的输出,可知不同的内核版本,使用了不同openEuler kernel signing key对模块进行签名!

  • modinfo /lib/modules/5.10.0-182.0.0.95.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
    • sig_key: 07:FF:37:42:50:77:7E:17:83:B8:90:F6:BA:C5:5A:8F:B0:55:7C:74
  • modinfo /lib/modules/5.10.0-183.0.0.96.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
    • sig_key: 25:11:CA:52:7B:45:C6:E7:F5:D3:9D:24:EE:F9:BB:C2:07:C6:6F:C0
[root@localhost ~]# modinfo /lib/modules/5.10.0-182.0.0.95.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
filename:       /lib/modules/5.10.0-182.0.0.95.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
author:         Gordon Chaffee
description:    VFAT filesystem support
license:        GPL
alias:          fs-vfat
srcversion:     444A191E60E27ED025AA29E
depends:        fat
retpoline:      Y
intree:         Y
name:           vfat
vermagic:       5.10.0-182.0.0.95.oe2203sp3.x86_64 SMP mod_unload modversions
sig_id:         PKCS#7
signer:         openEuler kernel signing key
sig_key:        07:FF:37:42:50:77:7E:17:83:B8:90:F6:BA:C5:5A:8F:B0:55:7C:74
sig_hashalgo:   sha256
signature:      2C:DF:AB:79:00:49:33:A4:E6:B0:9F:75:52:CD:45:C1:33:BC:92:C0:
                6D:5F:39:3B:0D:F9:97:D4:8E:8D:19:1F:59:B5:01:3D:C0:9A:98:CA:
                66:60:29:15:01:4A:F2:D2:96:D9:E1:BF:7F:26:81:72:27:9C:83:9F:
                E9:36:08:D0:C6:3E:E2:EC:5F:A2:49:19:87:E6:0F:82:25:67:85:C4:
                38:12:9E:F4:10:60:D4:32:D0:4C:B7:21:5D:6C:0D:C8:90:C4:42:C0:
                D2:CF:AD:2F:7B:6B:83:F1:A0:DF:6C:8D:25:DF:CD:03:6E:63:AC:8A:
                D2:7E:4D:44:B4:CE:1F:54:20:68:B4:F1:F6:42:7A:F2:01:EA:71:B5:
                4D:FE:9B:4B:12:43:9C:51:37:C5:53:6D:6E:49:BF:B8:F6:A9:29:3D:
                E1:05:1F:37:46:A1:A6:41:2B:08:AB:C5:9A:09:5B:E0:2F:71:EB:19:
                EB:D3:2C:DC:B6:E3:32:17:B0:9E:D1:A7:3B:5B:B6:FE:84:92:8B:5E:
                99:FC:8C:6B:17:51:45:AD:1F:77:D4:A1:7E:24:F5:DB:C7:1B:28:F5:
                6A:B7:88:B8:07:D1:59:06:22:0D:D6:70:5F:AC:F1:50:67:C0:BB:32:
                07:3F:A0:12:93:34:4D:36:26:FC:44:B3:9F:D9:11:F2:BB:4A:3B:0F:
                37:B1:D1:21:70:60:8B:2F:3F:B7:88:54:64:95:6D:B7:F5:35:45:A2:
                29:90:62:20:63:77:AA:AC:02:9D:80:14:00:82:15:67:7F:FE:0D:21:
                50:7D:44:41:33:5D:40:33:7E:D3:89:3D:63:22:C3:84:BC:78:25:F5:
                77:76:7D:A6:AE:D3:52:19:B0:83:03:FE:CB:1B:6A:52:56:DF:82:C2:
                A0:D2:56:D1:58:BB:C6:29:FF:A9:A7:7F:C2:9F:1B:8D:00:E4:64:CD:
                75:34:B9:C2:CE:E6:2B:23:4E:18:FE:B0:67:D8:2F:CB:1A:03:F9:B6:
                FF:17:0B:D1:B1:83:2A:FE:FF:33:EE:50:33:E5:51:B6:5E:58:72:B0:
                0D:68:A2:C1:66:68:34:EC:3A:9F:3D:BC:43:91:7A:45:66:74:34:D0:
                BF:7B:2A:95:3C:B5:78:16:95:17:04:91:64:0E:72:D4:B2:70:1E:96:
                56:B8:A0:92:09:4E:D1:B0:68:F5:AC:5B:8C:10:F5:7A:70:82:3C:B3:
                3B:60:77:0C:6C:E6:C2:82:89:9D:BB:C5:89:45:4C:15:9D:6B:3A:76:
                7A:8F:BF:30:7E:AC:72:A4:67:D2:A9:40:69:44:C0:23:17:99:8D:6A:
                2A:6E:D1:B2:8A:EB:5D:70:8D:EC:A7:79
[root@localhost ~]# modinfo /lib/modules/5.10.0-183.0.0.96.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
filename:       /lib/modules/5.10.0-183.0.0.96.oe2203sp3.x86_64/kernel/fs/fat/vfat.ko.xz
author:         Gordon Chaffee
description:    VFAT filesystem support
license:        GPL
alias:          fs-vfat
srcversion:     444A191E60E27ED025AA29E
depends:        fat
retpoline:      Y
intree:         Y
name:           vfat
vermagic:       5.10.0-183.0.0.96.oe2203sp3.x86_64 SMP mod_unload modversions
sig_id:         PKCS#7
signer:         openEuler kernel signing key
sig_key:        25:11:CA:52:7B:45:C6:E7:F5:D3:9D:24:EE:F9:BB:C2:07:C6:6F:C0
sig_hashalgo:   sha256
signature:      20:62:89:61:9D:84:5C:35:AE:69:97:7A:82:9D:82:63:7C:33:A6:3A:
                CE:E6:05:19:E4:CC:DE:60:6B:9C:B6:37:53:D3:A8:F0:11:D3:62:33:
                FF:28:4C:5D:F9:CA:50:6D:87:0B:FE:DE:AA:58:D8:5D:71:88:8A:7E:
                F1:9E:CA:C7:B8:0C:94:D2:E3:CA:53:F1:85:E2:DF:C5:E0:3F:65:AB:
                AD:FF:0B:10:D1:D9:A1:66:89:CC:FB:AF:7E:47:D6:21:18:3F:A2:E8:
                E2:88:7F:99:89:37:09:46:76:23:08:15:CA:92:42:4D:57:ED:96:AE:
                85:0D:38:A1:B9:18:4D:1E:F4:39:02:29:A4:D3:0A:B3:7B:CE:63:5D:
                20:2A:71:C4:D1:AC:98:C7:E9:B2:3D:DD:FE:93:06:25:2F:09:1B:C5:
                3F:44:95:53:9E:69:9B:90:8B:32:C9:10:8B:72:92:1F:11:5A:13:BC:
                EB:D3:5C:A8:9F:CC:6B:0A:D6:91:B0:A0:CE:AC:AE:26:60:5B:6F:16:
                00:35:09:EF:6A:81:B4:7A:71:16:E2:BF:C7:D2:48:F2:37:32:06:A1:
                6F:17:93:E7:A6:C3:07:3B:44:61:54:A0:04:21:05:F5:FF:E7:07:A4:
                A5:97:84:5D:16:B7:64:E8:43:A2:7B:F4:75:B9:22:B8:40:4E:99:8C:
                B6:FA:02:6F:9B:CC:9B:69:15:36:0C:1D:DB:66:4B:EB:2A:E6:CC:FF:
                F7:90:0C:23:6C:18:6E:65:BC:6A:16:4E:A5:7D:F4:00:54:04:84:5C:
                5C:B7:53:48:8D:B6:3B:DE:FB:0A:34:78:D5:E9:54:73:A5:91:93:45:
                AA:D2:C9:40:2D:F1:68:CF:CA:27:0E:5F:24:FC:DC:81:B8:C0:27:D2:
                2E:EF:C2:85:79:26:82:79:1C:6A:2A:BA:21:D5:C6:C3:BE:FB:7A:4B:
                7E:B5:BB:33:74:02:C7:66:B5:ED:5C:87:EE:F6:72:07:72:C8:89:5A:
                4E:D7:80:7E:86:2A:FA:ED:E2:D8:B1:B5:B8:2C:2A:4D:BF:BF:36:A1:
                AE:31:2A:04:AD:B1:7E:A8:5B:63:47:4E:F6:16:87:7D:33:30:4D:DE:
                B9:D8:82:3C:98:AD:0D:F1:A2:78:1B:F9:4F:1A:16:3E:25:CA:9A:61:
                20:17:B1:DD:5C:15:EF:65:68:AF:68:73:2B:58:F5:A1:C3:67:1B:1A:
                07:1D:90:7B:9D:BD:EE:5A:CC:9D:08:E5:76:84:0E:F1:54:45:98:73:
                49:A5:64:AE:13:4F:30:8D:7E:BF:D0:6B:0E:93:49:DB:DD:57:4A:07:
                E5:E8:5E:AF:28:EE:8A:C6:56:D2:70:46

7. 为什么仍然可以加载呢?

当出现 “module verification failed: signature and/or required key missing - tainting kernel” 的错误信息时,内核是否会拒绝模块加载取决于内核的配置选项。

  1. 非强制验证
    如果内核配置中未启用强制模块签名验证(即未启用 CONFIG_MODULE_SIG_FORCE),内核在加载模块时会检查签名,但如果签名缺失或无效,内核不会拒绝加载模块,而是会打印警告信息并将内核标记为“tainted”(污染状态)。模块仍然会被加载,但系统可能会变得不稳定或存在安全风险。

  2. 强制验证行为
    如果内核配置中启用了强制模块签名验证(即启用了 CONFIG_MODULE_SIG_FORCE),内核会要求所有模块必须具有有效的签名。在这种情况下,如果模块签名验证失败,内核会直接拒绝加载该模块,并输出类似以下错误信息:
    ERROR: could not insert module <module_name>: Required key not available

最后,验证一下openEuler内核默认情况下,未启用 CONFIG_MODULE_SIG_FORCE!

[root@localhost ~]# cat /boot/config-5.10.0-183.0.0.96.oe2203sp3.x86_64 | grep CONFIG_MODULE_SIG_FORCE
# CONFIG_MODULE_SIG_FORCE is not set

补充龙蜥OS的情况:

[root@localhost ~]# cat /boot/config-5.10.134-16.3.an8.x86_64 | grep CONFIG_MODULE_SIG_FORCE
# CONFIG_MODULE_SIG_FORCE is not set
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值