从__user指针复制数据

时间:2017-09-11 20:54:49

标签: c linux pointers

我必须从基于Linux的嵌入式主板上的struct iw_point变量中的指针访问数据。 struct中包含的指针属于__user类型。但是当我尝试访问该位置时,程序会保持segfaulting。

当我查看该指针指向的内存位置时,我注意到该位置不在于必须从该位置读取的进程的地址空间(通过读取/proc/pid/maps获得): / p>

00400000-0048c000 r-xp 00000000 1f:04 83         /root/aravind/smapp
0049b000-0049c000 rw-p 0008b000 1f:04 83         /root/aravind/smapp

指针返回的位置是E80000,它不在上面返回的范围内。

这是否意味着该位置位于程序的地址空间之外,首先触发指针返回(指针由ioctl调用返回)?

1 个答案:

答案 0 :(得分:2)

SIOCGIWSCAN ioctl使用您输入的空间

iwr.u.data.pointer = p;
iwr.u.data.length = BUFSZ;

请求返回扫描的网络信息,因为ioctl无法在用户空间中分配返回区域。检查您是否正确初始化了此指针和数据长度(建议使用4k缓冲区)。如果你没有,你可能会得到这样的未定义结果。

另请确保始终检查ioctl的返回值 - 如果出现错误,请不要尝试访问返回区域。

如果你做了所有这些并且它仍然没有返回有效指针:仍然有许多驱动程序不能正确支持无线扩展。

另外一些代码会让答案变得更容易 - 正如你所说的那样,如果不经常思考和猜测就很难回答。