0

我在調試內核崩潰轉儲。一個進程試圖對新的區域進行內存映射似乎存在問題。問題是它無法保存內存映射信號量。rw_semaphore的負計數值

當我查看進程的mm_struct並打印其內容。我看到struct rw_semaphore mmap_sem如下所示。現在,他看起來可疑的count?它有一個負值,好像有一個競爭條件,它在檢查零之後被兩個不同的線程遞減兩次。

mmap_sem = { 
    count = -4294967295, 
    wait_lock = { 
     { 
     rlock = { 
      raw_lock = { 
      slock = 262148 
      } 
     } 
     } 
    }, 
    wait_list = { 
     next = 0xffff8801f0113e48, 
     prev = 0xffff8801f0113e48 
    } 
    }, 

回答

0

對不起,我感到困惑。我以爲死機拉正確的數據類型和打印出所有的值時使用,妥善...

貌似崩潰實用程序不讀count成員爲int ....

當我打印它作爲int,我得到正確的值。

crash> p (int) (((struct mm_struct *) 0xffff8801f15fa540)->mmap_sem).count 
$13 = 1