0
사용자 공간에 데이터를 읽고 쓰는 데 필요한 ioctl 드라이버를 작성하고 있습니다.드라이버에서 사용자 공간 포인터를 안전하게 처리합니까?
typedef struct {
unsigned int* src;
unsigned int* dst;
unsigned int buffer_size;
unsigned int key[8];
} aes_data
나는 매우 메모리 작동 방법을 가상에 정통한 아니지만, 내가 여기에 위험이 있다고 생각 : 시각화를 들어, 여기에 드라이버 호출로가는 일반적인 인수입니다. 사용자 공간 프로세스는 자신이 소유하지 않은 메모리에 대한 포인터를 제공 할 수 있습니다. 제공된 버퍼 크기로 인해 다른 프로세스의 메모리로 오버플로가 발생할 수 있습니다. 드라이버에서 이러한 사용자 공간 포인터를 책임감있게 처리하려면 어떻게해야합니까?
'copy_to_user' 및'copy_from_user' 커널의 기능을 알고 있습니까? 그렇지 않다면, 그들에 대해 배울 때입니다. 사용자 메모리 액세스 (읽기/쓰기)는 주어진 기능 (및 그 변형)으로 만 수행되어야합니다. – Tsyvarev
나는 그것들을 사용했지만 그것이 그것이 전부라는 것을 깨닫지 못했습니다. 내 부분에 대한 명시적인 확인없이 사용자가 알려주는 곳이라면 누구나 쓸 수 있습니다. – Fadeway
'copy_to_user'와'copy_from_user'는 기본 검사를 수행하며 복사를 완료하지 못했습니다. –