5.0.3 Release分支系统开机过程日志出现用户空间触发的panic reboot事件

[pid=1][Init][WARNING][init_signal_handler.c:43]Child process foundation(pid 1940) exit with signal : 11

[pid=1][Init][WARNING][init_signal_handler.c:54]Service warning foundation, SIGCHLD received, pid:1940 uid:5523 status:11.

[pid=1][Init][INFO][init_common_service.c:803]ServiceReap info foundation pid 1940.

[pid=1][Init][ERROR][init_common_service.c:851]ServiceReap error critical service crashed foundation 4

[pid=1][Init][INFO][init_reboot.c:24]ExecReboot panic

日志对应的源码位置

base/startup/init/services/init/init_common_service.c

if (service->attribute & SERVICE_ATTR_CRITICAL) { // critical
        if (!CalculateCrashTime(service, service->crashTime, service->crashCount)) {
            INIT_LOGE("ServiceReap error critical service crashed %s %d", service->name, service->crashCount);
            service->pid = tmp;
            ServiceReapHookExecute(service);
            service->pid = -1;
            ExecReboot("panic");
        }
    }

foundation进程因为短时间内多次crash,系统自己执行了reboot动作,相当于一次开机得重启多次。

在faultlog中又有如下的cppcrash栈信息,可见分布式数据服务udmf在初始化的时候崩了,崩溃原因是stack-buffer-overflow,线程栈溢出导致sa服务初始化crash

Pid:1259
Uid:5523
Process name:foundation
Process life time:6s
Reason:Signal:SIGSEGV(SEGV_ACCERR)@0x0000007f2888eff0  current thread stack low address = 0x0000007f2888f000, probably caused by stack-buffer-overflow
LastFatalMessage:ohos.aafwk.AbilityManager
Fault thread info:
Tid:1348, Name:OS_IPC_2_1348
#00 pc 0000000000064e80 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::PresetTypeDescriptors::InitDescriptors()+97220)(c555ec13e579f68cd22209a2dce4f09c)
#01 pc 000000000004d294 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::PresetTypeDescriptors::PresetTypeDescriptors()+28)(c555ec13e579f68cd22209a2dce4f09c)
#02 pc 00000000000c1964 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::PresetTypeDescriptors::GetInstance() (.cfi)+84)(c555ec13e579f68cd22209a2dce4f09c)
#03 pc 00000000000483b0 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::UtdClient::Init()+72)(c555ec13e579f68cd22209a2dce4f09c)
#04 pc 00000000000481c8 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::UtdClient::UtdClient()+68)(c555ec13e579f68cd22209a2dce4f09c)
#05 pc 0000000000048c18 /system/lib64/platformsdk/libutd_client.z.so(OHOS::UDMF::UtdClient::GetInstance() (.cfi)+84)(c555ec13e579f68cd22209a2dce4f09c)

去看看InitDescriptors函数,确实有一个需要分配巨大栈内存的变量。

foundation/distributeddatamgr/udmf/framework/innerkitsimpl/data/preset_type_descriptors.cpp

void PresetTypeDescriptors::InitDescriptors()
{
    typeDescriptors_ = {
        {"general.entity",
         {},
         {},
         {},
         "Base type for physical hierarchy.",
         REFERENCE_URL,
         ""},
        {"general.object",
         {},
         {},
         {"*/*"},
         "Base type for logical hierarchy.",
          ......

那么问题就是显而易见的了,在vendor仓去修改栈大小的编译配置,这个问题就是因为栈大小的配置缺失,导致启动过程中SA服务出现高频crash,让系统重启了

vendor/openvalley/rk3568/config.json配置文件中添加"device_stack_size": 8388608,字段

  "type": "standard",
  "version": "3.0",
  "board": "rk3568",
  "api_version": 8,
  "enable_ramdisk": true,
  "enable_absystem": false,
  "build_selinux": false,
  "build_seccomp": false,
  "device_stack_size": 8388608,
  "inherit": [ "productdefine/common/inherit/rich.json", "productdefine/common/inherit/chipset_common.json" ],

 

Logo

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

更多推荐