我在尝试运行一段非常简单的代码时遇到了一些麻烦,而且无法找出原因。
我正在
不允许操作
尝试从.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: %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
?
不允许操作
答案 0 :(得分:1)
我也在安装Linux内核时出现“不允许操作”错误。我正在运行Sophos Anti-Virus,它有一个已知的bug。 "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
运行Update Manager并安装Linux内核。
sudo /opt/sophos-av/bin/savdctl enable
答案 1 :(得分:0)
默认情况下,root用户只能访问内核模块。
所以在insmod
之后你必须用root用户打开设备文件。
因此您必须使用sudo
来打开文件。