0

在许多地方的 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 ?

4

2 回答 2

1

shunty,你可能应该做一些代码背景研究:)

您所指的代码实际上并非由 LK 的作者提供,而是来自 Google/Qcom,并且该部分(aboot)是使用遗留 android 引导加载程序的一些转储创建的,我仍然有看起来太相似的文件但是不能将它们发布到公共领域。

他们不检查 null 的原因是因为在传统的引导加载程序中,堆被实现为非常基本的,没有空闲,没有块,只是分配,增加地址并忘记它,因为堆不会被使用很长时间所以这不是问题,但在 LK 中,它本身非常有能力执行类似操作系统的任务,这是完全错误的,因为堆支持免费和其他标准堆功能。

于 2012-08-06T00:30:12.497 回答
0

您应该始终检查 null,但是如果引导加载程序不能 malloc,它如何恢复?无处可恢复...它可以重新启动,但这可能导致不停地重新启动。也许这就是他们不检查空值的原因。

于 2012-07-12T08:33:17.983 回答