ins*_*ity 1 random kernel ioctl kernel-module linux-kernel
粗略地说,我试图从内核空间发出 IOCTL 调用,而不去用户空间。(我在 SO 中找到的所有答案都建议通过用户空间)。
具体来说,我尝试/dev/random
从内核空间(使用内核模块)填充熵池 ( ) [我知道这样做的危险;)]。从用户空间填充熵池是使用 IOCTL 完成的,例如rngaddentropy。有没有办法从内核空间做同样的事情?
您也可以从内核空间使用 ioctl。
因为 ioctl 命令RNDADDENTROPY
是针对文件的,所以它的处理应该在.unlocked_ioctl
对/dev/random
文件的操作中实现(实际上是这样实现的,参见函数random_ioctl)。
对于特定于文件的 ioctl 命令,您可以.unlocked_ioctl
直接调用文件的操作:
// Open file
struct file* f = filp_open("/dev/random", O_WRONLY, 0);
// Replace user space with kernel space
mm_segment_t old_fs = get_fs();
set_fs(KERNEL_DS);
f->f_op->unlocked_ioctl(f, RNDADDENTROPY, entropy);
// Restore space
set_fs(old_fs);
// Close file
filp_close(f, 0);
Run Code Online (Sandbox Code Playgroud)