CodeQL 文档

潜在的释放后使用

ID: cpp/use-after-free
Kind: path-problem
Security severity: 9.3
Severity: warning
Precision: high
Tags:
   - reliability
   - security
   - external/cwe/cwe-416
Query suites:
   - cpp-code-scanning.qls
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

点击查看 CodeQL 代码库中的查询

此规则查找通过已释放的内存位置的指针进行访问(即通过悬空指针进行访问)。此类内存块已释放回动态内存管理器,修改它们会导致从段错误到内存损坏,进而会导致后续对动态内存管理器的调用出现错误,甚至可能导致安全漏洞。

警告:此检查是一个近似值,因此某些结果可能不是程序中的实际缺陷。通常,在不使用所有输入数据运行程序的情况下,无法计算指针的值。

建议

确保所有通过指针访问内存的执行路径,在指针被释放之后都不会访问该指针。

示例

void f() {
	char* buf = new char[SIZE];
	...
	if (error) {
		delete buf; //error handling has freed the buffer
	}
	...
	log_contents(buf); //but it is still used here for logging
	...
}

参考

  • I. Gerg。*缓冲区溢出攻击概述和示例*。IANewsletter 第 7 卷第 4 期。2005 年。

  • M. Donaldson。*缓冲区溢出攻击内部:机制、方法和预防*。SANS Institute InfoSec 阅读室。2002 年。

  • 通用弱点枚举:CWE-416.

  • ©GitHub, Inc.
  • 条款
  • 隐私