CVE-2025-21878: i2c: npcm: disable interrupt enable bit before devm_request_irq

Published Mar 27, 2025
·
Updated

In the Linux kernel, the following vulnerability has been resolved:

i2c: npcm: disable interrupt enable bit before devmrequestirq

The customer reports that there is a soft lockup issue related to the i2c driver. After checking, the i2c module was doing a tx transfer and the bmc machine reboots in the middle of the i2c transaction, the i2c module keeps the status without being reset.

Due to such an i2c module status, the i2c irq handler keeps getting triggered since the i2c irq handler is registered in the kernel booting process after the bmc machine is doing a warm rebooting. The continuous triggering is stopped by the soft lockup watchdog timer.

Disable the interrupt enable bit in the i2c module before calling devmrequestirq to fix this issue since the i2c relative status bit is read-only.

Here is the soft lockup log. [ 28.176395] watchdog: BUG: soft lockup - CPU#0 stuck for 26s! [swapper/0:1] [ 28.183351] Modules linked in: [ 28.186407] CPU: 0 PID: 1 Comm: swapper/0 Not tainted 5.15.120-yocto-s-dirty-bbebc78 #1 [ 28.201174] pstate: 40000005 (nZcv daif -PAN -UAO -TCO -DIT -SSBS BTYPE=--) [ 28.208128] pc : dosoftirq+0xb0/0x368 [ 28.212055] lr : dosoftirq+0x70/0x368 [ 28.215972] sp : ffffff8035ebca00 [ 28.219278] x29: ffffff8035ebca00 x28: 0000000000000002 x27: ffffff80071a3780 [ 28.226412] x26: ffffffc008bdc000 x25: ffffffc008bcc640 x24: ffffffc008be50c0 [ 28.233546] x23: ffffffc00800200c x22: 0000000000000000 x21: 000000000000001b [ 28.240679] x20: 0000000000000000 x19: ffffff80001c3200 x18: ffffffffffffffff [ 28.247812] x17: ffffffc02d2e0000 x16: ffffff8035eb8b40 x15: 00001e8480000000 [ 28.254945] x14: 02c3647e37dbfcb6 x13: 02c364f2ab14200c x12: 0000000002c364f2 [ 28.262078] x11: 00000000fa83b2da x10: 000000000000b67e x9 : ffffffc008010250 [ 28.269211] x8 : 000000009d983d00 x7 : 7fffffffffffffff x6 : 0000036d74732434 [ 28.276344] x5 : 00ffffffffffffff x4 : 0000000000000015 x3 : 0000000000000198 [ 28.283476] x2 : ffffffc02d2e0000 x1 : 00000000000000e0 x0 : ffffffc008bdcb40 [ 28.290611] Call trace: [ 28.293052] dosoftirq+0xb0/0x368 [ 28.296625] irqexitrcu+0xe0/0x100 [ 28.300374] irqexit+0x14/0x20 [ 28.303513] handledomainirq+0x68/0x90 [ 28.307440] gichandleirq+0x78/0xb0 [ 28.311098] callonirqstack+0x20/0x38 [ 28.315019] dointerrupthandler+0x54/0x5c [ 28.319199] el1interrupt+0x2c/0x4c [ 28.322777] el1h64irqhandler+0x14/0x20 [ 28.326872] el1h64irq+0x74/0x78 [ 28.330269] setupirq+0x454/0x780 [ 28.333841] requestthreadedirq+0xd0/0x1b4 [ 28.338107] devmrequestthreadedirq+0x84/0x100 [ 28.342809] npcmi2cprobebus+0x188/0x3d0 [ 28.346990] platformprobe+0x6c/0xc4 [ 28.350653] reallyprobe+0xcc/0x45c [ 28.354227] driverprobedevice+0x8c/0x160 [ 28.358578] driverprobedevice+0x44/0xe0 [ 28.362670] driverattach+0x124/0x1d0 [ 28.366589] busforeachdev+0x7c/0xe0 [ 28.370426] driverattach+0x28/0x30 [ 28.373997] busadddriver+0x124/0x240 [ 28.377830] driverregister+0x7c/0x124 [ 28.381662] platformdriverregister+0x2c/0x34 [ 28.386362] npcmi2cinit+0x3c/0x5c [ 28.389937] dooneinitcall+0x74/0x230 [ 28.393768] kernelinitfreeable+0x24c/0x2b4 [ 28.398126] kernelinit+0x28/0x130 [ 28.401614] retfromfork+0x10/0x20 [ 28.405189] Kernel panic - not syncing: softlockup: hung tasks [ 28.411011] SMP: stopping secondary CPUs [ 28.414933] Kernel Offset: disabled [ 28.418412] CPU features: 0x00000000,00000802 [ 28.427644] Rebooting in 20 seconds..

Affected Software

12 affected componentsFixes available
Linux Kernel
Linux Linux kernel>=5.8<5.10.235
Linux Linux kernel>=5.11<5.15.179
Linux Linux kernel>=5.16<6.1.130
Linux Linux kernel>=6.2<6.6.81
Linux Linux kernel>=6.7<6.12.18
Linux Linux kernel>=6.13<6.13.6
Linux Linux kernel=6.14-rc1
Linux Linux kernel=6.14-rc2
Linux Linux kernel=6.14-rc3
Linux Linux kernel=6.14-rc4
debian/linux
6.1.176-16.1.190-16.12.107-16.12.115-27.2.12-17.2.15-1

Remediation

Recommended actions to resolve this vulnerability, in priority order.

  1. Configuration

    Disable the interrupt enable bit in the i2c module before calling devm_request_irq, because the i2c relative status bit is read-only and the module can retain the status without being reset.

    i2c: npcm driver interrupt enable bit = disabled

Event History

Mar 27, 2025
CVE Published
via MITRE·02:57 PM
Data Sourced
via MITRE·02:57 PM
Description
Data Sourced
via NVD·03:15 PM
RemedyDescriptionSeverityWeaknessAffected Software

Parent advisories

This vulnerability appears in the following advisories.

Peer vulnerabilities

Found alongside the following vulnerabilities.

Frequently Asked Questions

1

What is the severity of CVE-2025-21878?

CVE-2025-21878 has been classified with moderate severity due to its potential to cause soft lockup issues in affected Linux kernel versions.

2

How do I fix CVE-2025-21878?

To fix CVE-2025-21878, users should update their Linux kernel to version 5.10.236 or higher, or the corresponding fixed version for their specific kernel branch.

3

Which Linux kernel versions are affected by CVE-2025-21878?

CVE-2025-21878 affects Linux kernel versions from 5.8 to 6.14-rc4.

4

What type of issue is CVE-2025-21878 related to?

CVE-2025-21878 is related to a soft lockup issue occurring with the I2C driver in the Linux kernel.

5

Are all Linux kernel versions vulnerable to CVE-2025-21878?

No, only specific versions from 5.8 to 6.14-rc4 are vulnerable to CVE-2025-21878.

Contact

SecAlerts Pty Ltd.
132 Wickham Terrace
Fortitude Valley,
QLD 4006, Australia
info@secalerts.co
By using SecAlerts services, you agree to our services end-user license agreement. This website is safeguarded by reCAPTCHA and governed by the Google Privacy Policy and Terms of Service. All names, logos, and brands of products are owned by their respective owners, and any usage of these names, logos, and brands for identification purposes only does not imply endorsement. If you possess any content that requires removal, please get in touch with us.
© 2026 SecAlerts Pty Ltd.
ABN: 70 645 966 203, ACN: 645 966 203