【发布时间】:2017-11-15 11:14:50
【问题描述】:
我正在编写一个需要向用户空间读写数据的 ioctl 驱动程序。为了可视化,下面是驱动调用中的一个典型参数:
typedef struct {
unsigned int* src;
unsigned int* dst;
unsigned int buffer_size;
unsigned int key[8];
} aes_data
我不太熟悉虚拟内存的工作原理,但我认为这里存在风险。用户空间进程可能已经提供了一个指向它不拥有的内存的指针。提供的缓冲区大小也可能导致溢出到其他进程的内存中。如何在我的驱动程序中负责任地处理这些用户空间指针?
【问题讨论】:
-
你知道
copy_to_user和copy_from_user内核的功能吗?如果没有,是时候了解它们了。因为访问(读/写)用户内存只能使用给定的函数(以及它们的一些变体)来执行。 -
我使用了它们,但我不知道仅此而已。在用户告诉我的任何地方写,我没有明确检查似乎很鲁莽:)
-
copy_to_user和copy_from_user进行基本检查,他们可能无法完成复制。
标签: c linux-kernel