2012-04-26 8 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() 'から呼び出されます。情報に感謝します。 –

関連する問題