最近调试驱动,发现更新驱动ko,并且Push进去发现不加载,非常的奇怪,后来进去看权限,发现不对,
于是修改为644后重启就OK了,最后找代码分析,原来是在
system/core/init/util.c 加多所谓的安全条件,本来就是自己个人调试已经很安全了,于是修改代码:
diff --git a/init/util.c b/init/util.c
index 743748b..6d168cf 100755
--- a/init/util.c
+++ b/init/util.c
@@ -151,23 +151,11 @@ void *read_file(const char *fn, unsigned *_sz)
char *data;
int sz;
int fd;
- struct stat sb;
data = 0;
fd = open(fn, O_RDONLY);
if(fd < 0) return 0;
- // for security reasons, disallow world-writable
- // or group-writable files
- if (fstat(fd, &sb) < 0) {
- ERROR("fstat failed for '%s'\n", fn);
- goto oops;
- }
- if ((sb.st_mode & (S_IWGRP | S_IWOTH)) != 0) {
- ERROR("skipping insecure file '%s'\n", fn);
- goto oops;
- }
-
sz = lseek(fd, 0, SEEK_END);
if(sz < 0) goto oops;
其实:
S_IRUSR | 用户可以读 |
S_IWUSR | 用户可以写 |
S_IXUSR | 用户可以执行 |
S_IRWXU | 用户可以读、写、执行 |
S_IRGRP | 组可以读 |
S_IWGRP | 组可以写 |
S_IXGRP | 组可以执行 |
S_IRWXG | 组可以读写执行 |
S_IROTH | 其他人可以读 |
S_IWOTH | 其他人可以写 |
S_IXOTH | 其他人可以执行 |
S_IRWXO | 其他人可以读、写、执行 |
S_ISUID | 设置用户执行ID |
S_ISGID | 设置组的执行ID |
如果我们修改为:O_CREAT, S_IRWXU | S_IROTH | S_IXOTH | S_ISUID