已合并
add android FP backtrace #770
add android FP backtrace #770
已合并
liwenzhen3创建于 7月8日
liwenzhen3
liwenzhen3成员
7月8日

Thanks for your contribution to ArkUI-X!

This repository is a read-only mirror that isn't used for accepting issues or pull requests.
To join and contribute to ArkUI-X, please visit our official open source website at https://gitee.com/ArkUI-X.

Learn how to contribute >>

likedislike
Pull Request已成功合入, 合并人@openharmony_ci
(感谢 liwenzhen3 的贡献)
openharmony_ci
openharmony_ci成员
7月8日 评论:

感谢提交 Pull Requests!
Thanks for submitting a pull request.

likedislike
openharmony_ciopenharmony_ci成员
7月8日 添加了label:dco检查成功
此地不宜久刘同学
此地不宜久刘同学成员7月9日进行代码检视3
entrance/java/jni/backtrace_handler.cpp
已过期
@@ -0,0 +398,4 @@
398+ const uintptr_t stackHi = stack ? stack->end : 0;
399+ 
400+ for (uint32_t idx = 0; idx < MAX_STACK_DEPTH; ++idx) {
401+ if (stack != nullptr && (fp < stackLo || fp >= stackHi)) {
此地不宜久刘同学
此地不宜久刘同学7月9日评论:

FP 链边界检查不足:stack 为空时无校验直接解引用、非空时未覆盖 16 字节读取

FP 链遍历的边界校验不足。证据行(pos=402):if (stack != nullptr && (fp < stackLo || fp >= stackHi)) {,其后紧接 uintptr_t lr = *reinterpret_cast<uintptr_t*>(fp + 8);uintptr_t next = *reinterpret_cast<uintptr_t*>(fp);(共读 16 字节)。缺陷一:当 stack == nullptr(fp 未落在任何已知栈映射)时,该 if 因短路为 false 不 break,随后对 fp/fp+8 的解引用完全没有边界保护——注释声称的「fall back to the monotonic-up check plus the depth cap」并不成立,因为单调性检查 next <= fp 依赖 next,而 next 正来自那次无保护解引用,无法保护首次读取。缺陷二:stack != nullptr 时条件只校验 fp < stackHi,未覆盖随后读取的 16 字节;若 fp 落在栈映射末尾 16 字节内,*(fp+8) 即越过映射边界命中 guard page。影响:在崩溃处理函数这一最敏感位置触发二次 SEGV,只能靠 g_inHandler 重入保护仓促转交旧 handler,回栈随之丢失。建议:非空分支改为 fp + 2 * sizeof(uintptr_t) > stackHi 以保证整帧在栈映射内;空分支在解引用前直接 return(不遍历)或至少加对齐/范围最小健全性检查。

Severity: warning

likedislike
liwenzhen3
liwenzhen3成员
7月13日 评论:

已修改

System
系统消息系统
7月13日 评论:

changed this line on 3756adb7 view diff detail

此地不宜久刘同学
此地不宜久刘同学成员7月9日进行代码检视3
entrance/java/jni/backtrace_handler.cpp
已过期
@@ -0,0 +372,4 @@
372+ default: AppendLit(b, "?"); break;
373+ }
374+ AppendLit(b, "), si_code ");
375+ AppendDec(b, info ? static_cast<uint32_t>(info->si_code) : 0);
此地不宜久刘同学
此地不宜久刘同学7月9日评论:

si_code 强转 uint32_t 导致负值(如 SIGABRT 的 SI_TKILL)打印成无意义大数

si_code 类型为 int,Linux 上可为负值(如 SI_TKILL == -6,由 raise()/pthread_kill()/abort() 触发的 SIGABRT 即取此值;SI_QUEUE/SI_TIMER/SI_MESGQ/SI_ASYNCIO/SI_SIGIO 同样为负)。证据行(pos=376):AppendDec(b, info ? static_cast<uint32_t>(info->si_code) : 0);,此处 static_cast<uint32_t>(-6) 变为 4294967290,而 AppendDec 仅按无符号十进制输出。影响:崩溃头部丢失关键诊断字段——对 SIGABRT 这类高频崩溃信号,「si_code 4294967290」毫无意义,无法识别其由 SI_TKILL(abort/raise)所致,其余负值 si_code 同样被打印成 ~4.29e9 大数,直接影响崩溃归因。建议:新增带符号十进制追加函数(如 AppendDecSigned(DumpBuffer&, int32_t),负值先输出 - 再取绝对值),并将本行改为 AppendDecSigned(b, info ? info->si_code : 0);,去掉 uint32_t 强转。注:同函数内 AppendDec(b, static_cast<uint32_t>(sig)); 不受影响,信号号恒为正。

Severity: info

likedislike
liwenzhen3
liwenzhen3成员
7月13日 评论:

已修改

System
系统消息系统
7月13日 评论:

changed this line on 3756adb7 view diff detail

liwenzhen3liwenzhen3成员
7月9日 强制推送  1 个提交:bcaee622-add android FP backtrace
此处折叠了55条消息 查看更多
sunbeessunbees成员
7月14日 将sunbees设为评审人
sunbeessunbees成员
7月14日 通过了评审
liwenzhen3
liwenzhen3成员
7月14日 评论:

submit

likedislike
openharmony_ciopenharmony_ci成员
7月14日 关闭了关联的issue
openharmony_ciopenharmony_ci成员
7月14日 合入了pull request,合并节点 SHA:b329b4a1ffb7310f4a6a375854a63b6a27f75a41