无法处理内核空指针取消引用

时间:2012-12-27 04:37:31

标签: c oop linux-kernel kernel-module kernel

在使用我的内核模块时,我无法处理内核空指针解除引用错误。 这是我想要做的事情

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并做我应该做的事情。

3 个答案:

答案 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;