#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-ingoff
? Если нет, то встроено ли ядро LinuxCONFIG_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 решила проблему…