gpt4 book ai didi

c - Linux 内核编程 : “Unable to handle kernel NULL pointer dereference at virtual address [address]”

转载 作者:太空宇宙 更新时间:2023-11-04 03:06:58 24 4
gpt4 key购买 nike

对于类分配,我们正在编写一个自定义系统调用,它提取有关现有进程树的某些信息。系统调用在大多数情况下工作正常并获取适当的信息。但是,一些处理它会崩溃并显示错误消息“无法处理虚拟地址 [address] 处的内核 NULL 指针取消引用”。我不明白的是,我在访问它之前测试指针是否为 NULL,但它仍然失败。

示例:在下面的代码中,current_process 是指向 task_struct 的有效指针并且 k_buf 是有效的

printk("Setting parent process\n");
parent_process = current_process->real_parent;
printk("Parent process set\n");
if (parent_process != NULL) {
printk("Parent process is not null and getting pid\n");
k_buf[i].parent_pid = parent_process->pid;
} else {
k_buf[i].parent_pid = 0;
}
printk("Done with parent process\n");

运行时,程序打印:

Setting parent process
Parent process set
Parent process is not null and getting pid
Done with parent process

几次,然后

Setting parent process
Parent process set
Parent process is not null and getting pid

在抛出错误并进入内核 panic 之前。

我做错了什么?有什么想法吗?

编辑:

暂时,我注释掉了上面的代码,这样我就可以继续处理系统调用的其余部分了。当我尝试访问子进程的 pid 时(在几次成功尝试后再次访问),它给了我一个“无法处理虚拟地址的内核分页请求”错误。据我所知,我有正确的锁来读取这些数据。但是,在访问内存之前,我还需要做些什么来检查内存吗?

最佳答案

我在这里推测,parent_process->pid 是否为 NULL 可能是您“内核 panic ”的原因?如果是这样,您也可以检查一下。

要么是这样,要么是访问 k_buf 数组的第 i 元素时出现问题,即。 *(k_buf+i)

关于c - Linux 内核编程 : “Unable to handle kernel NULL pointer dereference at virtual address [address]” ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3842711/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com