FUM.GEN.MIGHT
可以释放未分配内存
如果释放未分配内存,会导致不可预测的结果。FUM.GEN.MIGHT 检查器能查找可通过未初始化的指针调用的释放函数。
漏洞与风险
使用无效指针调用 free() 时,会导致程序内存损坏,进而导致程序崩溃,并可能产生会被攻击者利用的漏洞。
缓解与预防
为了避免释放非堆内存,需要确保:
- 仅释放之前使用 malloc() 在堆上分配的指针
- 保持对指针的跟踪,并且仅释放指针一次
- 仅释放程序右侧部分的内存
漏洞代码示例
复制
main(){
char * x = 1;
if (a) x= malloc(1);
free(x);
}
Klocwork 针对第 4 行生成问题报告,指出如果第 3 行的条件为 false,则被 x 引用且在第 2 行上分配的内存可能会在第 4 行上被不正确地释放。释放未非配内存会导致应用程序崩溃,并可能产生易受攻击的漏洞。
扩展
此检查器可通过 Klocwork 知识库进行扩展。有关详情,请参阅调整 C/C++ 分析。