High · published May 19, 2024
In the Linux kernel, the following vulnerability has been resolved:
of: dynamic: Synchronize of_changeset_destroy() with the devlink removals
In the following sequence:
1) of_platform_depopulate()
2) of_overlay_remove()
During the step 1, devices are destroyed and devlinks are removed.
During the step 2, OF nodes are destroyed but
__of_changeset_entry_destroy() can raise warnings related to missing
of_node_put():
ERROR: memory leak, expected refcount 1 instead of 2 ...
Indeed, during the devlink removals performed at step 1, the removal
itself releasing the device (and the attached of_node) is done by a job
queued in a workqueue and so, it is done asynchronously with respect to
function calls.
When the warning is present, of_node_put() will be called but wrongly
too late from the workqueue job.
In order to be sure that any ongoing devlink removals are done before
the of_node destruction, synchronize the of_changeset_destroy() with the
devlink removals.
| Product | Versions | Fixed in |
|---|---|---|
| linux/linux_kernel | ≥ 5.10.42, < 5.10.215 | 5.10.215 |
| linux/linux_kernel | ≥ 5.12.9, < 5.13 | 5.13 |
| linux/linux_kernel | ≥ 5.13.1, < 5.15.154 | 5.15.154 |
| linux/linux_kernel | ≥ 5.16, < 6.1.85 | 6.1.85 |
| linux/linux_kernel | ≥ 6.2, < 6.6.26 | 6.6.26 |
| linux/linux_kernel | ≥ 6.7, < 6.8.5 | 6.8.5 |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| linux/linux_kernel | all versions | — |
| debian/debian_linux | all versions | — |