copy_from_user() 궁금점
글쓴이: choboja / 작성시간: 일, 2010/11/21 - 1:01오전
안녕하세요 ??
copy_from_user() 함수에 대해 궁금한점이 있습니다.
위 함수가 user 영역의 데이터를 kernel영역으로 옮기는 것으로 알고있습니다.
제가 궁금한건 system call 추가시 위 함수를 사용할 필요가 있는지 궁금하네요.
예를 들어
* system call부분
struct int_list{ unsigned int nr; }; asmlinkage long sys_enter_critical(int nr_list, struct int_list* list ) { kernel_data.nr = list[i].nr; }
* application
struct int_list{ unsigned int nr; }; struct int_list list = (struct int_list*)malloc(sizeof(struct int_list)*nr_pid); syscall(__NR_enter_critical , nr_pid, list );
위에처럼 그냥 pid_list 포인터를 넘겨주고 받은 데이터를 원하는 kernel data부분에 대입해주면 되지 않나요?
위 같은 경우는 list의 값을 하나하나 원하는 곳에 대입해주어야하는데,
kernel에서 똑같은 데이터 구조가 있고 해당 부분을 통째 복사를 하기 위해 사용하는것인가요?
음.. 헷갈리네요. 답변 부탁드립니다.
Forums:
1. controlled page fault:
1. controlled page fault: mapping되지 않은 VA를 arg로 줬을때
2. range check: kernel space의 VA를 arg로 줬을때
3. race condition: kernel에서 user space를 엑세스 하고 있을때 다른 cpu에서 돌고 있는 thread가 엑세스 해서, TOCTOU를 막으려고
4. architecture: kernel에서 userspace를 마구 엑세스 할 수 없는 아키텍쳐도 많아요
대략 이렇게 생각해볼 수 있겠군요 - 제가 글쓰는걸 워낙 싫어해서 .. :)
댓글 달기