2009-11-28 3 views
0

register_chardev()를 수행하는 장치 드라이버 모듈이 있습니다. 드라이버 open() 함수에서 장치 노드를 열려고 시도하는 프로세스의 pid 또는 pgid를 결정할 수 있기를 원합니다. 이것이 가능한가? 누군가는 어디에서 시작해야하는지에 대한 아이디어가 있습니까?특정 프로세스 그룹에만 액세스 할 수있는 Linux 장치 노드

동일한 세션에 있지 않으면 프로세스를 새 프로세스 그룹으로 마이그레이션 할 수 없으므로 내 응용 프로그램 노드 만 사용하도록 장치 노드를 보호해야한다고 가정합니다.

답변

3

커널이 이런 종류의 정책 결정을하는 데 적합한 곳이 아닙니다. 누가 장치 노드를 열 수 있는지에 대한 권한을 설정하는 올바른 위치는 파일 시스템의 장치 노드 파일에 대한 일반적인 소유권과 사용 권한을 설정하는 것입니다 .

실제로 마음이 설정되어있는 경우 current->pid은 PID이고 current->tgid은 스레드 그룹 ID이고 current->group_leader->pid은 PGID입니다.

+0

감사합니다. 드라이버의 열린 함수가 실행되는 동안 스케줄러가 프로세스 대기열의 새 프로세스로 현재를 업데이트하지 않을 것입니다. 루트 사용자가 어쨌든 수정 된 드라이버 모듈을로드하여이를 우회 할 수 있다고 가정합니다. 하지만 장치 노드 파일에 대한 사용 권한과 소유권과 함께 사용하겠습니다. –

+0

open 함수는 syscall을 만든 프로세스의 컨텍스트에서 실행됩니다 - 선점 될 수 있지만 open 함수의 모든 코드가 실행될 때 'current'는 동일한 프로세스를 가리 킵니다. – caf

관련 문제