私のプログラムは、ユーザーが指定したディレクトリに書き込まれたバイナリに対して exec() を呼び出します。ディレクトリが「noexec」でマウントされたツリーにある場合、exec() は EACCES で失敗します。
exec() に失敗する代わりに、ディレクトリが noexec でマウントされているかどうかを確認できるようにしたいのですが、fcntl()、stat()、または mount() のいずれもこの情報を返しません (マンページの読み取りから)。exec システム コールのカーネル ソースを見ると、この情報は inode のメタデータに格納されているように見えますが、この情報がどのシステム コールからも返されていません。
673 struct nameidata nd;
(..)
677 err = path_lookup_open(AT_FDCWD, name, LOOKUP_FOLLOW, &nd, FMODE_READ|FMODE_EXEC);
678 file = ERR_PTR(err);
(..)
682 file = ERR_PTR(-EACCES);
683 if (!(nd.mnt->mnt_flags & MNT_NOEXEC) &&
684 S_ISREG(inode->i_mode)) {
これを行う方法を知っている人はいますか?
ありがとう。