0

私は、保持されている kmem_cache オブジェクトを繰り返し処理して、kmalloc_cachesそれらの名前を出力するという、非常に単純であるように思われることをしようとしています。これは常にカーネル パニックで終了します。私のCは非常に錆びているので、何か誤解している場合は、イルミネーションをいただければ幸いです。次の機能を追加しました。

void *print_cachenames(void) {
    struct kmem_cache *k;
k = kmalloc_caches[0];
    printk(KERN_INFO "680: k[0] name: %s\n", k->name);
}

mm/slub.c に。配列内の最初の kmem_cache オブジェクトの名前を出力しようとするだけです。何が原因で爆発するのですか?

4

2 に答える 2

0

kmalloc_caches[0]未使用のようです。一般に、キャッシュから読み取ったポインターが NULL かどうかを使用する前に確認する必要があります。

void print_cachenames(void) {
        struct kmem_cache *k = kmalloc_caches[0];

        if (k && k->name)
                printk(KERN_INFO "680: k[0] name: %s\n", k->name);
        else 
                printk(KERN_INFO "680: k[0] == %p, has no name\n");
}
于 2012-05-01T06:23:36.870 に答える
0

あなたの関数は a を返すように宣言されていますがvoid *、何も返せません。関数がどこから呼び出されているのかはわかりませんが、何かを返すことになっている可能性があります...

于 2012-05-01T03:45:14.273 に答える