android系统user/userdebug版本设置selinux到SELINUX_PERMISSIVE模式

不是针对消费电子,像工控特殊行业应用,有时需要将android的selinux强行打开。
方法如下:
1、system\core\init\Android.mk

--- a/system/core/init/Android.mk
+++ b/system/core/init/Android.mk
ifneq (,$(filter userdebug eng,$(TARGET_BUILD_VARIANT)))
init_options += \
    -DALLOW_LOCAL_PROP_OVERRIDE=1 \
    -DALLOW_PERMISSIVE_SELINUX=1 \
    -DREBOOT_BOOTLOADER_ON_PANIC=1 \
    -DWORLD_WRITABLE_KMSG=1 \
    -DDUMP_ON_UMOUNT_FAILURE=1
else
init_options += \
    -DALLOW_LOCAL_PROP_OVERRIDE=0 \
 ---   -DALLOW_PERMISSIVE_SELINUX=0 \
 +++   -DALLOW_PERMISSIVE_SELINUX=1 \    //添加这行,去掉上面一行
    -DREBOOT_BOOTLOADER_ON_PANIC=0 \
    -DWORLD_WRITABLE_KMSG=0 \
    -DDUMP_ON_UMOUNT_FAILURE=0
endif

2、system\core\init\selinux.cpp

EnforcingStatus StatusFromCmdline() {
---    //EnforcingStatus status = SELINUX_ENFORCING;
+++	 EnforcingStatus status = SELINUX_PERMISSIVE;

    import_kernel_cmdline(false,
                          [&](const std::string& key, const std::string& value, bool in_qemu) {
                              if (key == "androidboot.selinux" && value == "permissive") {
                                  status = SELINUX_PERMISSIVE;
                              }
                          });
	//status = SELINUX_PERMISSIVE; //可以打开直接设置
    return status;
}

3、具体的实现代码如下:
system\core\init\selinux.cpp

enum EnforcingStatus { SELINUX_PERMISSIVE, SELINUX_ENFORCING };

EnforcingStatus StatusFromCmdline() {
    //EnforcingStatus status = SELINUX_ENFORCING;
	EnforcingStatus  status = SELINUX_PERMISSIVE;
    import_kernel_cmdline(false,
                          [&](const std::string& key, const std::string& value, bool in_qemu) {
                              if (key == "androidboot.selinux" && value == "permissive") {
                                  status = SELINUX_PERMISSIVE;
                              }
                          });
	status = SELINUX_PERMISSIVE;
    return status;
}

bool IsEnforcing() {
    if (ALLOW_PERMISSIVE_SELINUX) { //ALLOW_PERMISSIVE_SELINUX=1,进入 SELINUX_PERMISSIVE!=SELINUX_ENFORCING,返回false
        return StatusFromCmdline() == SELINUX_ENFORCING;
    }
    return true;
}

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值