Skip to main content

CVE-2024-43900: Vulnerability in Linux Linux

High
VulnerabilityCVE-2024-43900cvecve-2024-43900
Published: Mon Aug 26 2024 (08/26/2024, 10:10:58 UTC)
Source: CVE
Vendor/Project: Linux
Product: Linux

Description

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.

AI-Powered Analysis

AILast updated: 06/28/2025, 22:27:52 UTC

Technical Analysis

CVE-2024-43900 is a use-after-free vulnerability identified in the Linux kernel's media subsystem, specifically within the xc2028 driver module responsible for handling certain tuner hardware. The vulnerability arises in the load_firmware_cb() callback function, which is invoked asynchronously after firmware loading completes. During module initialization, a struct tuner object is allocated in tuner_probe(). If the initialization subsequently fails, this struct tuner is freed. However, a worker thread created during initialization continues to access this now-freed struct tuner via the load_firmware_cb() callback, leading to a use-after-free condition. This flaw was detected by syzkaller, a kernel fuzzing tool, and confirmed by Kernel Address Sanitizer (KASAN) reports showing invalid memory reads. The root cause is that the asynchronous firmware loading callback does not verify whether the dvb_frontend (which contains the struct tuner) is still valid before accessing it. The fix involves adding a null check for the dvb_frontend pointer in load_firmware_cb() to prevent dereferencing freed memory. This vulnerability affects Linux kernel versions identified by the commit hash 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 and likely impacts systems using the xc2028 tuner driver, which is part of the Digital Video Broadcasting (DVB) subsystem. While no known exploits are reported in the wild, the flaw could potentially be triggered by local users or processes that cause the driver to load firmware asynchronously, leading to kernel memory corruption and possible system instability or escalation of privileges.

Potential Impact

For European organizations, this vulnerability poses a moderate risk primarily to systems running Linux kernels with the affected xc2028 driver enabled, commonly found in devices handling DVB hardware such as set-top boxes, media servers, or embedded systems used in broadcasting and telecommunications. Exploitation could lead to kernel memory corruption, causing system crashes (denial of service) or potentially enabling privilege escalation if an attacker can manipulate the asynchronous firmware loading process. This could disrupt critical media infrastructure or embedded devices in sectors like broadcasting, telecommunications, or industrial control systems that rely on Linux-based platforms. Although exploitation requires triggering the specific driver behavior, the impact on confidentiality, integrity, and availability could be significant if leveraged in targeted attacks. Given the widespread use of Linux in European IT environments, especially in telecommunications and media industries, unpatched systems may face operational disruptions and increased risk of compromise.

Mitigation Recommendations

European organizations should prioritize updating their Linux kernel to versions that include the patch for CVE-2024-43900, ensuring the load_firmware_cb() function properly checks for valid pointers before accessing memory. For systems where immediate kernel updates are not feasible, administrators should audit the use of the xc2028 driver and consider disabling or unloading this module if the associated hardware is not in use. Additionally, organizations should implement strict access controls to limit local user permissions, reducing the risk of unauthorized triggering of the vulnerable code path. Monitoring kernel logs for warnings related to firmware loading and use-after-free errors can help detect attempted exploitation. In embedded or specialized devices, coordinate with hardware vendors to obtain firmware and driver updates. Finally, incorporate this vulnerability into vulnerability management and patching cycles, ensuring timely remediation and validation of fixes in test environments before deployment.

Need more detailed analysis?Get Pro

Technical Details

Data Version
5.1
Assigner Short Name
Linux
Date Reserved
2024-08-17T09:11:59.291Z
Cisa Enriched
true
Cvss Version
null
State
PUBLISHED

Threat ID: 682d9826c4522896dcbe0c24

Added to database: 5/21/2025, 9:08:54 AM

Last enriched: 6/28/2025, 10:27:52 PM

Last updated: 8/6/2025, 12:38:33 AM

Views: 15

Actions

PRO

Updates to AI analysis are available only with a Pro account. Contact root@offseq.com for access.

Please log in to the Console to use AI analysis features.

Need enhanced features?

Contact root@offseq.com for Pro access with improved analysis and higher rate limits.

Latest Threats