Home

Description

In the Linux kernel, the following vulnerability has been resolved: i2c: core: Fix double-free of fwnode in i2c_unregister_device() Before commit df6d7277e552 ("i2c: core: Do not dereference fwnode in struct device"), i2c_unregister_device() only called fwnode_handle_put() on of_node-s in the form of calling of_node_put(client->dev.of_node). But after this commit the i2c_client's fwnode now unconditionally gets fwnode_handle_put() on it. When the i2c_client has no primary (ACPI / OF) fwnode but it does have a software fwnode, the software-node will be the primary node and fwnode_handle_put() will put() it. But for the software fwnode device_remove_software_node() will also put() it leading to a double free: [ 82.665598] ------------[ cut here ]------------ [ 82.665609] refcount_t: underflow; use-after-free. [ 82.665808] WARNING: CPU: 3 PID: 1502 at lib/refcount.c:28 refcount_warn_saturate+0xba/0x11 ... [ 82.666830] RIP: 0010:refcount_warn_saturate+0xba/0x110 ... [ 82.666962] <TASK> [ 82.666971] i2c_unregister_device+0x60/0x90 Fix this by not calling fwnode_handle_put() when the primary fwnode is a software-node.

PUBLISHED Reserved 2025-04-16 | Published 2025-09-04 | Updated 2025-09-29 | Assigner Linux

Product status

Default status
unaffected

df6d7277e5525d6cce63127dd93ebec4c6354fa0 (git) before ffe02f7c4e36090154646612e67d331832f92037
affected

df6d7277e5525d6cce63127dd93ebec4c6354fa0 (git) before 1c24e5fc0c7096e00c202a6a3e0c342c1afb47c2
affected

Default status
affected

6.16
affected

Any version before 6.16
unaffected

6.16.2 (semver)
unaffected

6.17 (original_commit_for_fix)
unaffected

References

git.kernel.org/...c/ffe02f7c4e36090154646612e67d331832f92037

git.kernel.org/...c/1c24e5fc0c7096e00c202a6a3e0c342c1afb47c2

cve.org (CVE-2025-38682)

nvd.nist.gov (CVE-2025-38682)

Download JSON