CVE-2022-49900: i2c: piix4: Fix adapter not be removed in piix4_remove()
In the Linux kernel, the following vulnerability has been resolved:
i2c: piix4: Fix adapter not be removed in piix4_remove()
In piix4_probe(), the piix4 adapter will be registered in:
piix4_probe()
piix4_add_adapters_sb800() / piix4_add_adapter()
i2c_add_adapter()
Based on the probed device type, piix4_add_adapters_sb800() or single
piix4_add_adapter() will be called.
For the former case, piix4_adapter_count is set as the number of adapters,
while for antoher case it is not set and kept default *zero*.
When piix4 is removed, piix4_remove() removes the adapters added in
piix4_probe(), basing on the piix4_adapter_count value.
Because the count is zero for the single adapter case, the adapter won't
be removed and makes the sources allocated for adapter leaked, such as
the i2c client and device.
These sources can still be accessed by i2c or bus and cause problems.
An easily reproduced case is that if a new adapter is registered, i2c
will get the leaked adapter and try to call smbus_algorithm, which was
already freed:
Triggered by: rmmod i2c_piix4 && modprobe max31730
BUG: unable to handle page fault for address: ffffffffc053d860
#PF: supervisor read access in kernel mode
#PF: error_code(0x0000) - not-present page
Oops: 0000 [#1] PREEMPT SMP KASAN
CPU: 0 PID: 3752 Comm: modprobe Tainted: G
Hardware name: QEMU Standard PC (i440FX + PIIX, 1996)
RIP: 0010:i2c_default_probe (drivers/i2c/i2c-core-base.c:2259) i2c_core
RSP: 0018:ffff888107477710 EFLAGS: 00000246
...
<TASK>
i2c_detect (drivers/i2c/i2c-core-base.c:2302) i2c_core
__process_new_driver (drivers/i2c/i2c-core-base.c:1336) i2c_core
bus_for_each_dev (drivers/base/bus.c:301)
i2c_for_each_dev (drivers/i2c/i2c-core-base.c:1823) i2c_core
i2c_register_driver (drivers/i2c/i2c-core-base.c:1861) i2c_core
do_one_initcall (init/main.c:1296)
do_init_module (kernel/module/main.c:2455)
...
</TASK>
---[ end trace 0000000000000000 ]---
Fix this problem by correctly set piix4_adapter_count as 1 for the
single adapter so it can be normally removed.
Security readout for executives and security teams
Plain-English summary
CVE-2022-49900 is a Linux kernel driver cleanup bug. Under certain i2c_piix4 adapter removal conditions, kernel resources remain registered after being freed, which can later trigger a kernel crash. The bundle does not show remote exploitation, public weaponization, CVSS, or KEV listing.
Executive priority
Treat this as a targeted kernel stability issue, not an internet-scale emergency based on the provided evidence. Patch through normal kernel maintenance, with faster action for fleets using affected SMBus/I2C hardware, virtualization profiles, or workflows that manipulate kernel modules.
Technical view
In the Linux i2c_piix4 driver, the single-adapter probe path left piix4_adapter_count at zero. piix4_remove() then skipped adapter removal, leaving stale i2c objects reachable. Later driver registration could dereference freed smbus_algorithm memory and cause a kernel page fault. The fix sets the count to one for the single-adapter case.
Likely exposure
Exposure is likely limited to Linux systems using the piix4 SMBus/I2C driver on matching hardware or virtualized platforms. Risk is most relevant where kernel modules can be unloaded and other I2C drivers loaded. The provided affected data identifies Linux kernel versions but lacks complete distro package mapping.
Exploitation context
The source describes a reproducible local kernel crash path through driver lifecycle events, not a remote attack. KEV is false, and no cited source in the bundle reports active exploitation. Impact appears primarily availability and kernel stability, with evidence limited to the described use-after-free style failure.
Researcher notes
The core condition is inconsistent adapter accounting between probe and remove paths. The bundle names upstream stable commits but does not provide CVSS, CWE, distribution advisories, exploit reports, or full affected range semantics. Avoid assuming privilege escalation or remote reachability without additional source evidence.
Mitigation direction
Apply vendor or distribution kernel updates containing the referenced upstream stable fixes.
Prioritize systems using i2c_piix4 with dynamic kernel module loading enabled.
Check vendor advisories for exact fixed package versions and reboot requirements.
Restrict unnecessary kernel module loading where operationally feasible.
Monitor kernel logs for i2c_piix4 or i2c-core faults until patched.
Validation and detection
Inventory Linux kernel versions and whether the i2c_piix4 module is present or loaded.
Map installed distribution kernel packages to vendor advisories for CVE-2022-49900.
Confirm patched kernels include one of the referenced stable commits or equivalent backport.
Review operational procedures that unload or reload kernel modules on affected systems.
Check crash logs for i2c-core page faults following driver lifecycle events.
Generated from the cited source records. This long-tail analysis has not been individually reviewed by a named human.
Potential ATT&CK relevance
Conservative CVE-to-ATT&CK context
These mappings and lookup hints may be relevant to the vulnerability behavior, CWE, affected product, or exposure path. Glexia-inferred context is not an official MITRE, ATT&CK, CWE, or CVE Program mapping.
ATT&CK lookup starting points
Use these exact CWE pages and searches to review the Glexia ATT&CK library from this CVE's weakness and description context.
cve · low confidence lookup
CVE-2022-49900 mapping review
Open the CVE-to-ATT&CK bridge for reviewed, inferred, or future official mappings tied to this CVE.
These fields come from the CVE record and ADP containers, not from Glexia's Take. They preserve time-varying source decisions such as CISA SSVC, KEV status, CVSS metrics, and provider references.
0CVSS vectors
3Timeline events
0ADP providers
5Source links
Vulnerability timeline
Timeline events are normalized from CVE metadata, CNA source timelines, ADP timelines, and KEV metadata when present.
CVE reservedCVE Program
The CVE ID was reserved by the assigning CNA.
CVE publishedCVE Program
The CVE record was published.
May 1, 2025, 14:10 UTC (UTC+00:00)
CVE updatedCVE Program
The CVE record metadata indicates this as the latest update time.