1

我正在尝试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

4

2 回答 2

3

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

于 2011-09-27T14:10:04.750 回答
-1

你为什么不用下面的方式修改你的代码,这样可以避免内核恐慌。

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

于 2018-08-11T13:56:12.010 回答