在使用我的内核模块时,我无法处理内核空指针解除引用错误。 这是我想要做的事情
inputfile = filp_open(kernel_args->infile, O_RDONLY, 0); //Open a file
if(inputfile == NULL) //Check if the file exists
{
printk("\nInput file not found on drive\n");
error = -ENOENT;
goto quit;
}
但是在检查null时内核给了我一个“oops”。我不知道如何避免它,因为我正在检查null并做我应该做的事情。
答案 0 :(得分:1)
看起来你怀疑是错误的指针,你的代码中唯一可能产生这种oops的指针是kernel_args。
更多提示: - 内核是可信代码,你不应该检查NULL指针(除非你正在编写内核模块测试等) - 您的printk使用错误,您缺少printk日志级别,例如:printk(KERN_ALERT“Hello world \ n”);
答案 1 :(得分:0)
检查内核空间参数的有效性。
喜欢:
if (!kargs)
if(kargs->infile == NULL)
答案 2 :(得分:0)
由于在出现错误时filp_open不会返回NULL,因此您应该使用IS_ERR来检查错误发生。
像:
if(IS_ERR(inputfile))
goto quit;