CVE-2022-49290
Severity CVSS v4.0:
Pending analysis
Type:
CWE-415
Double Free
Publication date:
26/02/2025
Last modified:
01/10/2025
Description
In the Linux kernel, the following vulnerability has been resolved:<br />
<br />
mac80211: fix potential double free on mesh join<br />
<br />
While commit 6a01afcf8468 ("mac80211: mesh: Free ie data when leaving<br />
mesh") fixed a memory leak on mesh leave / teardown it introduced a<br />
potential memory corruption caused by a double free when rejoining the<br />
mesh:<br />
<br />
ieee80211_leave_mesh()<br />
-> kfree(sdata->u.mesh.ie);<br />
...<br />
ieee80211_join_mesh()<br />
-> copy_mesh_setup()<br />
-> old_ie = ifmsh->ie;<br />
-> kfree(old_ie);<br />
<br />
This double free / kernel panics can be reproduced by using wpa_supplicant<br />
with an encrypted mesh (if set up without encryption via "iw" then<br />
ifmsh->ie is always NULL, which avoids this issue). And then calling:<br />
<br />
$ iw dev mesh0 mesh leave<br />
$ iw dev mesh0 mesh join my-mesh<br />
<br />
Note that typically these commands are not used / working when using<br />
wpa_supplicant. And it seems that wpa_supplicant or wpa_cli are going<br />
through a NETDEV_DOWN/NETDEV_UP cycle between a mesh leave and mesh join<br />
where the NETDEV_UP resets the mesh.ie to NULL via a memcpy of<br />
default_mesh_setup in cfg80211_netdev_notifier_call, which then avoids<br />
the memory corruption, too.<br />
<br />
The issue was first observed in an application which was not using<br />
wpa_supplicant but "Senf" instead, which implements its own calls to<br />
nl80211.<br />
<br />
Fixing the issue by removing the kfree()&#39;ing of the mesh IE in the mesh<br />
join function and leaving it solely up to the mesh leave to free the<br />
mesh IE.
Impact
Base Score 3.x
7.80
Severity 3.x
HIGH
Vulnerable products and versions
| CPE | From | Up to |
|---|---|---|
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.4.233 (including) | 4.5 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.9.233 (including) | 4.9.309 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.14.192 (including) | 4.14.274 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 4.19.137 (including) | 4.19.237 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.4.56 (including) | 5.4.188 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.7.13 (including) | 5.10.109 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.11 (including) | 5.15.32 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.16 (including) | 5.16.18 (excluding) |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.17 (including) | 5.17.1 (excluding) |
To consult the complete list of CPE names with products and versions, see this page
References to Advisories, Solutions, and Tools
- https://git.kernel.org/stable/c/12e407a8ef17623823fd0c066fbd7f103953d28d
- https://git.kernel.org/stable/c/273ebddc5fda2967492cb0b6cdd7d81cfb821b76
- https://git.kernel.org/stable/c/3bbd0000d012f92aec423b224784fbf0f7bf40f8
- https://git.kernel.org/stable/c/46bb87d40683337757a2f902fcd4244b32bb4e86
- https://git.kernel.org/stable/c/4a2d4496e15ea5bb5c8e83b94ca8ca7fb045e7d3
- https://git.kernel.org/stable/c/582d8c60c0c053684f7138875e8150d5749ffc17
- https://git.kernel.org/stable/c/5d3ff9542a40ce034416bca03864709540a36016
- https://git.kernel.org/stable/c/615716af8644813355e014314a0bc1e961250f5a
- https://git.kernel.org/stable/c/c1d9c3628ef0a0ca197595d0f9e01cd3b5dda186



