Перехват sys_execve () в Linux 3.x

Я пытаюсь подключить функцию sys_execve () в ядре Linux 3.x, изменив таблица системных вызовов. Проблема в том, что sys_execve () должен возвращать код ошибки только в случае неудачного выполнения. С помощью функции-оболочки, которую я использую (см. Ниже), когда sys_execve () вызывается для допустимого исполняемого файла, он выполняется нормально, и все работает нормально. Однако, когда он вызывается для несуществующего файла или чего-то еще, что вызывает состояние ошибки, вызывающая программа аварийно завершает работу с:

segfault at 3b ip 000000000000003b...

Использование strace для проверки возвращаемого значения из подключенной sys_execve () показывает -1 или ENOSYS вместо правильного кода ошибки, что сбивает меня с толку, поскольку я проверил сборку моей функции-оболочки, а также исходный код Linux для sys_execve () . Есть предложения, почему моя оболочка неправильно передает код ошибки?

asmlinkage long new_execve(const char* name, const char const** argv, const char const** envp, struct pt_regs* regs) {
    return orig_func(name, argv, envp, regs);
}
5
задан mac 4 December 2011 в 14:37
поделиться