【问题标题】:Safe handling of userspace pointers in a driver?在驱动程序中安全处理用户空间指针?
【发布时间】: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_usercopy_from_user内核的功能吗?如果没有,是时候了解它们了。因为访问(读/写)用户内存只能使用给定的函数(以及它们的一些变体)来执行。
  • 我使用了它们,但我不知道仅此而已。在用户告诉我的任何地方写,我没有明确检查似乎很鲁莽:)
  • copy_to_usercopy_from_user 进行基本检查,他们可能无法完成复制。

标签: c linux-kernel


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 1970-01-01
    • 2018-02-27
    • 2018-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多