ktime_get_real_ts64 вылетает ядро ​​в хуке ftrace - PullRequest
0 голосов
/ 07 февраля 2020

Я пишу небольшой драйвер ядра, который действует как приманка, отслеживая определенные c файлы в системе. Чтобы выполнить этот мониторинг, я перехватываю системный вызов do_sys_open с использованием инфраструктуры ftrace и записываю попытку в файл журнала вместе с отметкой времени этой попытки.

Вот функция, которая «Я» написал, чтобы получить метку времени:

static char* get_current_timestamp(void)
{ 
        struct timespec64 now;
        char* timestamp;

        timestamp = kmalloc(4096, GFP_KERNEL);

        ktime_get_real_ts64(&now);

        unsigned int temp, year, second, minute, hour;
        temp = now.tv_sec;
        year = (1970 + (temp / 31556952));
        second = temp%60;
        temp /= 60;
        minute = temp%60;
        temp /= 60;
        hour = temp%24;

        sprintf(timestamp, "GMT %d %02d:%02d:%02d\n", year, hour, minute, second);

        return timestamp;
}

Проблема в том, что когда я вызываю эту функцию из любой нормальной функции в моем драйвере, она работает отлично, но когда я вызываю ее изнутри моего хука do_sys_open ядро ​​вылетает.

После небольшой отладки я обнаружил, что если я закомментирую вызов ktime_get_real_ts64 из функции, все будет идти так, как задумано. По этой причине я попытался использовать getnstimeofday64 вместо этого, что также с треском провалилось. Версия ядра, на которой я сейчас работаю, - 5.3.0-28-generic.

Есть идеи, почему это происходит, или как я могу взять метку времени в своем sys_open хуке, не разбивая компьютер?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...