[완료] get_user_pages 의 error
글쓴이: inamind / 작성시간: 목, 2010/07/08 - 2:26오후
안녕하세요.
오늘은 mm 관련 함수의 사용법이 궁금해서 질문을 올립니다.
int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
unsigned long start, int len, int write, int force,
struct page **pages, struct vm_area_struct **vmas)
이 함수에서 start 에 user space 의 address 를 넣었을때는 정상적으로 리턴값이 나오는데
(kernel space address)0xffffxxxx 번지대를 넣으면 애러가 발생하네요.
저 함수가 user space address 만 받도록 되어 있는지 아시는분 계신가요??
---------------
해당 문제는 2.6.29.4 에서 strace 를 -p 옵션으로 attach 시키면 곧바로 애러가 발생하면서 detech 되는 문제를 분석하다가 발견했습니다.
최초 attach 후에 strace 에서 kernel 의 arch_ptrace 함수로 얻어올 address 를 kernel space's address 로 넘기는데
그때 get_user_pages 에서 error 를 return 해서 detech 가 되어 버리는 문제더군요.
Forums:
userspace address에만 해당됩니다.
이 함수의 목적은 VM이 user space page의 접근을 위해서 해당 page를
memory에 pinning시키는 역할을 합니다. Pinning한다는 것은 프로세스가
종료되어도 해당 page가 free되지 않게 또는 swapout이나 reclaim이 되지
않게 한다는 의미입니다.
어떻게 해서 get_user_pages에 kernel address가 넘어오는지는 모르겠지만
이 함수는 kernel 주소가 인수로 넘어올 경우 -EFAULT를 반환하게 되어 있습니다.
감사합니다.
역시 barrios 님...
제 질문에 답변 달아주시는 분들은 모두 제가 구독하는 블로그의 운영자 분들이시군요.
감사합니다. ^^
댓글 달기