ひらメソド
マクロを書くかどうか悩み中。
結局
書いた。lookup_bdev() をこつこつ掘り中。
i_mode
先頭 4bits の bitmap 的には
という形になるはず。
で、S_ISBLK なマクロを作ってて気がついたんですが、スデに存在してた (とほほ
む
以下のエラーチェック
if (nd.mnt->mnt_flags & MNT_NODEV) goto fail;
上記 nameidata オブジェクトの nd な変数は path_lookup() で設定される形。nameidata 構造体の mnt 属性は vfsmount オブジェクトでその mnt_flags 属性は mount のオプションで設定できるとの事。マクロの定義は include/linux/mount.h にて以下。
#define MNT_NOSUID 1 #define MNT_NODEV 2 #define MNT_NOEXEC 4
3rd Edition によれば
ファイルシステムのデバイスファイルへのアクセスを禁止
とある。これって mount の nodev オプションなのかなぁ。。
man によれば
- nodev
- noexec
- nosuid
あたりになるのか。たしかにアクセス禁止であれば EACCES ですな。結構なイキオイで投入してる気がしますがそうでもないのか。
とりあえず
lookup_bdev() から bd_acquire() を呼び出す部分までなんとかなりました。続きは明日、という事で。