Linux kernel 如何在fib_frontend.c中的ip_rt_ioctl中复制设备名称

Linux kernel 如何在fib_frontend.c中的ip_rt_ioctl中复制设备名称,linux-kernel,Linux Kernel,我对ip\u rt\u ioctl函数有一个疑问 在添加路由的情况下,首先为结构struct rtentry创建一个copy_from_user,然后在rtentry_to_fib_config函数中使用复制的数据,包括rtentry.rt_dev字段,该字段通常是设备名称 我的理解是,从用户那里复制是浅拷贝。因此,由于rtentry.rt_dev字段又是一个字符指针。因此,指针的内容很可能不会被复制。 因此,即使在复制之后,设备名称仍将是指向用户空间地址的指针 那么从内核空间访问用户空间地址正

我对ip\u rt\u ioctl函数有一个疑问

在添加路由的情况下,首先为结构struct rtentry创建一个copy_from_user,然后在rtentry_to_fib_config函数中使用复制的数据,包括rtentry.rt_dev字段,该字段通常是设备名称

我的理解是,从用户那里复制是浅拷贝。因此,由于rtentry.rt_dev字段又是一个字符指针。因此,指针的内容很可能不会被复制。 因此,即使在复制之后,设备名称仍将是指向用户空间地址的指针


那么从内核空间访问用户空间地址正确吗

当内核绑定到该进程的上下文时,可以从内核空间引用用户空间地址(对于系统调用处理程序来说是这样)。在这种情况下,设置了正确的页表,可以安全地引用用户进程的内存

但是,您应该始终检查地址的有效性,或者使用执行此操作的
copy\u from\u user()