为何mount()系统调用无法识别selinuxfs路径?Android移植问题
Android x86移植中selinuxfs挂载失败问题
环境信息
- 内核分支:
android13-5.15(内核版本5.15) - 用户空间:基于LineageOS master分支源码构建
- 目标平台:x86设备
问题现象
第一阶段init程序执行早期挂载操作时,tmpfs、devpts、sysfs三个挂载均正常完成,但挂载selinuxfs时系统调用返回Invalid argument(无效参数)。相关代码片段如下:
CHECKCALL(mount("tmpfs", "/dev", "tmpfs", MS_NOSUID, "mode=0755")); // 挂载tmpfs [...] CHECKCALL(mount("devpts", "/dev/pts", "devpts", 0, NULL)); // 挂载devpts [...] CHECKCALL(mount("sysfs", "/sys", "sysfs", 0, NULL)); // 挂载sysfs CHECKCALL(mount("selinuxfs", "/sys/fs/selinux", "selinuxfs", 0, NULL)); // 挂载SELinuxFS - 此处执行失败
调试情况
在内核负责处理挂载的do_mount函数中添加printk调试语句,记录挂载目录信息:
long do_mount(const char *dev_name, const char *dir_name, const char *type_page, unsigned long flags, void *data_page) { struct path path; int ret; ret = user_path_at(AT_FDCWD, dir_name, LOOKUP_FOLLOW, &path); printk("DIR_NAME: %s",path.dentry->d_iname); // 输出挂载目录名 if (ret) return ret; ret = path_mount(dev_name, &path, type_page, flags, data_page); path_put(&path); return ret; }
调试结果显示:前三个挂载能输出正确的目录名,但selinuxfs挂载时返回(efault)。
已确认的前提条件
/sys/fs路径已存在- 同一份源码在谷歌goldfish模拟器中可正常构建并运行
- 内核已配置并启用SELinux及SELinuxFS支持
内容的提问来源于stack exchange,提问作者TheNXGuy
相关产品推荐
相关产品推荐

