我正在编写一个Linux驱动程序,它为内存分配一些内存和用户空间应用程序mmap()
。
现在我正在编写该模块的退出处理程序,我正在试图弄清楚什么是安全假设。
首先,假设在调用内核模块退出处理程序时所有内存都未映射(无论是应用程序还是内核),是否可以安全地假设?或者,在释放内存之前,我是否必须在内核驱动程序中手动取消映射?
我问这个,因为内核应该知道模块是否正在退出,内核也处理取消映射过程。如果内核在调用退出处理程序之前处理取消映射,那么我就可以释放内存。如果这是真的并且如果用户空间应用程序试图访问该内存,则应用程序将分段错误。这是因为虚拟地址不再指向有效的物理内存,或者进程没有访问该页面上的虚拟地址的权限(假设内核未映射内存)。如果内核驱动程序取消映射内存,则会发生同样的情况。这是真的吗?
答案 0 :(得分:1)
在此阶段退出是不安全的。只是否认卸货。
这不是自动的,当进程执行mmap()
时,您必须增加模块使用次数。
如果你想要粗鲁,请杀死用户进程。