LINUX.ORG.RU

execve in kernel space


0

0

kernel 2.6 проблемы с ниже приведенным кодом (на ядрах 2.4 код работает)

#include <linux/kernel.h> #include <linux/module.h> #include <linux/fs.h> #include <asm/segment.h> #include <asm/uaccess.h> #include <linux/unistd.h>

// организую системный вызов static inline _syscall3(int, execve, char *, file, char **, argv, char**, envp) ;

int init_module() { char *ar[3] ; // к примеру будет выполнять команду ls ar[0] = "/bin/ls" ; ar[1] = "/etc" ; ar[2] = 0 ; // для выполнения системного вызова переходим в user space static mm_segment_t fs ; fs = get_fs() ; set_fs(KERNEL_DS) ; // вызываем execve(*ar, ar, NULL) ; set_fs(fs) ; printk("MOD_NAME loaded\n") ; return 1 ; }

void cleanup_module() { return ; }

компилиться код без проблем, но при загрузке в ядро выводиться сообщение insmod: error inserting 'mod.o': -1 Unknown symbol in module когдаже я комментирую строку execve(*ar, ar, NULL) ; модуль загружаеться без проблем. Подскажите плз где ошибка? может есть какието иные пути запуска системных вызовов из kernel space?

anonymous

вы не можете вот так наивно использовать execve в kernel space.

прежде всего вам нужно сделать

        #define __KERNEL_SYSCALLS__

чтобы получить определение execve(). но ничего хорошего
у вас из этого все равно не выйдет, нужно хорошо понимать,
что происходит.

пользуйтесь call_usermodehelper().

idle ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.