CVE-2021-47058: Resolving Linux Kernel Vulnerability in Regmap by Setting Debugfs_name to NULL After It Is Freed

The Linux kernel is the foundation of the entire Linux operating system and its stability and security are of utmost importance. A recently resolved vulnerability - CVE-2021-47058 - has been found in the Linux kernel's regmap subsystem, which deals with register maps and allows for a more straightforward management of various devices' register maps. This post will discuss the vulnerability and provide a code snippet, links to original references, and exploit details.

Details of Vulnerability

The vulnerability in question lies in the regmap subsystem, where the debugfs_name is freed in the regmap_debugfs_exit() function, but not properly set to NULL, causing a memory leak. The upstream commit cffa4b2122f5 ("regmap:debugfs: Fix a memory leak when calling regmap_attach_dev") introduces an if condition when creating a name for debugfs_name, which leads to these issues.

regmap_debugfs_exit()

3. ...

regmap_debugfs_init()

The debugfs_name is freed in regmap_debugfs_exit(). However, it is not created again in regmap_debugfs_init() due to the if condition by the commit mentioned above. This results in the memory leak.

Solution and Code Snippet

To resolve this vulnerability, the solution is to set debugfs_name to NULL after it is freed.

The following code snippet demonstrates the fix

void regmap_debugfs_exit(struct regmap *map)
{
	debugfs_remove_recursive(map->debugfs);
	kfree(map->debugfs_cache_name);
	map->debugfs_cache_name = NULL;
	kfree(map->debugfs_name); // Freeing debugfs_name
	map->debugfs_name = NULL; // Setting debugfs_name to NULL after it is freed
}

1. Upstream commit cffa4b2122f5

2. Linux kernel documentation on regmap

Exploit Details

Due to the memory leak, an attacker could potentially exploit this issue to cause memory corruption and trigger a denial of service (DoS) on a targeted system or potentially escalate their privileges. However, there is currently no known exploit available for this particular vulnerability, and the impact remains theoretical.

Conclusion

CVE-2021-47058 is a resolved vulnerability related to the Linux kernel regmap subsystem. By setting debugfs_name to NULL after it is freed, the vulnerability is mitigated, preventing potential exploits and ensuring the stability of the kernel. It is essential to keep the Linux kernel and other software components up to date to minimize the risk of any security issues.

Timeline

Published on: 02/29/2024 23:15:07 UTC
Last modified on: 12/10/2024 17:54:27 UTC