UBUNTU-CVE-2024-43900
In the Linux kernel, the following vulnerability has been resolved: media: xc2028: avoid use-after-free in load_firmware_cb() syzkaller reported use-after-free in load_firmware_cb() [1]. The reason is because the module allocated a struct tuner in tuner_probe(), and then the module initialization failed, the struct tuner was released. A worker which created during module initialization accesses this struct tuner later, it caused use-after-free. The process is as follows: task-6504 worker_thread tuner_probe <= alloc dvb_frontend [2] ... request_firmware_nowait <= create a worker ... tuner_remove <= free dvb_frontend ... request_firmware_work_func <= the firmware is ready load_firmware_cb <= but now the dvb_frontend has been freed To fix the issue, check the dvd_frontend in load_firmware_cb(), if it is null, report a warning and just return. [1]: ================================================================== BUG: KASAN: use-after-free in load_firmware_cb+0x1310/0x17a0 Read of size 8 at addr ffff8000d7ca2308 by task kworker/2:3/6504 Call trace: load_firmware_cb+0x1310/0x17a0 request_firmware_work_func+0x128/0x220 process_one_work+0x770/0x1824 worker_thread+0x488/0xea0 kthread+0x300/0x430 ret_from_fork+0x10/0x20 Allocated by task 6504: kzalloc tuner_probe+0xb0/0x1430 i2c_device_probe+0x92c/0xaf0 really_probe+0x678/0xcd0 driver_probe_device+0x280/0x370 __device_attach_driver+0x220/0x330 bus_for_each_drv+0x134/0x1c0 __device_attach+0x1f4/0x410 device_initial_probe+0x20/0x30 bus_probe_device+0x184/0x200 device_add+0x924/0x12c0 device_register+0x24/0x30 i2c_new_device+0x4e0/0xc44 v4l2_i2c_new_subdev_board+0xbc/0x290 v4l2_i2c_new_subdev+0xc8/0x104 em28xx_v4l2_init+0x1dd0/0x3770 Freed by task 6504: kfree+0x238/0x4e4 tuner_remove+0x144/0x1c0 i2c_device_remove+0xc8/0x290 __device_release_driver+0x314/0x5fc device_release_driver+0x30/0x44 bus_remove_device+0x244/0x490 device_del+0x350/0x900 device_unregister+0x28/0xd0 i2c_unregister_device+0x174/0x1d0 v4l2_device_unregister+0x224/0x380 em28xx_v4l2_init+0x1d90/0x3770 The buggy address belongs to the object at ffff8000d7ca2000 which belongs to the cache kmalloc-2k of size 2048 The buggy address is located 776 bytes inside of 2048-byte region [ffff8000d7ca2000, ffff8000d7ca2800) The buggy address belongs to the page: page:ffff7fe00035f280 count:1 mapcount:0 mapping:ffff8000c001f000 index:0x0 flags: 0x7ff800000000100(slab) raw: 07ff800000000100 ffff7fe00049d880 0000000300000003 ffff8000c001f000 raw: 0000000000000000 0000000080100010 00000001ffffffff 0000000000000000 page dumped because: kasan: bad access detected Memory state around the buggy address: ffff8000d7ca2200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff8000d7ca2280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb >ffff8000d7ca2300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ^ ffff8000d7ca2380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff8000d7ca2400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ================================================================== [2] Actually, it is allocated for struct tuner, and dvb_frontend is inside.
02 / AFFECTED SOFTWARE
Affected packages
4 explicit affected versions
100 explicit affected versions
104 explicit affected versions
15 explicit affected versions
1 explicit affected versions
12 explicit affected versions
12 explicit affected versions
14 explicit affected versions
79 explicit affected versions
10 explicit affected versions
8 explicit affected versions
26 explicit affected versions
5 explicit affected versions
8 explicit affected versions
1 explicit affected versions
10 explicit affected versions
7 explicit affected versions
91 explicit affected versions
1 explicit affected versions
1 explicit affected versions
135 explicit affected versions
10 explicit affected versions
17 explicit affected versions
74 explicit affected versions
11 explicit affected versions
43 explicit affected versions
59 explicit affected versions
50 explicit affected versions
6 explicit affected versions
12 explicit affected versions
60 explicit affected versions
19 explicit affected versions
6 explicit affected versions
69 explicit affected versions
14 explicit affected versions
54 explicit affected versions
9 explicit affected versions
72 explicit affected versions
62 explicit affected versions
55 explicit affected versions
10 explicit affected versions
8 explicit affected versions
14 explicit affected versions
61 explicit affected versions
179 explicit affected versions
7 explicit affected versions
100 explicit affected versions
13 explicit affected versions
69 explicit affected versions
11 explicit affected versions
35 explicit affected versions
21 explicit affected versions
19 explicit affected versions
18 explicit affected versions
20 explicit affected versions
100 explicit affected versions
64 explicit affected versions
14 explicit affected versions
102 explicit affected versions
13 explicit affected versions
23 explicit affected versions
105 explicit affected versions
18 explicit affected versions
1 explicit affected versions
21 explicit affected versions
16 explicit affected versions
10 explicit affected versions
57 explicit affected versions
16 explicit affected versions
7 explicit affected versions
12 explicit affected versions
52 explicit affected versions
14 explicit affected versions
7 explicit affected versions
89 explicit affected versions
105 explicit affected versions
113 explicit affected versions
12 explicit affected versions
9 explicit affected versions
13 explicit affected versions
7 explicit affected versions
9 explicit affected versions
1 explicit affected versions
10 explicit affected versions
172 explicit affected versions
37 explicit affected versions
10 explicit affected versions
37 explicit affected versions
26 explicit affected versions
13 explicit affected versions
12 explicit affected versions
29 explicit affected versions
93 explicit affected versions
13 explicit affected versions
66 explicit affected versions
8 explicit affected versions
9 explicit affected versions
87 explicit affected versions
61 explicit affected versions
105 explicit affected versions
24 explicit affected versions
33 explicit affected versions
23 explicit affected versions
10 explicit affected versions
1 explicit affected versions
98 explicit affected versions
11 explicit affected versions
12 explicit affected versions
121 explicit affected versions
7 explicit affected versions
12 explicit affected versions
103 explicit affected versions
2 explicit affected versions
52 explicit affected versions
7 explicit affected versions
46 explicit affected versions
114 explicit affected versions
62 explicit affected versions
149 explicit affected versions
1 explicit affected versions
26 explicit affected versions
16 explicit affected versions
38 explicit affected versions
1 explicit affected versions
13 explicit affected versions
16 explicit affected versions
121 explicit affected versions
63 explicit affected versions
51 explicit affected versions
16 explicit affected versions
63 explicit affected versions
17 explicit affected versions
53 explicit affected versions
3 explicit affected versions
75 explicit affected versions
1 explicit affected versions
2 explicit affected versions
70 explicit affected versions
1 explicit affected versions
12 explicit affected versions
49 explicit affected versions
27 explicit affected versions
36 explicit affected versions
7 explicit affected versions
13 explicit affected versions
13 explicit affected versions
92 explicit affected versions
13 explicit affected versions
56 explicit affected versions
76 explicit affected versions
54 explicit affected versions
10 explicit affected versions
12 explicit affected versions
15 explicit affected versions
44 explicit affected versions
16 explicit affected versions
3 explicit affected versions
13 explicit affected versions
26 explicit affected versions
45 explicit affected versions
37 explicit affected versions
17 explicit affected versions
14 explicit affected versions
8 explicit affected versions
38 explicit affected versions
53 explicit affected versions
9 explicit affected versions
51 explicit affected versions
11 explicit affected versions
62 explicit affected versions
7 explicit affected versions
33 explicit affected versions
82 explicit affected versions
64 explicit affected versions
125 explicit affected versions
104 explicit affected versions
4 explicit affected versions
1 explicit affected versions
1 explicit affected versions
60 explicit affected versions
97 explicit affected versions
13 explicit affected versions
43 explicit affected versions
8 explicit affected versions
12 explicit affected versions
58 explicit affected versions
128 explicit affected versions
149 explicit affected versions
10 explicit affected versions
14 explicit affected versions
92 explicit affected versions
4 explicit affected versions
78 explicit affected versions
11 explicit affected versions
1 explicit affected versions
51 explicit affected versions
10 explicit affected versions
03 / CONNECTIONS
Connected vulnerabilities
04 / EVIDENCE
Source records
In the Linux kernel, the following vulnerability has been resolved: media: xc2028: avoid use-after-free in load_firmware_cb() syzkaller reported use-after-free in load_firmware_cb() [1]. The reason is because the module allocated a struct tuner in tuner_probe(), and then the module initialization failed, the struct tuner was released. A worker which created during module initialization accesses this struct tuner later, it caused use-after-free. The process is as follows: task-6504 worker_thread tuner_probe <= alloc dvb_frontend [2] ... request_firmware_nowait <= create a worker ... tuner_remove <= free dvb_frontend ... request_firmware_work_func <= the firmware is ready load_firmware_cb <= but now the dvb_frontend has been freed To fix the issue, check the dvd_frontend in load_firmware_cb(), if it is null, report a warning and just return. [1]: ================================================================== BUG: KASAN: use-after-free in load_firmware_cb+0x1310/0x17a0 Read of size 8 at addr ffff8000d7ca2308 by task kworker/2:3/6504 Call trace: load_firmware_cb+0x1310/0x17a0 request_firmware_work_func+0x128/0x220 process_one_work+0x770/0x1824 worker_thread+0x488/0xea0 kthread+0x300/0x430 ret_from_fork+0x10/0x20 Allocated by task 6504: kzalloc tuner_probe+0xb0/0x1430 i2c_device_probe+0x92c/0xaf0 really_probe+0x678/0xcd0 driver_probe_device+0x280/0x370 __device_attach_driver+0x220/0x330 bus_for_each_drv+0x134/0x1c0 __device_attach+0x1f4/0x410 device_initial_probe+0x20/0x30 bus_probe_device+0x184/0x200 device_add+0x924/0x12c0 device_register+0x24/0x30 i2c_new_device+0x4e0/0xc44 v4l2_i2c_new_subdev_board+0xbc/0x290 v4l2_i2c_new_subdev+0xc8/0x104 em28xx_v4l2_init+0x1dd0/0x3770 Freed by task 6504: kfree+0x238/0x4e4 tuner_remove+0x144/0x1c0 i2c_device_remove+0xc8/0x290 __device_release_driver+0x314/0x5fc device_release_driver+0x30/0x44 bus_remove_device+0x244/0x490 device_del+0x350/0x900 device_unregister+0x28/0xd0 i2c_unregister_device+0x174/0x1d0 v4l2_device_unregister+0x224/0x380 em28xx_v4l2_init+0x1d90/0x3770 The buggy address belongs to the object at ffff8000d7ca2000 which belongs to the cache kmalloc-2k of size 2048 The buggy address is located 776 bytes inside of 2048-byte region [ffff8000d7ca2000, ffff8000d7ca2800) The buggy address belongs to the page: page:ffff7fe00035f280 count:1 mapcount:0 mapping:ffff8000c001f000 index:0x0 flags: 0x7ff800000000100(slab) raw: 07ff800000000100 ffff7fe00049d880 0000000300000003 ffff8000c001f000 raw: 0000000000000000 0000000080100010 00000001ffffffff 0000000000000000 page dumped because: kasan: bad access detected Memory state around the buggy address: ffff8000d7ca2200: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff8000d7ca2280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb >ffff8000d7ca2300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ^ ffff8000d7ca2380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ffff8000d7ca2400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb ================================================================== [2] Actually, it is allocated for struct tuner, and dvb_frontend is inside.
05 / REFERENCES
Further evidence
- https://git.kernel.org/linus/68594cec291ff9523b9feb3f43fd853dcddd1f60
- https://git.kernel.org/stable/c/208deb6d8c3cb8c3acb1f41eb31cf68ea08726d5
- https://git.kernel.org/stable/c/68594cec291ff9523b9feb3f43fd853dcddd1f60
- https://git.kernel.org/stable/c/850304152d367f104d21c77cfbcc05806504218b
- https://git.kernel.org/stable/c/ef517bdfc01818419f7bd426969a0c86b14f3e0e
- https://ubuntu.com/security/CVE-2024-43900
- https://ubuntu.com/security/notices/USN-7154-1
- https://ubuntu.com/security/notices/USN-7154-2
- https://ubuntu.com/security/notices/USN-7155-1
- https://ubuntu.com/security/notices/USN-7156-1
- https://ubuntu.com/security/notices/USN-7196-1
- https://ubuntu.com/security/notices/USN-7332-1
- https://ubuntu.com/security/notices/USN-7332-2
- https://ubuntu.com/security/notices/USN-7332-3
- https://ubuntu.com/security/notices/USN-7333-1
- https://ubuntu.com/security/notices/USN-7342-1
- https://ubuntu.com/security/notices/USN-7344-1
- https://ubuntu.com/security/notices/USN-7344-2
- https://ubuntu.com/security/notices/USN-7387-1
- https://ubuntu.com/security/notices/USN-7387-2
- https://ubuntu.com/security/notices/USN-7387-3
- https://ubuntu.com/security/notices/USN-7388-1
- https://ubuntu.com/security/notices/USN-7389-1
- https://ubuntu.com/security/notices/USN-7390-1
- https://ubuntu.com/security/notices/USN-7391-1
- https://ubuntu.com/security/notices/USN-7392-1
- https://ubuntu.com/security/notices/USN-7392-2
- https://ubuntu.com/security/notices/USN-7392-3
- https://ubuntu.com/security/notices/USN-7392-4
- https://ubuntu.com/security/notices/USN-7393-1
- https://ubuntu.com/security/notices/USN-7401-1
- https://ubuntu.com/security/notices/USN-7407-1
- https://ubuntu.com/security/notices/USN-7413-1
- https://ubuntu.com/security/notices/USN-7421-1
- https://ubuntu.com/security/notices/USN-7458-1
- https://ubuntu.com/security/notices/USN-7459-1
- https://ubuntu.com/security/notices/USN-7459-2
- https://ubuntu.com/security/notices/USN-7463-1
- https://ubuntu.com/security/notices/USN-7539-1
- https://ubuntu.com/security/notices/USN-7540-1
- https://www.cve.org/CVERecord?id=CVE-2024-43900