LOCRET.ARG
函数返回局部变量的地址
LOCRET.ARG 检查器查找那些函数通过将局部变量写入到其参数所引用的内存中来返回局部变量地址的实例。
漏洞与风险
局部变量分配在堆栈上,因此当函数返回指向变量的指针时,它返回的是堆栈地址。该地址在从函数中返回后将无效,因此访问该地址将可能导致无法预料的应用程序行为,通常会导致程序崩溃。
漏洞代码示例
复制
#include <stdlib.h>
void func_ARG(int **pp, unsigned n)
{
int aux;
if (n == 1) {
*pp = &aux;
} else {
*pp = (int *)malloc(n * sizeof(int));
}
}
Klocwork 标记了第 7 行,指出函数 func_ARG 通过其参数返回了局部变量的地址。局部变量 aux 的地址可以分配给 *pp,而在函数返回时可能使用它。