C 驱动程序中用户空间指针的安全处理?

C 驱动程序中用户空间指针的安全处理?,c,linux-kernel,C,Linux Kernel,我正在编写一个ioctl驱动程序,它需要向用户空间读写数据。对于可视化,下面是驱动程序调用中的一个典型参数: typedef struct { unsigned int* src; unsigned int* dst; unsigned int buffer_size; unsigned int key[8]; } aes_data 我不太了解虚拟内存的工作原理,但我认为这是有风险的。用户空间进程可以提供指向它不拥有的内存的指针。提供的缓冲区大小也可能导致其他进程的内存溢出。如何在驱动程序中负

我正在编写一个ioctl驱动程序,它需要向用户空间读写数据。对于可视化,下面是驱动程序调用中的一个典型参数:

typedef struct {
unsigned int* src;
unsigned int* dst;
unsigned int buffer_size;
unsigned int key[8];
} aes_data
我不太了解虚拟内存的工作原理,但我认为这是有风险的。用户空间进程可以提供指向它不拥有的内存的指针。提供的缓冲区大小也可能导致其他进程的内存溢出。如何在驱动程序中负责任地处理这些用户空间指针

如何在驱动程序中负责任地处理这些用户空间指针


你没有,只是因为没有办法检查指针是否指向任何有效的东西。由ioctl()的用户提供适当的参数。如果他们没有做到这一点,那么他们的运气就不好了。

你知道
copy\u-to\u-user
copy\u-from\u-user
内核函数吗?如果没有,现在是了解它们的时候了。因为访问(读/写)用户内存应该只使用给定的函数(以及它们的一些变体)来执行。我使用了它们,但我不知道这就是所需要的全部。无论用户告诉我在哪里写,没有对我的部分进行明确的检查似乎是相当鲁莽的:)
copy_to_user
copy_from_user
进行基本检查,他们可能无法完成复制。