环境

系统:OpenHarmony 5.0.0 release

设备:开发者手机

 

问题描述

在updater_service中添加一个自定义组件的时候,出现关于sanitize cfi的编译报错。

 

问题分析

根据报错信息defined(sanitize) && defined(sanitize.cfi) && sanitize.cfi == true,说明新增组件编译模块需要添加sanitize和sanitize.cfi等定义,源码中搜索BUILD.gn文件相关信息,可知编译模块中添加相关信息格式:

  sanitize = {
    cfi = true
    cfi_cross_dso = true
    debug = false
  }

对应BUILD.gn中的编译模块中添加上述定义就可以解决该报错问题。

 

根因分析

OpenHarmony中4.x以后编译系统增加了sanitizer检查机制,参考:docs/en/device-dev/subsystems/subsys-build-reference.md

相关配置文件在vendor产品仓下的security_config/sanitizer_check_list.gni,

该配置文件中的enable_cfi_part_and_bypass_list字段配置了哪些部件会检查sanitize信息,以及部件中哪些组件sanitize检查直接pass,即不用在BUILD.gn中配置sanitize相关信息。

可以看到update_service部件下的update和updateservice组件在bypass列表,那么这两个组件即不用添加sanitize配置信息,如下图:

 

分析总结

有时候我们可能并不知道OpenHarmony新版本新增了哪些规则,那么就需要通过编译时的报错信息去分析build子系统来定位。

Logo

社区规范:仅讨论OpenHarmony相关问题。

更多推荐