UBUNTU-CVE-2023-52486
In the Linux kernel, the following vulnerability has been resolved: drm: Don't unref the same fb many times by mistake due to deadlock handling If we get a deadlock after the fb lookup in drm_mode_page_flip_ioctl() we proceed to unref the fb and then retry the whole thing from the top. But we forget to reset the fb pointer back to NULL, and so if we then get another error during the retry, before the fb lookup, we proceed the unref the same fb again without having gotten another reference. The end result is that the fb will (eventually) end up being freed while it's still in use. Reset fb to NULL once we've unreffed it to avoid doing it again until we've done another fb lookup. This turned out to be pretty easy to hit on a DG2 when doing async flips (and CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y). The first symptom I saw that drm_closefb() simply got stuck in a busy loop while walking the framebuffer list. Fortunately I was able to convince it to oops instead, and from there it was easier to track down the culprit.
02 / AFFECTED SOFTWARE
Affected packages
7 explicit affected versions
29 explicit affected versions
41 explicit affected versions
50 explicit affected versions
6 explicit affected versions
12 explicit affected versions
16 explicit affected versions
6 explicit affected versions
50 explicit affected versions
36 explicit affected versions
57 explicit affected versions
47 explicit affected versions
36 explicit affected versions
7 explicit affected versions
43 explicit affected versions
7 explicit affected versions
44 explicit affected versions
84 explicit affected versions
9 explicit affected versions
67 explicit affected versions
35 explicit affected versions
3 explicit affected versions
14 explicit affected versions
18 explicit affected versions
5 explicit affected versions
98 explicit affected versions
30 explicit affected versions
86 explicit affected versions
13 explicit affected versions
4 explicit affected versions
23 explicit affected versions
1 explicit affected versions
21 explicit affected versions
9 explicit affected versions
16 explicit affected versions
10 explicit affected versions
41 explicit affected versions
7 explicit affected versions
12 explicit affected versions
34 explicit affected versions
12 explicit affected versions
10 explicit affected versions
7 explicit affected versions
74 explicit affected versions
12 explicit affected versions
89 explicit affected versions
97 explicit affected versions
12 explicit affected versions
85 explicit affected versions
10 explicit affected versions
10 explicit affected versions
37 explicit affected versions
9 explicit affected versions
10 explicit affected versions
23 explicit affected versions
1 explicit affected versions
27 explicit affected versions
26 explicit affected versions
13 explicit affected versions
4 explicit affected versions
1 explicit affected versions
29 explicit affected versions
78 explicit affected versions
13 explicit affected versions
47 explicit affected versions
1 explicit affected versions
73 explicit affected versions
45 explicit affected versions
89 explicit affected versions
7 explicit affected versions
33 explicit affected versions
23 explicit affected versions
10 explicit affected versions
96 explicit affected versions
11 explicit affected versions
12 explicit affected versions
119 explicit affected versions
7 explicit affected versions
12 explicit affected versions
88 explicit affected versions
36 explicit affected versions
28 explicit affected versions
112 explicit affected versions
44 explicit affected versions
132 explicit affected versions
10 explicit affected versions
26 explicit affected versions
23 explicit affected versions
1 explicit affected versions
13 explicit affected versions
119 explicit affected versions
47 explicit affected versions
16 explicit affected versions
47 explicit affected versions
37 explicit affected versions
3 explicit affected versions
73 explicit affected versions
1 explicit affected versions
2 explicit affected versions
54 explicit affected versions
51 explicit affected versions
72 explicit affected versions
1 explicit affected versions
12 explicit affected versions
34 explicit affected versions
27 explicit affected versions
20 explicit affected versions
1 explicit affected versions
1 explicit affected versions
76 explicit affected versions
8 explicit affected versions
8 explicit affected versions
5 explicit affected versions
8 explicit affected versions
1 explicit affected versions
10 explicit affected versions
9 explicit affected versions
77 explicit affected versions
13 explicit affected versions
41 explicit affected versions
7 explicit affected versions
74 explicit affected versions
39 explicit affected versions
10 explicit affected versions
12 explicit affected versions
12 explicit affected versions
76 explicit affected versions
44 explicit affected versions
16 explicit affected versions
3 explicit affected versions
13 explicit affected versions
26 explicit affected versions
33 explicit affected versions
37 explicit affected versions
14 explicit affected versions
38 explicit affected versions
37 explicit affected versions
9 explicit affected versions
36 explicit affected versions
11 explicit affected versions
44 explicit affected versions
8 explicit affected versions
7 explicit affected versions
18 explicit affected versions
48 explicit affected versions
123 explicit affected versions
102 explicit affected versions
4 explicit affected versions
1 explicit affected versions
1 explicit affected versions
42 explicit affected versions
95 explicit affected versions
10 explicit affected versions
43 explicit affected versions
42 explicit affected versions
146 explicit affected versions
10 explicit affected versions
8 explicit affected versions
14 explicit affected versions
77 explicit affected versions
4 explicit affected versions
66 explicit affected versions
7 explicit affected versions
1 explicit affected versions
49 explicit affected versions
03 / CONNECTIONS
Connected vulnerabilities
04 / EVIDENCE
Source records
In the Linux kernel, the following vulnerability has been resolved: drm: Don't unref the same fb many times by mistake due to deadlock handling If we get a deadlock after the fb lookup in drm_mode_page_flip_ioctl() we proceed to unref the fb and then retry the whole thing from the top. But we forget to reset the fb pointer back to NULL, and so if we then get another error during the retry, before the fb lookup, we proceed the unref the same fb again without having gotten another reference. The end result is that the fb will (eventually) end up being freed while it's still in use. Reset fb to NULL once we've unreffed it to avoid doing it again until we've done another fb lookup. This turned out to be pretty easy to hit on a DG2 when doing async flips (and CONFIG_DEBUG_WW_MUTEX_SLOWPATH=y). The first symptom I saw that drm_closefb() simply got stuck in a busy loop while walking the framebuffer list. Fortunately I was able to convince it to oops instead, and from there it was easier to track down the culprit.
05 / REFERENCES
Further evidence
- https://git.kernel.org/linus/cb4daf271302d71a6b9a7c01bd0b6d76febd8f0c
- https://git.kernel.org/stable/c/376e21a9e4c2c63ee5d8d3aa74be5082c3882229
- https://git.kernel.org/stable/c/62f2e79cf9f4f47cc9dea9cebdf58d9f7b5695e0
- https://git.kernel.org/stable/c/9dd334a8245011ace45e53298175c7b659edb3e7
- https://git.kernel.org/stable/c/b4af63da9d94986c529d74499fdfe44289acd551
- https://git.kernel.org/stable/c/bfd0feb1b109cb63b87fdcd00122603787c75a1a
- https://git.kernel.org/stable/c/cb4daf271302d71a6b9a7c01bd0b6d76febd8f0c
- https://git.kernel.org/stable/c/d7afdf360f4ac142832b098b4de974e867cc063c
- https://git.kernel.org/stable/c/f55261469be87c55df13db76dc945f6bcd825105
- https://ubuntu.com/security/CVE-2023-52486
- https://ubuntu.com/security/notices/USN-6766-1
- https://ubuntu.com/security/notices/USN-6766-2
- https://ubuntu.com/security/notices/USN-6766-3
- https://ubuntu.com/security/notices/USN-6767-1
- https://ubuntu.com/security/notices/USN-6767-2
- https://ubuntu.com/security/notices/USN-6795-1
- https://ubuntu.com/security/notices/USN-6818-1
- https://ubuntu.com/security/notices/USN-6818-2
- https://ubuntu.com/security/notices/USN-6818-3
- https://ubuntu.com/security/notices/USN-6818-4
- https://ubuntu.com/security/notices/USN-6819-1
- https://ubuntu.com/security/notices/USN-6819-2
- https://ubuntu.com/security/notices/USN-6819-3
- https://ubuntu.com/security/notices/USN-6819-4
- https://ubuntu.com/security/notices/USN-6828-1
- https://ubuntu.com/security/notices/USN-7185-1
- https://ubuntu.com/security/notices/USN-7185-2
- https://www.cve.org/CVERecord?id=CVE-2023-52486