{"id":"CVE-2025-71132","state":"PUBLISHED","title":"smc91x: fix broken irq-context in PREEMPT_RT","description":"In the Linux kernel, the following vulnerability has been resolved:\n\nsmc91x: fix broken irq-context in PREEMPT_RT\n\nWhen smc91x.c is built with PREEMPT_RT, the following splat occurs\nin FVP_RevC:\n\n[   13.055000] smc91x LNRO0003:00 eth0: link up, 10Mbps, half-duplex, lpa 0x0000\n[   13.062137] BUG: workqueue leaked atomic, lock or RCU: kworker/2:1[106]\n[   13.062137]      preempt=0x00000000 lock=0->0 RCU=0->1 workfn=mld_ifc_work\n[   13.062266] C\n** replaying previous printk message **\n[   13.062266] CPU: 2 UID: 0 PID: 106 Comm: kworker/2:1 Not tainted 6.18.0-dirty #179 PREEMPT_{RT,(full)}\n[   13.062353] Hardware name:  , BIOS\n[   13.062382] Workqueue: mld mld_ifc_work\n[   13.062469] Call trace:\n[   13.062494]  show_stack+0x24/0x40 (C)\n[   13.062602]  __dump_stack+0x28/0x48\n[   13.062710]  dump_stack_lvl+0x7c/0xb0\n[   13.062818]  dump_stack+0x18/0x34\n[   13.062926]  process_scheduled_works+0x294/0x450\n[   13.063043]  worker_thread+0x260/0x3d8\n[   13.063124]  kthread+0x1c4/0x228\n[   13.063235]  ret_from_fork+0x10/0x20\n\nThis happens because smc_special_trylock() disables IRQs even on PREEMPT_RT,\nbut smc_special_unlock() does not restore IRQs on PREEMPT_RT.\nThe reason is that smc_special_unlock() calls spin_unlock_irqrestore(),\nand rcu_read_unlock_bh() in __dev_queue_xmit() cannot invoke\nrcu_read_unlock() through __local_bh_enable_ip() when current->softirq_disable_cnt becomes zero.\n\nTo address this issue, replace smc_special_trylock() with spin_trylock_irqsave().","publishedAt":"2026-01-14T15:07:47.860Z","updatedAt":"2026-10-19T18:15:15.774Z","severity":{"score":7.5,"label":"High","version":"3.1","vector":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","source":"Linux"},"assigner":"Linux","products":["Linux Linux"],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"1c4cb705e733250d13243f6a69b8b5a92e39b9f6","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"9d222141b00156509d67d80c771fbefa92c43ace","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"ef277ae121b3249c99994652210a326b52d527b0","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"36561b86cb2501647662cfaf91286dd6973804a6","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"b6018d5c1a8f09d5efe4d6961d7ee45fdf3a7ce3","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"6402078bd9d1ed46e79465e1faaa42e3458f8a33","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/ethernet/smsc/smc91x.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.15","versionType":"semver"},{"version":"5.15.198","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.160","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.120","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.64","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.4","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"6.19","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/ethernet/smsc/smc91x.c"]}],"references":["https://git.kernel.org/stable/c/1c4cb705e733250d13243f6a69b8b5a92e39b9f6","https://git.kernel.org/stable/c/9d222141b00156509d67d80c771fbefa92c43ace","https://git.kernel.org/stable/c/ef277ae121b3249c99994652210a326b52d527b0","https://git.kernel.org/stable/c/36561b86cb2501647662cfaf91286dd6973804a6","https://git.kernel.org/stable/c/b6018d5c1a8f09d5efe4d6961d7ee45fdf3a7ce3","https://git.kernel.org/stable/c/6402078bd9d1ed46e79465e1faaa42e3458f8a33"],"weaknesses":["CWE-667"],"ingestedAt":"2026-10-29T20:10:04.440Z","source":{"repository":"CVEProject/cvelistV5","path":"cves/2025/71xxx/CVE-2025-71132.json","commit":"556c9d3a8cd17e218bb8e452ba7cd619a384ff47"},"raw":{"dataType":"CVE_RECORD","dataVersion":"5.2","cveMetadata":{"cveId":"CVE-2025-71132","state":"PUBLISHED","datePublished":"2026-01-14T15:07:47.860Z","dateUpdated":"2026-10-19T18:15:15.774Z","assignerShortName":"Linux","assignerOrgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateReserved":"2026-01-13T15:30:19.655Z"},"containers":{"cna":{"title":"smc91x: fix broken irq-context in PREEMPT_RT","descriptions":[{"lang":"en","value":"In the Linux kernel, the following vulnerability has been resolved:\n\nsmc91x: fix broken irq-context in PREEMPT_RT\n\nWhen smc91x.c is built with PREEMPT_RT, the following splat occurs\nin FVP_RevC:\n\n[   13.055000] smc91x LNRO0003:00 eth0: link up, 10Mbps, half-duplex, lpa 0x0000\n[   13.062137] BUG: workqueue leaked atomic, lock or RCU: kworker/2:1[106]\n[   13.062137]      preempt=0x00000000 lock=0->0 RCU=0->1 workfn=mld_ifc_work\n[   13.062266] C\n** replaying previous printk message **\n[   13.062266] CPU: 2 UID: 0 PID: 106 Comm: kworker/2:1 Not tainted 6.18.0-dirty #179 PREEMPT_{RT,(full)}\n[   13.062353] Hardware name:  , BIOS\n[   13.062382] Workqueue: mld mld_ifc_work\n[   13.062469] Call trace:\n[   13.062494]  show_stack+0x24/0x40 (C)\n[   13.062602]  __dump_stack+0x28/0x48\n[   13.062710]  dump_stack_lvl+0x7c/0xb0\n[   13.062818]  dump_stack+0x18/0x34\n[   13.062926]  process_scheduled_works+0x294/0x450\n[   13.063043]  worker_thread+0x260/0x3d8\n[   13.063124]  kthread+0x1c4/0x228\n[   13.063235]  ret_from_fork+0x10/0x20\n\nThis happens because smc_special_trylock() disables IRQs even on PREEMPT_RT,\nbut smc_special_unlock() does not restore IRQs on PREEMPT_RT.\nThe reason is that smc_special_unlock() calls spin_unlock_irqrestore(),\nand rcu_read_unlock_bh() in __dev_queue_xmit() cannot invoke\nrcu_read_unlock() through __local_bh_enable_ip() when current->softirq_disable_cnt becomes zero.\n\nTo address this issue, replace smc_special_trylock() with spin_trylock_irqsave()."}],"affected":[{"vendor":"Linux","product":"Linux","defaultStatus":"unaffected","versions":[{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"1c4cb705e733250d13243f6a69b8b5a92e39b9f6","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"9d222141b00156509d67d80c771fbefa92c43ace","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"ef277ae121b3249c99994652210a326b52d527b0","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"36561b86cb2501647662cfaf91286dd6973804a6","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"b6018d5c1a8f09d5efe4d6961d7ee45fdf3a7ce3","versionType":"git"},{"version":"342a93247e0837101f27bbcca26f402902df98dc","status":"affected","lessThan":"6402078bd9d1ed46e79465e1faaa42e3458f8a33","versionType":"git"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/ethernet/smsc/smc91x.c"]},{"vendor":"Linux","product":"Linux","defaultStatus":"affected","versions":[{"version":"5.15","status":"affected"},{"version":"0","status":"unaffected","lessThan":"5.15","versionType":"semver"},{"version":"5.15.198","status":"unaffected","lessThanOrEqual":"5.15.*","versionType":"semver"},{"version":"6.1.160","status":"unaffected","lessThanOrEqual":"6.1.*","versionType":"semver"},{"version":"6.6.120","status":"unaffected","lessThanOrEqual":"6.6.*","versionType":"semver"},{"version":"6.12.64","status":"unaffected","lessThanOrEqual":"6.12.*","versionType":"semver"},{"version":"6.18.4","status":"unaffected","lessThanOrEqual":"6.18.*","versionType":"semver"},{"version":"6.19","status":"unaffected","lessThanOrEqual":"*","versionType":"original_commit_for_fix"}],"repo":"https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git","programFiles":["drivers/net/ethernet/smsc/smc91x.c"]}],"references":[{"url":"https://git.kernel.org/stable/c/1c4cb705e733250d13243f6a69b8b5a92e39b9f6"},{"url":"https://git.kernel.org/stable/c/9d222141b00156509d67d80c771fbefa92c43ace"},{"url":"https://git.kernel.org/stable/c/ef277ae121b3249c99994652210a326b52d527b0"},{"url":"https://git.kernel.org/stable/c/36561b86cb2501647662cfaf91286dd6973804a6"},{"url":"https://git.kernel.org/stable/c/b6018d5c1a8f09d5efe4d6961d7ee45fdf3a7ce3"},{"url":"https://git.kernel.org/stable/c/6402078bd9d1ed46e79465e1faaa42e3458f8a33"}],"metrics":[{"cvssV3_1":{"version":"3.1","vectorString":"CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H","baseScore":7.5,"baseSeverity":"HIGH"},"scenarios":[{"lang":"en","value":"AV:N - Internet-routable ICMP/TCP traffic can force transmission through smc91x, while a pre-authentication network service makes the persistent process-context RCU leak remotely repeatable. An adjacent MLD query also directly schedules report work that reaches the vulnerable path.\nAC:L - On an affected SMP PREEMPT_RT system, every successful transmit-side trylock produces the IRQ-state mismatch without a race or uncontrolled timing requirement. Required packet fields and repeated transmissions are attacker-controlled.\nPR:N - Unauthenticated network traffic reaches the transmit path without target credentials or capabilities. The MLD path likewise has protocol-validity checks but no authentication or privilege check.\nUI:N - Kernel protocol handling and network-service responses occur automatically without victim action.\nS:U - The IRQ and RCU corruption affects the same host kernel security authority and does not cross a VM, IOMMU, or other security boundary.\nC:N - The bug leaks RCU read-side state and disables interrupts but provides no memory disclosure or read primitive.\nI:N - No memory is corrupted and no attacker-controlled write or data-modification primitive is created.\nA:H - Leaked RCU nesting can indefinitely block grace periods and accumulate callbacks, while broken IRQ state can stall critical processing. Repeated triggering can therefore cause RCU stalls or a system-wide hang."}]}],"providerMetadata":{"shortName":"Linux","orgId":"416baaa9-dc9f-4396-8d5f-8c081fb06d67","dateUpdated":"2026-08-05T12:12:17.694Z"},"cpeApplicability":[{"nodes":[{"operator":"OR","negate":false,"cpeMatch":[{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"5.15.198"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.1.160"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.6.120"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.12.64"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.18.4"},{"vulnerable":true,"criteria":"cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:*","versionStartIncluding":"5.15","versionEndExcluding":"6.19"}]}]}],"x_generator":{"engine":"bippy-1.2.0"}},"adp":[{"title":"CISA ADP Vulnrichment","metrics":[{"other":{"type":"ssvc","content":{"id":"CVE-2025-71132","role":"CISA Coordinator","options":[{"Exploitation":"none"},{"Automatable":"no"},{"Technical Impact":"partial"}],"version":"2.0.3","timestamp":"2026-06-10T20:42:13.928914Z"}}}],"problemTypes":[{"descriptions":[{"cweId":"CWE-667","lang":"en","type":"CWE","description":"CWE-667 Improper Locking"}]}],"providerMetadata":{"shortName":"CISA-ADP","orgId":"134c704f-9b21-4f2e-91b3-4a467353bcc0","dateUpdated":"2026-10-19T18:15:15.774Z"}}]}}}