我通过ioctl将指针传递给下面的结构。
typedef struct myparam_t {
int i;
char *myname;
}myparam;
在传递参数之前,我在用户空间中为myname分配内存。
在内核空间的ioctl实现中,我使用copy_from_user()来复制kspace变量中的参数(比如kval)。 call就像copy_from_user(kval,uval,sizeof(myparam)); kval& uval属于myparam *类型。
现在在ioctl函数中,我检查了 -
if (uval->myname != NULL) {
}
我认为这会导致内核崩溃或由于页面错误引起的恐慌。 但是我看到不同版本的内核有不同的行为。
使用4.1.21内核我看不到NULL检查的问题,但是对于4.10.17内核,我看到一个页面错误,导致内核崩溃。
我的问题是什么可能使NULL检查在内核4.1.21中工作? 有没有办法让我可以为4.10.17制作相同的代码?
请注意,我将此问题作为内核迁移的一部分。我们正在尝试从4.1.21版迁移到4.10.17版。在我们的代码库中可能存在许多此类用法的实例。因此,如果可能的话,我更愿意在内核中安装补丁来解决问题,而不是修复所有这样的实例。
由于 迪帕克。