硬件引起的crash问题分析

问题现象

最近处理客户反馈一个native crash问题.

  • 复现步骤
    • 手机(Android 6.0)
    • com.qihoo.browser应用低概率出现native crash

定位分析

  • 相关log
    • tombstone
      Revision: '0'
      ABI: 'arm'
      pid: 13055, tid: 13117, name: ss  >>> com.qihoo.browser:loader0 <<<
      signal 11 (SIGSEGV), code 1 (SEGV_MAPERR), fault addr 0xffffffc8
          r0 abcbcc40  r1 ffffffc8  r2 00000008  r3 b4d38c00
          r4 afa6b000  r5 b00ff820  r6 00000001  r7 00000000
          r8 afa6b000  r9 b4dac800  sl b4d47420  fp b4d3f384
          ip ab528018  sp a2057718  lr b4c27037  pc ffffffc8  cpsr 800f0010
          d0  0000000000000000  d1  0000000000000000
          d2  0000000000000000  d3  0000000000000000
          d4  0000000000000000  d5  0000000000000000
          d6  0000000000000000  d7  a205739400000000
          d8  0000000000000000  d9  0000000000000000
          d10 0000000000000000  d11 0000000000000000
          d12 0000000000000000  d13 0000000000000000
          d14 0000000000000000  d15 0000000000000000
          d16 0000000000000000  d17 ab535000abf271d4
          d18 abf2700cafa5ae00  d19 0000500000005000
          d20 0000000000000000  d21 0000000000000000
          d22 0000000000000000  d23 0000000000001000
          d24 0000010200000102  d25 0000000000000102
          d26 0000000000001000  d27 0000015e816a8ca5
          d28 0000000000000001  d29 0000000000000001
          d30 0000000000000002  d31 00000000003d0909
          scr 80000010
      
      backtrace:
          #00 pc ffffffc8  <unknown>
          #01 pc 00338035  /system/lib/libart.so (_ZN3art6ThreadD1Ev+228)
          #02 pc 003478b9  /system/lib/libart.so (_ZN3art10ThreadList10UnregisterEPNS_6ThreadE+232)
          #03 pc 00340411  /system/lib/libart.so (_ZN3art6Thread14CreateCallbackEPv+600)
          #04 pc 0003f87b  /system/lib/libc.so (_ZL15__pthread_startPv+30)
          #05 pc 00019f95  /system/lib/libc.so (__start_thread+6)
      

初步分析

  • 反汇编相关so库
$ arm-linux-androideabi-addr2line -f -e /tim.zhang/tim_share/bugzilla/201709/749779/symbols/libart.so 00338035 003478b9 00340411
_ZN3art6ThreadD2Ev
/art/runtime/thread.cc:1449 (discriminator 1)
_ZN3art10ThreadList10UnregisterEPNS_6ThreadE
/art/runtime/thread_list.cc:1151 (discriminator 1)
_ZN3art6Thread14CreateCallbackEPv
/art/runtime/thread.cc:282 (discriminator 2)

  • 代码分析
    • #1相关的code

      Thread::~Thread() {
        ...
        delete wait_mutex_;
        ...
      }
      
    • #1对应的反汇编code

      ... ... 
      33802a:       f8d4 0454       ldr.w   r0, [r4, #1108] ; 0x454
      33802e:       b110            cbz     r0, 338036 <_ZN3art6ThreadD1Ev+0xe6>
      338030:       6803            ldr     r3, [r0, #0] 
      338032:       6919            ldr     r1, [r3, #16]
      338034:       4788            blx     r1  ==> crash
      ... ... 
      
    • 分析

      • wait_mutex_ = r0 = abcbcc40
        abcbcc40 b4d38c00 0000001d b4d177a0 65722e6b  .........w..k.re
        
        vptr = 0xb4d38c00
      • 查看vtable
        b4d38c00 00000000 b49e12bd b49e1391 ffffffc8  ................
        b4d38c10 ffffffc8 00000000 b49e1325 b49e13fd  ........%.......
        
        可看到,vtable中出现了多个非法函数指针.
        • 第1个虚函数art::Mutex::IsMutex变成了0x00000000
        • 第4和第5个虚函数art::Mutex::~Mutex()变成了0xffffffc8

对比实验

  • Android 6.0
    • wait_mutex_:
    (gdb) x /8xw 0xb7c3c2e0
    0xb7c3c2e0:     0xb4e6ac10      0x0000001d      0xb4e49404      0x0000fe01
    0xb7c3c2f0:     0x00000000      0x00000041      0x00000000      0x00000000
    
    • 查看vtable
    (gdb) x /8xw 0xb4e6ac10
    0xb4e6ac10 <_ZTVN3art5MutexE+8>:        0xb4b16965      0xb4b1314d      0xb4b1736d      0xb4b171ed
    0xb4e6ac20 <_ZTVN3art5MutexE+24>:       0xb4b18a45      0x00000000      0x00000000      0x00000000
    
  • Nexus 6p(Android 8.0)
    • 汇编code
      0x00000074da26e1b4 <+224>:   ldr     x0, [x19,#2432]
      0x00000074da26e1b8 <+228>:   cbz     x0, 0x74da26e1c8 <art::Thread::~Thread()+244>
      0x00000074da26e1bc <+232>:   ldr     x8, [x0]
      0x00000074da26e1c0 <+236>:   ldr     x8, [x8,#48]
      0x00000074da26e1c4 <+240>:   blr     x8
      
    • wait_mutex_
      (gdb) x /4xg 0x00000074da521c00
      0x74da521c00:   0x00000074da3dc308      0x0000007400000024
      0x74da521c10:   0x00000074da361191      0x00000074da51f000
      
    • 查看vtable
      (gdb) x /32xg 0x00000074da3dc308
      0x74da3dc308 <_ZTVN3art5MutexE+16>:     0x00000074d9ee6068      0x00000074d9ee16bc
      0x74da3dc318 <_ZTVN3art5MutexE+32>:     0x00000074d9ee16bc      0x00000074d9ee3a58
      0x74da3dc328 <_ZTVN3art5MutexE+48>:     0x00000074d9ee3b58      0x00000074d9ee3004
      0x74da3dc338 <_ZTVN3art5MutexE+64>:     0x00000074d9ee323c      0x0000000000000000
      

Root Cause

0xb4d38c00 位于libart.so的虚拟地址空间的只读部分

b48fc000-b4d31fff r-x         0    436000  /system/lib/libart.so (BuildId: 0a4c3feb37d9d2e8f30f11df6163908d) (load base 0xd000)
b4d32000-b4d32fff ---         0      1000  
b4d33000-b4d3cfff r--    436000      a000  /system/lib/libart.so
b4d3d000-b4d3dfff rw-    440000      1000  /system/lib/libart.so

目前来看,软件内存篡改可能性不大,硬件(如memory)出问题可能性大.需要关注单个硬件或同一批次硬件是否出现内存相关问题.

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 215,384评论 6 497
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,845评论 3 391
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 161,148评论 0 351
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,640评论 1 290
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,731评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,712评论 1 294
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,703评论 3 415
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,473评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,915评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,227评论 2 331
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,384评论 1 345
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,063评论 5 340
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,706评论 3 324
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,302评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,531评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,321评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,248评论 2 352

推荐阅读更多精彩内容