gpt4 book ai didi

linux - 授予模块参数 S_IWUGO 权限会导致编译错误(而 S_IRUGO 或 S_IXUGO 则不会)- 为什么?

转载 作者:太空宇宙 更新时间:2023-11-04 10:49:55 27 4
gpt4 key购买 nike

我写了一个简单的内核模块来学习内核模块的 module_param 特性。但是,如果我为 perm 字段授予 S_IWUGO、S_IRWXUGOS_IALLUGO 权限,我会得到以下编译错误:

[root@localhost param]# make -C $KDIR M=$PWD modules 
make: Entering directory `/usr/src/kernels/3.11.10-301.fc20.i686+PAE'
CC [M] /root/ldd/misc/param/param/hello.o
/root/ldd/misc/param/param/hello.c:6:168: error: negative width in bit-field ‘<anonymous>’
module_param(a, int, S_IWUGO);
^
make[1]: *** [/root/ldd/misc/param/param/hello.o] Error 1
make: *** [_module_/root/ldd/misc/param/param] Error 2
make: Leaving directory `/usr/src/kernels/3.11.10-301.fc20.i686+PAE'

S_IRUGO 或 S_IXUGO 编译成功(权限不包含写入权限)。我想我一定做错了什么,因为据我所知,wrtie 许可是合法的。我在这里做错了什么?

程序:

#include<linux/module.h>
#include<linux/stat.h>

int a = 2;

module_param(a, int, S_IXUGO);

int f1(void){

return 0;
}

void f2(void){

}

module_init(f1);
module_exit(f2);

MODULE_AUTHOR("lavya");
MODULE_LICENSE("GPL v2");
MODULE_DESCRIPTION("experiment with parameters");

最佳答案

Linux 不接受 S_IWOTH允许。如果你跟随 module_param 后面的宏链,你会到达 __module_param_call其中包括:

BUILD_BUG_ON_ZERO((perm) < 0 || (perm) > 0777 || ((perm) & 2))

S_IWOTH == 2 所以测试失败。

位域中的负宽度 错误仅仅是 implementation of BUILD_BUG_ON_ZERO 的产物

出于安全原因,Linux 可能拒绝让模块参数世界可写。您应该能够使用更窄的权限,例如 S_IWUSR | S_IWGRP.

关于linux - 授予模块参数 S_IWUGO 权限会导致编译错误(而 S_IRUGO 或 S_IXUGO 则不会)- 为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31395602/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com