Детектор утечки памяти ядра

#c #linux-kernel #kernel

#c #linux-ядро #ядро

Вопрос:

Я включил опцию «Детектор утечки памяти ядра» при взломе ядра и перестроил / перезагрузил систему, на данный момент файл kmemleak существует в папке / sys / kernel / debug, но, похоже, я не могу запустить сканирование с помощью «echo scan> / sys / kernel / debug / kmemleak», ясмонтировал файлы debugfs в /sys/kernel/ debug, но когда я пытаюсь запустить сканирование, он выдает мне «-bash: echo: ошибка записи: устройство или ресурс заняты». Я предполагаю, что это связано с тем, что у меня нет разрешения на запись внутри папки / sys, даже если я являюсь пользователем root. Есть предложения, как решить эту проблему? Большое спасибо.

Я пробовал

Комментарии:

1. Обработчик записи kmemleak sysfs возвращает EBUSY , если kmemleak отключен. Вы отключили kmemleak с помощью echo-ing off ? Если нет, то встроено ли ядро Linux CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF=y ? Вы пробовали загружать kmemleak=on переданные в Linux bootargs ядра / cmdline?

2. Я не отключил эхо, CONFIG_DEBUG_KMEMLEAK_DEFAULT_OFF не установлен (я проверил свой файл .config), также я попытался перезагрузить «kmemleak= on» и я сделал «echo scan> /sys / kernel / debug / kmemleak», как только я перезагрузился, но он по-прежнему выдает ту же ошибку.

Ответ №1:

При использовании kmemleak вам нужно проверить несколько вещей.

Проверьте, передаются ли какие-либо загрузочные команды или параметры командной kmemleak=off строки.

В вашем журнале загрузки проверьте, есть ли у вас какие-либо журналы, связанные с kmemleak, особенно что-то вроде приведенных ниже журналов

 kmemleak: Kernel memory leak detector disabled
kmemleak: Early log buffer exceeded (919), please increase DEBUG_KMEMLEAK_EARLY_LOG_SIZE
 

Скорее всего, я думаю, вам нужно настроить CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE . Если во время загрузки размер журнала для kmemleak увеличивается сверх предела, установленного в конфигурации ядра Linux, kmemleak отключается.

Итак, настройте CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE и увеличьте размер. Эта опция также kernel hacking включена . Я использую исходный код ядра 4.19.9 и прилагаю скриншот для справки. Maximum kmemleak early log entries это поле, вам может потребоваться установить для него некоторое более высокое значение (например, 4096).

введите описание изображения здесь

Комментарии:

1. Кстати, CONFIG_DEBUG_KMEMLEAK_EARLY_LOG_SIZE был переименован в CONFIG_DEBUG_KMEMLEAK_MEM_POOL_SIZE в версии 5.5. Кроме того, я обнаружил, что явная передача kmemleak=on решила проблему…