卸载后内核模块中未释放的内存会发生什么情况?

卸载后内核模块中未释放的内存会发生什么情况?

假设我调用了该模块,但在调用该模块kmalloc之前没有释放该内存,那么该内存会发生什么情况?rmmod是内存泄漏并且在重新启动之前完全无法使用,还是内核会自动释放该内存?

谢谢

答案1

在明确完成之前它不会被释放。分配的内存kmalloc()需要使用 释放kfree()。这块内存会一直保留到系统启动为止。

rmmod[...]在模块上调用之前没有释放该内存[...]

当您这样做时rmmodmodule_exit()将在您可以释放内存的地方执行,以防在卸载模块时必须释放内存。例如。

x() {
 z = kmalloc(...)
}
y() {
  kfree(z)
}
module_init(x)
module_exit(y)

相关内容