0

リトル カーネル ブート ローダーでは、多くの場所で 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

シャンティ、おそらくコードの背景調査を行う必要があります:)

あなたが参照しているコードは、実際には LK の作成者によって提供されたものではなく、Google/Qcom から提供されたものであり、その部分 (aboot) は、従来の Android ブートローダーのダンプを使用して作成されました。それらをパブリックドメインに公開することはできません。

null をチェックしない理由は、従来のブートローダー ヒープでは非常に基本的なものとして実装されていたため、空き領域もチャンクもなく、単に割り当て、アドレスをインクリメントし、ヒープが非常に長く使用されないため、それを忘れているためです。それは問題ではありませんでしたが、それ自体がOSのようなタスクに非常に対応しているLKでは、ヒープがフリーおよびその他の標準ヒープ機能をサポートしているため、それはまったく間違っています。

于 2012-08-06T00:30:12.497 に答える
0

常に null をチェックする必要がありますが、malloc できない場合、ブートローダーはどのように回復するのでしょうか? 回復する場所がありません...再起動する可能性がありますが、再起動が止まらなくなる可能性があります。たぶんそれがnullをチェックしなかった理由です。

于 2012-07-12T08:33:17.983 に答える