Я пытаюсь подключить функцию 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);
}