【发布时间】:2012-10-10 12:01:49
【问题描述】:
我正在编写一个内核函数 foo,它以结构指针作为参数
void foo(struct struct1 *param)
{
if(param!=NULL)
{
if(param->param1!=NULL)
{
if(param->param1->bool_value)
Some code
}
}
some code
}
此函数在进程上下文中运行。
我在上述函数的这一行发生了崩溃。 if(param->param1->bool_value)。
这次崩溃是一次崩溃,并且再也没有发生过。
BADVA 地址指向用户空间地址。这个地址是param1->bool_value的地址吗?如果是这样,内核模式代码是否可以在不使用 copy_from_user 的情况下访问该地址进行读取?
【问题讨论】:
-
它闻起来像一个坏指针。
-
这两个结构的定义/初始化是什么?
-
别管一些代码,。它只是崩溃前执行的条件检查。结构参数1 { bool bool_value; //首先在 param1 中声明更多布尔值}; struct param 在其定义中包含 param1 结构
-
我很确定内核崩溃日志说明了一切。可以贴吗?
-
引用您的编辑:引用内存的指针(不指向 NULL)不一定指向有效的(在调用进程的上下文中为“有效”)内存地址。
标签: c linux memory-management linux-kernel