2012-04-26 1 views
3

EXT2 file.c에서 열린 파일 작업 (.open)dquot_file_open을 가리키며, 이는 generic_file_open을 가리키며 fs/open.c에 있습니다.파일이 EXT2에서 열릴 때 ACL 사용 권한은 어디에서 확인됩니까?

generic_file_open은 그냥 파일을 열 되려고 할 때 ACL 권한이 선택되고있는 아래 코드

int generic_file_open(struct inode * inode, struct file * filp) 
{ 
    if (!(filp->f_flags & O_LARGEFILE) && i_size_read(inode) > MAX_NON_LFS) 
     return -EOVERFLOW; 
    return 0; 
} 

있다처럼 보인다?

내가 인터넷 검색을하고 LXR을 사용하는 코드를 탐색 할 때 아래 경로를 찾았습니다.

do_sys_open -> do_filp_open -> path_openat -> do_last -> may_open -> inode_permission -> do_inode_permission -> generic_permission -> acl_permission_check -> check_acl -> posix_acl_permission하지만 EXT2의 .open이 do_sys_open에 링크하는 방법을 나는 이해할 수 없었다.

파일을 여는 동안 acl 사용 권한을 확인하는 방법에 대한 도움을 주시면 큰 도움이 될 것입니다.

답변

2

당신은 잘못된 끝에서 그것을 찾고은 : do_sys_open 같은 이름은 시스템 콜 진입 점, 그리고 궁극적으로는 ext2에게 open 일상 후 확인하는 권한을 찾기 위해 VFS 층을 통해 이동합니다.

+0

감사합니다. @geeosaur .. 나는 오픈 시스템 호출이 호출 되 자마자 ext2'open' 루틴이 호출된다는 인상하에있었습니다. 귀하의 게시물은 큰 도움이되었다. 처음에는'do_sys_open'이 호출되고'do_sys_open'에서 루틴 체인을 호출 한 후 ext2'open'이 호출됨을 이해했습니다. –

1

나는 ACL 코드에 편견이 있다고 생각한다; 다음 inodef상의 호출로 진행,

f->f_op = fops_get(inode->i_fop); 
    /* ... */ 
    if (!open && f->f_op) 
      open = f->f_op->open; 
    if (open) { 
      error = open(inode, f); 
      if (error) 
        goto cleanup_all; 
    } 

이것은 autovariable openinode->i_fop->open 함수 포인터를 저장합니다

__dentry_open() 내 : 권한이 부여 된 후, nameidata_to_filp__dentry_open에 따릅니다.

+0

@sarnold에게 답장을 보내 주셔서 감사합니다. 오프 트랙에 대한 권한을 확인하는 것이 었습니다. 권한 확인이 완료된 후에'name_data_to_filp' 함수가'do_last' 함수에서 호출된다는 점도 중요했습니다. ext2'open'은'__dentry_open()'에서 호출됩니다. 정보를 가져 주셔서 감사합니다. –