正确释放和取消映射内核内存
我正在编写一个Linux驱动程序,它分配一些内存和用户空间应用程序mmap()
的内存。
现在我正在为该模块编写退出处理程序,并且我正在尝试找出哪些是安全的假设。
首先,当内核模块退出处理程序被调用时,可以安全地假设所有内存都未被映射(无论是由应用程序还是由内核)? 或者在释放内存之前必须在内核驱动程序中手动取消映射?
我问这个问题,因为内核应该知道模块是否正在退出,而内核也会处理解映射过程。 如果内核在调用退出处理程序之前处理解映射,那么我可以释放内存。 如果这是真的,并且如果用户空间应用程序试图访问该内存,那么应用程序会出现分段错误。 这是因为虚拟地址不再指向有效的物理内存,或者进程没有权限访问该页面上的虚拟地址(假设内核未映射内存)。 如果内核驱动程序未映射内存,也会发生同样的情况。 这是真的?
在这个阶段退出并不安全。 只是否认卸货。
这不是自动的,当进行一个mmap()
时你必须增加你的模块使用计数。
如果你想粗暴,杀死用户进程。
链接地址: http://www.djcxy.com/p/70317.html