CodeQL 文档

为指针类型分配的内存不足

ID: cpp/allocation-too-small
Kind: problem
Security severity: 8.1
Severity: warning
Precision: medium
Tags:
   - reliability
   - security
   - external/cwe/cwe-131
   - external/cwe/cwe-122
Query suites:
   - cpp-security-extended.qls
   - cpp-security-and-quality.qls

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

当使用 malloccallocrealloc 从内存中分配数组时,应确保分配足够的内存以容纳所需指针类型的实例。分配给非 void 指针变量的调用,但未分配足够内存的调用,将在指针上的字段访问指向超出分配数组的内存时导致缓冲区溢出。缓冲区溢出可能导致从段错误到安全漏洞的任何问题。

建议

突出显示的调用分配的内存太小,无法容纳指针类型实例,这会导致内存溢出。使用 sizeof 运算符确保函数调用为该类型分配足够的内存。

示例

#define RECORD_SIZE 30  //incorrect or outdated size for record
typedef struct {
	char name[30];
	int status;
} Record;

void f() {
	Record* p = malloc(RECORD_SIZE); //not of sufficient size to hold a Record
	...
}

参考

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

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

  • 常见弱点枚举:CWE-131.

  • 常见弱点枚举:CWE-122.

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