我试图在内核代码中使用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
分配内存?
答案 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”指令将在发生内核恐慌的地方起作用。