2014-01-07 4 views
2

커널 모듈 프로그래밍을 배우기위한 자습서를 진행하고있었습니다. 그 후/proc 파일을 읽거나 쓸 때 약간의 프로세스를 수행하기 위해 약간의 프로그래밍을 작성했다. 모듈을 성공적으로 컴파일하고 insmod도 수행했다. 하지만proc 파일을 읽을 때 권한이 거부되었습니다.

고양이/proc 디렉토리/procfile

같은 proc 파일을 읽기 위해 노력하고있어 그 어느 때 권한 거부 오류가 발생합니다.

내 코드에 모듈 권한 기능이 포함되어 있으며 권한 검사가 실패 할 때마다 실제로 오류가 발생합니다.

struct cred *proc_current; //to get the EUID for current task 
static struct proc_dir_entry *our_proc_file; 

static int module_permission(struct inode *inode, int op) 
{ 
printk(KERN_INFO "permission is %d \n",op); 
if(op==4||(op==2 && (proc_current->euid == 0))) 
return 0; 
return -EACCES; 
} 

..... 
//Init module 
static int __init proc_init(void) 
{ 
printk(KERN_INFO "Init module loaded \n"); 
our_proc_file=create_proc_entry(PROC_NAME, 0644, NULL); 
if(our_proc_file == NULL) 
{ 
remove_proc_entry(PROC_NAME,proc_root); 
printk(KERN_INFO "Error in creating proc file \n"); 
return -ENOMEM; 
} 
our_proc_file->proc_fops=&fops; 
our_proc_file->proc_iops=&iops; 
our_proc_file->mode=S_IFREG | S_IRUGO | S_IWUSR; 
our_proc_file->uid=0; 
our_proc_file->gid=0; 
our_proc_file->size=80; 
printk(KERN_INFO "proc file created in '/proc' \n"); 
return 0; 
} 

초기화 모듈에서 파일 권한을 777로 변경하려고 시도했지만 그다지 도움이되지 않습니다. 권한 검사 기능을 제외하면 제대로 작동합니다. 또한 단지

printk(KERN_INFO "permission is %d \n",op); 

항상 무엇 이것에 대한 이유는 무엇이며 어떻게 실제로 여기에 권한 검사를 수행하는 (36)를 인쇄하는 권한 기능을 살펴 가지고?

실제 코드는 당신이 인용 결과를 얻을 수 있습니다 일반 사용자로 읽을하려고하면 procfile.c

+0

들여 쓰기를 해결하시기 바랍니다. – alk

+0

커널 버전? – ldx

+0

튜토리얼은 2.6 버전을 기반으로하고 최신 버전 – Chandu

답변

0

/proc 디렉토리 아래에있는 파일의 대부분은, 루트 만 여기에있다.

+0

에 따라 모든 구문을 수정했습니다. 루트 ly로 시도했지만 여전히 동일한 오류가 발생했습니다. – Chandu

0


our_proc_file->mode = S_IRUGO | S_IWUGO | S_IXUGO;

참조
our_proc_file->mode=S_IFREG | S_IRUGO | S_IWUSR;

교체 : stat.h