在很多地方的Little Kernel引导加载程序中,在malloc或memalign之后没有检查null。
例如:在
中void flash_init(void) at flash_cmdlist = memalign(32, 1024);
char *target_cmdline(char *org_cmdline)
{
cmdline = (char *)malloc(MAX_CMDLINE_LEN);
memset(cmdline, 0, MAX_CMDLINE_LEN);
}
是否假设malloc在启动时不会返回null?
答案 0 :(得分:1)
shunty,你应该做一些代码背景研究:)
你所指的代码实际上并不是由LK的作者提供的,而是来自Google / Qcom,而那部分(aboot)是使用遗留的android bootloader的一些转储创建的,我仍然有看起来像的文件太相似但无法将它们发布到公共领域。
他们不检查null的原因是因为在遗留引导加载程序堆中实现为非常基本的,没有空闲,没有块,只是分配,增加地址并忘记它,因为堆不会用于很长一段时间,所以这不是一个问题,但在LK本身非常能够像操作系统那样的任务,它只是完全错误,因为堆支持免费和其他标准堆函数。
答案 1 :(得分:0)
您应该始终检查null,但是如果它不能malloc,引导加载程序如何恢复?没有地方可以恢复到......它可能会重启,但这可能会导致无法重启。也许这就是他们没有检查空的原因。