Android缺陷分析:cnss-daemo进程崩溃
高通Android 7.1遇到cnss-daemo进程崩溃,分析过程如下:
Log信息:(红色是关键信息)
pid: 6577, tid: 6577, name: cnss-daemon >>> /system/bin/cnss-daemon <<<
signal 6 (SIGABRT) , code -6 (SI_TKILL), fault addr --------
x0 0000000000000000 x1 00000000000019b1 x2 0000000000000006 x3 0000000000000008
x4 000000000000006e x5 0000000000800000 x6 0000007fb7736000 x7 0000000000000000
......
backtrace:
#00 pc 000000000006b790 /system/lib64/libc.so (tgkill+8)
#01 pc 0000000000068c14 /system/lib64/libc.so (pthread_kill+64)
#02 pc 0000000000024180 /system/lib64/libc.so (raise+24)
#03 pc 000000000001cbec /system/lib64/libc.so (abort+52)
#04 pc 0000000000002a4c /system/bin/cnss-daemon
#05 pc 00000000000004dc [vdso:0000007fb7737000]
#06 pc 0000000000002730 /system/bin/cnss-daemon
#07 pc 0000000000002058 /system/bin/cnss-daemon
#08 pc 000000000001a7d8 /system/lib64/libc.so (__libc_init+88)
#09 pc 0000000000001e40 /system/bin/cnss-daemon
问题分析:
1、addr2line找问题代码行:
addr2line -e cnss-daemon -f (pc地址)
执行命令
prebuilts/gcc/linux-x86/aarch64/aarch64-linux-android-4.9/bin/aarch64-linux-android-addr2line -e out/target/product/msm8953_64_box3/obj/EXECUTABLES/cnss-daemon_intermediates/PACKED/cnss-daemon -f 0000000000002a4c
wsvc_debug_init
/proc/self/cwd/vendor/qcom/proprietary/wlan/cnss-daemon/debug.c:139
定位代码在文件debug.c,函数wsvc_debug_init的139行。
debug.c文件
static void wsvc_debug_sigsegv_handler(int signum)
{wsvc_printf_err("SIGSEGV Crashed! %d\n", signum);abort(); // 139行return;
}
cnss-daemon截取了signal,看不到真正崩溃的位置,拿掉signal截取部分,复现问题,获取tombstone。
tombstone片段:
Fatal signal 11 (SIGSEGV), code 1,
fault addr 0x8015912764 in tid 19936 (cnss-daemon)
继续使用addr2line找崩溃的代码行。
nl_loop_process_msg
vendor/qcom/proprietary/wlan/cnss-daemon/nl_loop.c:261
(图:修改前后对比差异)
2、代码分析
崩溃在函数NLMSG_OK:
宏NLMSG_OK(nlh,len)用于判断消息是否有len这么长。
#define NLMSG_OK(nlh,len) ((nlh)->nlmsg_len - NLMSG_SPACE((len)))
#define NLMSG_SPACE(len) NLMSG_ALIGN(NLMSG_LENGTH(len))
#define NLMSG_LENGTH(len) ((len)+NLMSG_ALIGN(sizeof(struct nlmsghdr)))
从函数NLMSG_OK 判断nlh指向非法内存地址,nlh从NLMSG_NEXT取到。宏NLMSG_NEXT(nlh,len)用于得到下一个消息的首地址,同时len也减少为剩余消息的总长度。
#define NLMSG_NEXT(nlh,len) ((len) -= NLMSG_ALIGN((nlh)->nlmsg_len), \(struct nlmsghdr*)(((char*)(nlh)) + NLMSG_ALIGN((nlh)->nlmsg_len)))
当len<=(nlh)->nlmsg_len,获取nlh指向非法地址。
3、解决方法
获取nlh前比较len和nlh->nlmsg_len。
if (u_len <= NLMSG_ALIGN(nlh->nlmsg_len)) {wsvc_printf_err("%s: no enough message, len: %u, nlmsg_len: %u",__func__,u_len, nlh->nlmsg_len);break;
}nlh = NLMSG_NEXT(nlh, u_len);
Android缺陷分析:cnss-daemo进程崩溃相关推荐
- android 行 64,android缺陷分析:内核空指针
高通Android 7.1平台出现内核崩溃,log如下: (红色是关键信息) [ 65.862388] msm_isp_get_buf: bug mgr open cnt = 0 [ 65.87176 ...
- 【Android 逆向】Android 系统文件分析 ( /proc/pid 进程号对应进程目录 | oom_adj | maps | smaps | mem | task | environ )
文章目录 一./proc/pid_num 进程号对应进程信息文件 1.进程查询 2.进程目录 3.进程启动命令 / 包名 4.oom_adj 进程优先级 5.maps 进程内存使用概况 6.smaps ...
- Android APP native 崩溃分析之 linker SIGBUS 崩溃
原文地址:https://caikelun.io/post/2019-05-31-android-app-native-crash-linker-sigbus/ 这是 Android APP nati ...
- Android系统的心脏-Zygote进程启动流程分析
简介: Android中,Zygote是整个Android系统的核心进程,是Android系统的心脏.所有的Android应用程序,包括Android框架层所在的进程system_server,都是由 ...
- Android 9(P)之init进程启动源码分析指南之一
Android 9 之init进程启动源码分析指南之一 Android 9 (P) 系统启动及进程创建源码分析目录: Android 9 (P)之init进程启动源码分析指南之一 Andro ...
- Android 9 (P)之init进程启动源码分析指南之三
Android 9 (P)之init进程启动源码分析指南之三 Android 9 (P)系统启动及进程创建源码分析目录: Android 9 (P)之init进程启动源码分析指南之一 An ...
- android7.0 进程管理,Android 7.0 ActivityManagerService(8) 进程管理相关流程分析(2) updateOomAdjLocked...
前一篇博客进程管理相关流程分析(1)里, 我们介绍了AMS中updateLruProcessLocked函数相关的流程. updateLruProcessLocked只是按照进程中运行的组件,粗略地定 ...
- Android 安全分析和漏洞挖掘|工具集
@tanprathan 最近在Github上放出了一份移动应用安全分析工具的清单(Cheat Sheet),里边工具比较齐全.Security Toolkit翻译了其中的Android部分,大家有兴趣 ...
- 【Android 逆向】修改运行中的 Android 进程的内存数据 ( Android 系统中调试器进程内存流程 | 编译内存调试动态库以及调试程序 )
文章目录 一.Android 系统中调试器进程内存流程 二.编译内存调试动态库以及调试程序 三.博客资源 一.Android 系统中调试器进程内存流程 修改游戏运行中的内存 , 游戏运行之后 , 游戏 ...
最新文章
- 【js】实现分页查询操作的步骤
- JVM致命错误日志(hs_err_pid.log)分析
- 你不会编程,不是你不行,很有可能是老师教的方法不好。科学家发现:对大脑而言,代码编程与语言学习不同...
- 【干货】救火必备:线上故障排查套路大全
- Linux 获取设备树源文件(DTS)里描述的资源
- 用jekyll制作高大上的网站(二)——实际应用
- linux下tomcat部署java web项目_在linux下用tomcat部署java web项目的过程与注意事项
- 安吉丽娜-朱莉曝光罕见少女照(图)
- 《缠中说禅108课》53:三类买卖点的再分辨
- 免费公网动态IP方案
- Win10运行红色警戒2尤里的复仇联机技巧+防守地图
- 微软打击盗版的“三部曲”
- 如何创建sis文件——PKG文件格式
- Re:从零开始的DS生活 轻松和面试官扯一个小时栈
- 生活记录:记录2020暑假前半部分时光
- 解除带宽限速,提升电脑网速
- 《“边缘计算+”技术白皮书》发布!
- 支撑电子政务平台的CMS内容管理系统
- [每天读一点英文:那些给我勇气的句子]George Soros—the financial crocodile
- 计算机基础之网络层的功能和服务
热门文章
- 【外网访问学校服务器】阿里云服务器+frp+内网服务器
- java双人对弈五子棋源码_JAVA高手接招————— 五子棋双人对弈程序
- Navicat 导出表生成PDM文件
- DB2-GPFS(General Parallel File System)并行文件系统简叙、安装使用及DB高可用
- 震旦复印机扫描到服务器文件夹,震旦打印一体机扫描文件上传到win2016共享文件夹,不能上传...
- Oracle 12.2新特性掌上手册 - 第一卷 Availability
- 路由器检测U盘,如果有则调用tcpdump,抓包文件到U盘
- “借壳”上市成功,戴尔首日收涨2%
- 石油币,世界第一个主权加密数字货币.md
- 杂谈SuperMap支持的三维数据