2017-02-17 22 views
0

У меня возникли проблемы при попытке запустить очень простой кусок кода и не удалось выяснить, в чем причина.Почему при попытке установить модуль ядра 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?

операция не разрешена

+3

Вы пробовали '/ sbin/insmod '? Возможно, файл настроек не подходит для вашего ядра. – Tsyvarev

+1

FYI: существует оболочка 'finit_module()' для этого syscall, см. [Man init_module] (http://man7.org/linux/man-pages/man2/init_module.2.html). –

ответ

1

Я "Операция не допускается" ошибки при установке ядра Linux тоже. Я запускаю Sophos Anti-Virus, у которого есть известная ошибка. "30s delay of file create and "Operation not permitted" errors with fanotify and cifs – This is a kernel issue and Sophos is working with the Linux community to fix this issue"

Чтобы обойти эту проблему, я отключу sophos-av раньше и включите ее после установки каждого ядра Linux. Я столкнулся с этой проблемой только во время установки ядра Linux, а не во время обычных обновлений.

sudo /opt/sophos-av/bin/savdctl disable

Run Update Manager и установить Linux ядра.

sudo /opt/sophos-av/bin/savdctl enable

0

модули ядра могут быть доступны только пользователем корня по умолчанию. Итак, после insmod вам нужно открыть файл устройства с помощью пользователя root.

Для открытия файла вам необходимо использовать sudo.