сбой ядра с помощью kmalloc - PullRequest
       32

сбой ядра с помощью kmalloc

1 голос
/ 27 сентября 2011

Я пытаюсь выделить память, используя kmalloc в коде ядра, фактически в дисциплине массового обслуживания. Я хочу назначить память для q->agg_queue_hdr, из которых q является дисциплиной в очереди, а agg_queue_hdr - структурой, поэтому если назначить память следующим образом:

q->agg_queue_hdr=kmalloc(sizeof(struct agg_queue), GFP_ATOMIC);

ядро ​​вылетает. Основываясь на примерах kmalloc, которые я видел при поиске, теперь я изменил его на:

agg_queue_hdr=kmalloc(sizeof(struct agg_queue), GFP_ATOMIC);

, с которым ядро ​​не падает. Теперь я хочу знать, как я могу назначить память указателю q->agg_queue_hdr?

Ответы [ 2 ]

3 голосов
/ 27 сентября 2011

Убедитесь, что q указывает на допустимую область памяти.Тогда вы сможете назначить q->agg_queue_hdr так, как это было с самого начала.

0 голосов
/ 11 августа 2018

Почему бы вам не изменить свой код указанным ниже способом, чтобы избежать паники ядра.

if (q->agg_queue_hdr) {
    q->agg_queue_hdr = kmalloc(sizeof(struct agg_queue), GFP_ATOMIC);
}
else {
    printk("[+] q->agg_queue_hdr invalid \n");

    dump_stack();  // print callstack in the kernel log.

}

При разборке «q-> agg_queue_hdr» инструкция «ldr» будет работать там, где возникает паника ядра.

...