アンロード後にカーネルモジュールの解放されていないメモリはどうなりますか?

アンロード後にカーネルモジュールの解放されていないメモリはどうなりますか?

モジュールを呼び出したが、kmallocモジュールを呼び出す前にメモリを解放しなかったと仮定すると、メモリはどうなりますか?rmmodメモリが漏れて再起動するまで完全に使用できませんか?それともカーネルはそのメモリを自動的に解放しますか?

ありがとう

答え1

明示的に完了するまでリリースされません。割り当てられたメモリをkmalloc()解放する必要がありますkfree()。このメモリはシステムが起動するまで保持されます。

rmmod[...] モジュールを呼び出す前にメモリは解放されません。 [...]

rmmodこれにより、module_exit()モジュールがアンロードされたときにメモリを解放する必要がある場合に備えて、メモリを解放できる場所で実行されます。例えば。

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

関連情報