首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Linux内核编程:“Unable to handle Kernel NULL pointer dereference at virtual address [address]”

Linux内核编程:“Unable to handle Kernel NULL pointer dereference at virtual address [address]”
EN

Stack Overflow用户
提问于 2010-10-02 04:10:17
回答 3查看 4.3K关注 0票数 1

对于类赋值,我们编写了一个自定义的syscall,它提取有关现有进程树的某些信息。syscall在很大程度上工作正常,并获得了适当的信息。但是,有几个进程会崩溃,并显示错误消息"Unable to handle kernel NULL pointer dereference at virtual address address“。我不明白的是,在访问指针之前,我正在测试指针是否为空,然而,它仍然失败。

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

代码语言:javascript
复制
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");

运行时,程序打印:

代码语言:javascript
复制
Setting parent process
Parent process set
Parent process is not null and getting pid
Done with parent process

几次,然后

代码语言:javascript
复制
Setting parent process
Parent process set
Parent process is not null and getting pid

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

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

编辑:

目前,我注释掉了上面的代码,这样我就可以继续处理系统调用的其余部分。当我试图访问子进程的pid时(在两次成功的尝试之后),它给我一个"Unable to handle kernel paging request at virtual address“错误。据我所知,我有正确的锁来读取这些数据。但是,在访问内存之前,是否还需要执行其他操作来检查内存?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2010-10-02 04:26:23

我在这里推测,parent_process->pidNULL会不会是你“内核恐慌”的原因呢?如果是这样的话,你也可以检查一下。

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

票数 1
EN

Stack Overflow用户

发布于 2010-10-03 23:47:20

在访问之前,您似乎没有测试kbuf[i]kbuf。此外,您还可以对这些指针执行printk操作,这样就可以捕获非空但明显无效的地址(如0xbfff0c3a)

票数 1
EN

Stack Overflow用户

发布于 2020-08-21 22:21:34

我编写了一个system 调用来列出所有进程,并得到了这个错误

260.613411错误:无法在0000000000000040 260.613416 PGD 0 P4D 0 260.613422 Oops: 0000 #1 SMP PTI 260.613427 CPU: 3 PID: 1793通信: a.out污染:p OE 4.19.5 #2处处理内核NULL指针取消引用

我正在检查,如果( process->parent)然后打印它的PID,

现在,我想我应该尝试if(

->parent !=NULL)

回答问题:亲爱的兄弟,你可以尝试,ppid =task_pid_nr(子进程->父进程)来获取父进程的pid ...!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3842711

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档