为什么我在尝试安装 Linux 内核模块时遇到"operation not permitted"?



我在尝试运行非常简单的代码时遇到了一些麻烦,找不到可能是什么原因。

我得到

操作不允许

尝试从.ko文件(KO_NAME)安装Linux内核模块。

这是代码的摘录:

if (strcmp(argv[1], "-init")==0) {
    fd=open(KO_NAME, O_RDONLY|O_CLOEXEC);
    if (fd<0) {
      perror("Error");
      printf("Error number: %dn", errno);
    } else {
      printf("fd: %dn", fd);
    }
    uid=getuid();
    if (uid!=ROOT_UID) {
      printf("Error: not rootn");
      return -1;
    }
    if (access(KO_NAME, F_OK)==-1) {
      printf("Error: File "%s" doesn't existn", argv[2]);
      return -1;
    }
    rc=syscall(__NR_finit_module, fd, "", 0);
      close(fd);
      if (rc!=0) {
          perror("Error");
          printf("rc=%dn", rc);
          printf("Error number: %dn", errno);
      }

这是运行时的结果:

fd: 3
rc=-1
Error number: 1

为什么我会遇到错误 number 1

操作不允许

我也没有"允许操作"安装Linux内核的错误。我正在运行Sophos Anti-Virus,其中有一个已知的错误。"创建文件延迟的30延迟和"操作不允许"使用Fanotify和CIFS - 这是一个内核问题,Sophos正在与Linux社区合作解决此问题"

要解决这个问题,我以前禁用Sophos-av,并在每个Linux内核安装后启用它。我只在Linux内核安装期间而不是在常见更新中遇到了这个问题。

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

运行更新管理器并安装Linux内核。

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

内核模块只能由默认用户访问。因此,在insmod之后,您必须使用root用户打开设备文件。

因此,您必须使用sudo打开文件。

相关内容

最新更新