У меня возникли проблемы при попытке запустить очень простой кусок кода и не удалось выяснить, в чем причина.Почему при попытке установить модуль ядра Linux я получаю «операцию не разрешен»?
Я получаю операцию
не допускается
при попытке установить модуль ядра Linux из .ko
файла (KO_NAME).
Это отрывок кода:
if (strcmp(argv[1], "-init")==0) {
fd=open(KO_NAME, O_RDONLY|O_CLOEXEC);
if (fd<0) {
perror("Error");
printf("Error number: %d\n", errno);
} else {
printf("fd: %d\n", fd);
}
uid=getuid();
if (uid!=ROOT_UID) {
printf("Error: not root\n");
return -1;
}
if (access(KO_NAME, F_OK)==-1) {
printf("Error: File \"%s\" doesn't exist\n", argv[2]);
return -1;
}
rc=syscall(__NR_finit_module, fd, "", 0);
close(fd);
if (rc!=0) {
perror("Error");
printf("rc=%d\n", rc);
printf("Error number: %d\n", errno);
}
и это результат при запуске:
fd: 3
rc=-1
Error number: 1
Почему я получаю ошибку number 1
?
операция не разрешена
Вы пробовали '/ sbin/insmod'? Возможно, файл настроек не подходит для вашего ядра. –
Tsyvarev
FYI: существует оболочка 'finit_module()' для этого syscall, см. [Man init_module] (http://man7.org/linux/man-pages/man2/init_module.2.html). –