0

커널 크래시 덤프를 디버깅하고 있습니다. 하나의 프로세스가 새로운 영역을 메모리 맵핑하려고 할 때 문제가있는 것으로 보입니다. 문제는 메모리 맵 세마포어를 유지할 수 없다는 것입니다.rw_semaphore의 음수 카운트 값

프로세스의 mm_struct를보고 내용을 인쇄했습니다. 나는 struct rw_semaphore mmap_sem이 아래와 같이 있다는 것을 알았다. 이제 그는 count의 가치가 의심 스럽습니까? 그것은 영 (0)을 확인한 후에 두 개의 다른 스레드에 의해 두 번 감소 된 경쟁 조건이있는 것처럼 음의 값을가집니다.

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

답변

0

죄송합니다. 나는 충돌 유틸리티로 count 멤버를 읽을처럼

가 보이는 ... 충돌 올바른 데이터 형식을 가져오고 모든 값을 인쇄 할 때 제대로 그것을 사용하는 생각 int ....

I 인쇄 int로, 나는 올바른 값을 얻는다.

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