[SW사관학교 정글]65일차 TIL - User memory access

김승덕·2022년 11월 22일
0

SW사관학교 정글 5기

목록 보기
105/150
post-thumbnail

User memory access

과제 목표

사용자 메모리 엑세스 구현

시스템 콜을 구현하기 위해 유저의 가상 주소 공간에 접근할 수 있는 방법을 제시해줘야한다.

인수를 가져올때 이 기능이 필요하지는 않지만, 시스템 호출의 인자로 제공된 포인터에서 데이터를 읽을때는 이 기능을 통해 프록시를 해야한다.

사용자가 잘못된 포인터, 커널 메모리에 대한 포인터 또는 해당 영역 중 하나에 부분적으로 블록을 가리키는 포인터의 경우에 사용자 프로세스를 종료하여 이러한 경우를 처리해야한다.

수정 파일

/userprog/syscall.c

코드 구현

사용자가 잘못된 포인터, 커널 메모리에 대한 포인터 또는 해당 영역 중 하나에 부분적으로 블록을 가리키는 포인터의 경우인지를 확인하여 잘못된 접근이면 프로세스를 종료해주면 된다. 즉 주소 유효성 검사를 해야한다.

아래는 그에대한 코드이다.

해당 주소값이 유저 가상 주소에 해당하는지 아닌지 체크하고(is_user_vaddr) 유저 영역이 아니면 종료해준다. 또한 주소값이 NULL 값이거나, 포인터가 가리키는 주소가 유저 영역 내에 있지만 페이지로 할당하지 않은 영역이라면 종료해준다.

void check_address(void *addr)
{
	struct thread *t = thread_current();

	if (!is_user_vaddr(addr) || addr == NULL || pml4_get_page(t->pml4, addr) == NULL)
	{
		exit(-1);
	}
}

🙋‍♂️ 오늘의 하루는...

해야할게 많으면 집중력이 흩어져버리는것같다.
오히려 이럴때일수록 하나에 집중해서 하는것이 더 좋다.
선택과 집중을 잘 해서 얻을것들을 얻자.
모든것을 얻을수는 없다! 🫥

profile
오히려 좋아 😎

0개의 댓글