構造体ファイルが与えられた場合、Linuxカーネルスペースで関連するファイル記述子を取得することは可能ですか?sys_chmodまたはsys_fchmodのいずれかを使用して権限を変更しようとしています。1つはファイル記述子を取り、もう1つはユーザースペースからのファイル名を期待します。ファイル名を取得する方法はわかりますが、ユーザースペースポインタにキャストするにはどうすればよいですか?
ありがとう
構造体ファイルが与えられた場合、Linuxカーネルスペースで関連するファイル記述子を取得することは可能ですか?sys_chmodまたはsys_fchmodのいずれかを使用して権限を変更しようとしています。1つはファイル記述子を取り、もう1つはユーザースペースからのファイル名を期待します。ファイル名を取得する方法はわかりますが、ユーザースペースポインタにキャストするにはどうすればよいですか?
ありがとう
あなたが求めている機能はchmod_common
:
static int chmod_common(struct path *path, umode_t mode)
path
とあなたが設定したいモードを取ります。残念ながら、お気づきのとおり、これは静的であり、明らかにエクスポートされません。したがって、複数の方法で進むことができます。
struct file
(醜い)から「ファイル記述子」を取得するsys_chmod
これsys_chmod
でユーザーポインタが必要になりますが、カーネルを使用しています。これをだますためにできることは次のとおりです。
mm_segment_t oldfs = get_fs();
char __user *userptr;
userptr = (char __user __force *) kernptr;
set_fs(KERNEL_DS);
/* call sys_chmod */
set_fs(oldfs);
これはすべて、「カーネルで絶対にすべきでないこと」と非常に一致しています。