爲了測試內核在泄漏內存時的行爲,我正在編寫一個內核模塊,用於連續分配內存。代碼看起來像如何確定Linux內核模塊是否泄漏內存
int bytesLeaked = 128000;
char *var = kmalloc(bytesLeaked, GFP_KERNEL);
if (var != NULL)
printk("leaked %d bytes at address %x\n", bytesLeaked, (unsigned int)var);
此代碼位於init_module中。我有以下問題
- 如何確定代碼是否泄漏了內存? lsmod並沒有透露太多。
- 互聯網上的教程只顯示init_module和exit_module中的代碼。如果我希望在插入模塊之後但退出之前的一段時間內完成內存分配。
- 我是否可以編寫泄漏內存的代碼,只有當用戶給出指令時纔會這樣做,例如,用戶空間程序是否可以執行系統調用,從而導致模塊泄漏內存?當它分配的內存塊(諸如與
kmalloc()
),然後輸給該存儲器塊的所有參考文獻而沒有第一釋放它
re 1:內存泄漏的定義屬性是從不釋放分配,不一定沒有對它的引用。另外,'var'可能會在某個時間點超出範圍,屆時您的引用計數將變爲0。 (讓我們忽略「參考」在C語言中沒有明確定義的事實。) – Karmastan 2011-05-06 19:18:30
謝謝。我試圖編寫線程的產卵,但代碼非常複雜http://www.scs.ch/~frey/linux/kernelthreads.html。你能否提供一個關於如何在沒有系統調用的情況下通過用戶空間事件觸發內存分配的見解。 – kakinada 2011-05-09 07:08:26
KEDR支持2.6.31或更新的內核版本。礦是2.6.28。看起來像KEDR不能使用。我會嘗試找到類似的內核工具,我有 – kakinada 2011-05-09 07:24:07