内核崩溃与kmalloc

时间:2011-09-27 13:50:24

标签: c linux-kernel kmalloc

我试图在内核代码中使用kmalloc分配内存,实际上是在排队规则中。我想将内存分配给q->agg_queue_hdrq是排队规则,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 个答案:

答案 0 :(得分:3)

确保q指向有效的内存区域。然后,您应该可以像开始那样分配q->agg_queue_hdr

答案 1 :(得分:0)

为什么不按以下方式修改代码,这样可以避免内核崩溃。

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”指令将在发生内核恐慌的地方起作用。