このページを編集する際は、編集に関する方針に従ってください。

概要

引数

  • name--パス名

実装

struct file *open_exec(const char *name) {

	struct nameidata nd;
  • パス名のルックアップ処理で使われる作業データ
	int err;
	struct file *file;
	nd.intent.open.flags = FMODE_READ;
	err = path_lookup(name, LOOKUP_FOLLOW|LOOKUP_OPEN, &nd);
  • カレントタスクのルートディレクトリからパス名nameのルックアップ処理を行う
    • 見つかった場合は、引数で渡された作業データに設定され0を返す。
    • 見つからない場合はエラーコードを返す
    • 詳細はpath_lookup()/linux2.6を参照
  • LOOKUP_FOLLOWは最後の要素がシンボリックリンクならそれを解釈することを意味する
  • LOOKUP_OPENはファイルをオープンするためのルックアップを意味する
	file = ERR_PTR(err);
  • エラーコードerrをvoidへのポインタにして返す
    • これによりオブジェクトと比較することが可能になる
    • 詳細はERR_PTR()/linux2.6を参照
	if (!err) {
		struct inode *inode = nd.dentry->d_inode;
		file = ERR_PTR(-EACCES);
		if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
		    S_ISREG(inode->i_mode)) {
  • ファイルモードinode->i_modeが通常のファイルである場合は1を返す
			int err = permission(inode, MAY_EXEC, &nd);
  • inodeが属するファイルシステムのアクセス権をチェックする
    • アクセス可能であるなら0を、そうでない場合はエラーコードを返す
    • 詳細はpermission()/linux2.6を参照
			if (!err && !(inode->i_mode & 0111))
				err = -EACCES;
			file = ERR_PTR(err);
			if (!err) {
				file = dentry_open(nd.dentry, nd.mnt, O_RDONLY);
				if (!IS_ERR(file)) {
  • ポインタfileの妥当性の確認をする
    • 妥当である場合は0を、そうでない場合は1を返す
    • 詳細はIS_ERR()/linux2.6を参照
					err = deny_write_access(file);
  • ファイルfileが書き込み禁止であるか調べる
    • 書き込み禁止である場合は0を、そうでない場合はエラーコードを返す
    • 詳細はdeny_write_access()/linux2.6を参照
					if (err) {
						fput(file);
  • ファイルfileが利用されなくなったとき対応する各種オブジェクトを解放する
						file = ERR_PTR(err);
  • エラーコードerrをvoidへのポインタにして返す
    • これによりオブジェクトと比較することが可能になる
    • 詳細はERR_PTR()/linux2.6を参照
					}
				}

out:

				return file;
			}
		}
		path_release(&nd);
  • パスの作業データndに対応するdentryやファイルシステムを(自分以外から参照がない場合)解放する
	}
	goto out;

}

EXPORT_SYMBOL(open_exec);

呼出元

  • do_execve()/linux2.6 -- 2006-08-11 (金) 09:15:48
  • search_binary_handler()/linux2.6 -- 2006-08-29 (火) 20:59:00
  • 1 -- 2015-05-30 (土) 11:56:38
  • 1 -- 2015-05-30 (土) 11:56:44
  • 1 -- 2015-05-30 (土) 11:56:46
    • 1' -- 2015-05-30 (土) 11:56:47
  • 1 -- 2015-05-30 (土) 11:56:49

  • 1 -- 2015-05-30 (土) 11:56:45

履歴

  • 作者:ひら
  • 日付:2006/8/11
  • 対象:2.6.10
    更新日更新者更新内容

コメント

  • 1 -- 1? 2015-05-30 (土) 11:56:52
  • 1 -- 1? 2015-05-30 (土) 11:56:58
  • 1 -- 1? 2015-05-30 (土) 11:57:00
  • 1 -- -1'? 2015-05-30 (土) 11:57:02
    • 1' -- 1? 2015-05-30 (土) 11:57:03
  • 1 -- 1? 2015-05-30 (土) 11:57:05

  • 1 -- 1? 2015-05-30 (土) 11:56:59

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-05-30 (土) 11:57:05 (813d)